环聊机器人如何在卡片消息中@mention用户

问题描述 投票:0回答:1

我创建了一个机器人,它应该通知组中的用户他们被分配到的任务。它使用简单的消息很好用,但是一旦插入卡片消息就不能正常工作 - 我得到了“---”或“???”而不是提。我试图将它放在不同的小部件中:keyValue,textParagrap或header但它不会改变任何东西。有谁知道它是否可能?

google-apps-script hangout hangouts-chat google-chat
1个回答
0
投票

对API描述的审查应该已经证实了您的怀疑 - 此时,您不能通过Card消息提及用户,只能提供简单的消息。

对于Card Text Formatting

在内部卡片中,大多数文本字段通过一小部分HTML标记支持基本文本格式。

请注意,使用不同的标记语法解析基本消息的文本正文

关于简单消息的消息格式的API参考页面明确标识了如何在简单消息中提及用户(12

查看spaces.messagescards的API描述时会出现另一个提示:与Message相关的元数据包括Annotations,其中包括UserMentionMetadata。 如果查看Card的规格,则不会观察到此类规格。 text widget的描述仅包含格式化文本。

因此,如果您需要通知特定用户有关卡的内容,您应该将卡片用于用户,或者在卡片发送之前或之后立即通过简单的消息提及用户。


0
投票

您可以在一个帖子中将简单消息与卡片结合使用来实现此目的。

例如,以下JSON将在卡上方的文本中显示带有@all的消息。如果您知道用户ID,则可以更改<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*"
}
© www.soinside.com 2019 - 2024. All rights reserved.