首页 > 解决方案 > 传出 Webhook 响应消息的格式是什么?

问题描述

我在 MS Teams 中创建了一个传出 webhook。在提及传出 webhook 中指定的名称时,它将成功地在我的应用程序中引发 API 调用 - 一切都很好。

根据文档,我的应用程序需要使用响应消息响应该请求。但我绝对找不到此回复中接受的格式的任何文档。

我能找到的唯一参考是这个: https ://docs.microsoft.com/en-us/microsoftteams/platform/webhooks-and-connectors/how-to/add-outgoing-webhook

不幸的是,它没有详细说明此类消息的外观。它仅给出了一个可以接受的示例:

{
    "type": "message",
    "text": "This is a reply!"
}

然而,我不想用简单的消息来回应,而是更愿意用更丰富的格式来回应,比如卡片,或者 - 在某些情况下是反应而不是消息。

那可能吗?是否有任何文件,还有哪些其他回应是可以接受的?除了可以返回的“消息”之外,还有其他类型吗?

标签: microsoft-graph-apimicrosoft-teams

解决方案


好的,这是为团队处理事情的一种快速而肮脏的方式。出于某种原因,这并没有很清楚地记录下来,但是团队需要将“卡片”创建为附件,而不是直接获得响应。

我所做的是首先捕获存储卡所需的样板:

string TeamsAdaptiveCardBoilerplate =
@"
{
    ""type"":""message"",
    ""attachments"":[
        {
            ""contentType"":""application/vnd.microsoft.card.adaptive"",
            ""contentUrl"":null,
            ""content"":{
                ""$schema"":""http://adaptivecards.io/schemas/adaptive-card.json"",
                ""type"":""AdaptiveCard"",
                ""version"":""1.2"",
                ""body"":[
                    @@BODY@@
                ]
            }
        }
    ]
}
";

然后,我构建正文(通常,这不是静态文本,但它可以很好地作为示例)

string AdaptiveCardBody =
@"
        {
            ""type"": ""TextBlock"",
            ""text"": ""Here is a ninja cat""
        },
        {
            ""type"": ""Image"",
            ""url"": ""http://adaptivecards.io/content/cats/1.png""
        }
";

接下来我简单地将占位符换成实体:

var jsonPayload1 = TeamsAdaptiveCardBoilerplate.Replace("@@BODY@@", AdaptiveCardBody); 

最后,返回组装好的有效载荷(转换回一个对象,以便设置正确的响应标头):

var payload1 = JsonConvert.DeserializeObject(jsonPayload1);
return (ActionResult)new OkObjectResult(payload1);

从那里,你应该很高兴。

笔记:

为方便起见,整个“内容”(而不是“正文”)块是您复制/粘贴到 Adaptivecards.io 设计器中的内容。如果它对您很重要,您可以重构上面的内容以反映现实。


推荐阅读