Создать новую тему в чате Google - как отправить новую указанную клавишу темы?

Я создаю несколько простых функций бота для создания тем и отправки сообщений в чат. Создание "произвольных" потоков и вставка сообщений в потоки с известными идентификаторами - это хорошо, нет проблем, я просто не могу указать идентификатор потока при создании нового. Я следовал за деталями в документации Google, но не могу заставить их работать.

См. https://developers.google.com/hangouts/chat/how-tos/bots-develop

Это мой код - очень простой, но запутанный

$("#fa-comment").click(function() {
    $.ajax({
        method: 'POST',
        url: 'https://chat.googleapis.com/v1/spaces/SPACE_ID/messages?key=KEY_ID&token=TOKEN_ID',
        dataType: "json",
        contentType: "application/json; charset=UTF-8",
        //data: "{'text':'This creates a new thread and inserts message - thread id is not known'}",
        //data: "{'text':'This inserts into a current thread with known id', 'thread':{'name':'spaces/SPACE_ID/threads/THREAD_ID'}}",
        success: function () {
            $('.response').html('Success');
        }
    });
})

Оба закомментированы data: Линии работают отлично.

Я пытался:

  • data: "{'text':'This inserts into a new thread with specified id', 'thread':{'name':'spaces/SPACE_ID/threads/SPECIFIED_THREAD_ID'}}", но это приводит к ошибке 500
  • https://chat.googleapis.com/v1/spaces/SPACE_ID/messages?\ threadKey=ARBITRARY_STRING как написано в документации, но никаких вариантов не работает - получите 400 ошибок и нарушений / неизвестная переменная 'threadkey'

Я следовал всеми возможными способами из документации и пробовал варианты, но безрезультатно.

Несомненно, я кое-что здесь упустил, но не вижу. Любая помощь для этого позволила бы моим волосам снова расти!

3 ответа

Я считаю, что вы, возможно, уже решили это, но в любом случае...

Параметр запроса должен быть thread_key вместо того threadKey. Итак, в вашем случае это будет:

url: 'https://chat.googleapis.com/v1/spaces/SPACE_ID/messages?key=KEY_ID&token=TOKEN_ID&thread_key=THREAD_KEY'

Надеюсь, это пригодится кому-то в будущем:).

Я только что провел утро с той же проблемой, и она плохо документирована.

The threadKeyзаголовок работает как задокументировано, но только если вы укажетеmessageReplyOptionзаголовок какREPLY_MESSAGE_FALLBACK_TO_NEW_THREAD.

Я немного изменил ваш код, и он должен работать.

      $("#fa-comment").click(function() {
  $.ajax({
    method: 'POST',
    url: 'https://chat.googleapis.com/v1/spaces/SPACE_ID/messages?key=KEY_ID&token=TOKEN_ID&messageReplyOption= REPLY_MESSAGE_FALLBACK_TO_NEW_THREAD',
    dataType: "json",
    contentType: "application/json; charset=UTF-8",
    data: "{'text':'This replies to an existing thread with the same threadKey, or starts a new thread if it doesn't exist', 'thread':{'threadKey':'myThreadKey'}}",
    success: function() {
      $('.response').html('Success');
    }
  });
})

Также обратите внимание, что заголовок threadKey теперь устарел (но все еще работает). Но теперь предпочтительнее указывать threadKey в теле запроса (что я и сделал в приведенном мной примере.

Надеюсь это поможет.

В GoogleChat «создание темы» ничем не отличается от «отправки сообщения в тему». Таким образом, вы можете просто отправить любое сообщение, следуя основному руководству, и просто добавить 'threadKey=my_thread_key' в качестве строки запроса к URL-адресу веб-перехватчика. Если my_thread_key не существует, GoogleChat просто создаст новый поток с этим ключом.

Затем используйте ту же строку запроса со значением «my_thread_key» на любом другом веб-перехватчике, чтобы отправить «ответ» в существующий поток.

Подводя итог, один и тот же процесс для создания и ответа на темы. Если не существует, он будет создан. Если существует, на него будет дан ответ.

Простой запрос можно увидеть ниже. Обратите внимание, что все значения, кроме MY_THREAD_KEY в «url», должны быть предоставлены вам при создании веб-перехватчика для вашего пространства.

      axios({
  method: "post",
  url: `https://chat.googleapis.com/v1/spaces/<MY_SPACE_KEY>/messages?threadKey=<MY_THREAD_KEY>&key=<MY_KEY>&token=<MY_TOKEN>`,
  data: {
    text: `Create/reply to thread`,
  },
});

Ознакомьтесь с документацией GoogleChat для разработчиков, в которой объясняется, как работает threadKey:

https://developers.google.com/chat/api/reference/rest/v1/spaces.messages/create#query-parameters

Другие вопросы по тегам