Бот Hangout, как @mention пользователя в сообщении карты

Я создал бота, который должен информировать пользователей из группы о задачах, на которые они были назначены. Он работает хорошо с использованием простого сообщения, но не работает, если вставить сообщение карты - я получил "---" или "???" вместо упоминания. Я пытался поместить его в разные виджеты: keyValue, textParagrap или header, но это ничего не меняет. Кто-нибудь знает, возможно ли это вообще?

3 ответа

Решение

Просмотр описания API должен был подтвердить ваши подозрения - на данный момент вы не можете упомянуть пользователя с помощью сообщения карты, только простое сообщение.

Форматирование текста по карточке:

Внутри карточек большинство текстовых полей поддерживают базовое форматирование текста с помощью небольшого подмножества тегов HTML.

а также

Обратите внимание, что текстовое тело основного сообщения анализируется с использованием другого синтаксиса разметки.

Справочная страница API по форматам сообщений для простых сообщений однозначно определяет, как в простых сообщениях упоминаются пользователи ( 1, 2)

Еще одна подсказка приходит при просмотре описания API spaces.messages а также cards: метаданные, связанные с Message включает в себя Annotations который включает в себя UserMentionMetadata,
При просмотре спецификации для Card Никакой такой спецификации не наблюдается. Описание текстового виджета содержит только форматированный текст.

Таким образом, если вам необходимо уведомить определенного пользователя о содержании карты, вы должны либо отправить карту пользователю, либо упомянуть пользователя в простом сообщении непосредственно перед или после отправки карты.

Для этого вы можете объединить простые сообщения с карточками в одной публикации.

Например, следующий JSON отобразит сообщение с @allв тексте над карточкой. Если вы знаете идентификатор пользователя, вы можете изменить<users/all> чтобы уведомить конкретного пользователя.

{
  "cards": [
    {
      "sections": [
        {
          "widgets": [
            {
              "keyValue": {
                "content": "<pre>ls -l</pre>",
                "contentMultiline": "true",
                "icon": "DESCRIPTION",
                "topLabel": "Executed Job"
              }
            },
            {
              "keyValue": {
                "content": "<pre><font color=\"#006400\">passed</font></pre>",
                "contentMultiline": "true",
                "icon": "BOOKMARK",
                "topLabel": "Status"
              }
            },
            {
              "keyValue": {
                "content": "<pre>5 milliseconds</pre>",
                "contentMultiline": "true",
                "icon": "CLOCK",
                "topLabel": "Elapsed"
              }
            }
          ]
        }
      ]
    }
  ],
  "text": "<users/all> : Job `ls -l` *passed*"
}

в частности, <users/123456789> будет работать. но один должен присоединиться к группе. В противном случае он будет пустым.

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