如何在Microsoft Teams中触发消息action命令并读取内容生成自适应卡片
Teams消息扩展Action命令实现(读取消息生成预填充自适应卡片)
前置说明
你已经完成了query类型消息扩展的开发,新增action类型命令只需要在原有基础上修改应用清单、新增对应invoke请求的处理逻辑即可。
1. 更新应用清单注册Action命令
打开你的应用manifest.json文件,在composeExtensions.commands数组中新增如下配置:
{ "id": "generateCardFromMessage", "type": "action", "title": "生成自适应卡片", "description": "读取当前消息内容生成预填充自适应卡片", "context": ["message"], "parameters": [] }
重点注意context字段要包含message,否则该命令不会出现在消息的右键/更多操作菜单中。
2. 处理Action触发请求,读取消息内容
用户触发命令后,Teams会向你的服务端发送composeExtension/submitAction类型的invoke请求,原消息内容可以从请求载荷的value.messagePayload.body.content路径直接读取。
如果你使用Bot Framework SDK进行开发,可以直接通过上下文对象的turnContext.activity.value.messagePayload.body.content属性获取消息内容,无需手动解析HTTP请求。
3. 构造预填充数据的自适应卡片
将读取到的消息内容和你需要预加载的其他信息,填充到自适应卡片模板对应位置即可,示例模板如下:
{ "type": "AdaptiveCard", "$schema": "http://adaptivecards.io/schemas/adaptive-card-1.5.json", "version": "1.5", "body": [ { "type": "TextBlock", "text": "生成的自定义卡片", "size": "Large", "weight": "Bolder" }, { "type": "TextBlock", "text": "原消息内容:", "weight": "Bolder", "spacing": "Medium" }, { "type": "TextBlock", "text": "${originalMessageContent}", "wrap": true, "spacing": "Small" }, { "type": "Input.Text", "id": "extraInfo", "label": "补充信息", "value": "${preloadCustomValue}", "spacing": "Medium" } ], "actions": [ { "type": "Action.Submit", "title": "发送到聊天" } ] }
将模板里的${originalMessageContent}和${preloadCustomValue}替换为你实际读取到的消息内容和预加载信息即可。
4. 返回响应唤起卡片弹窗
构造完卡片后,返回如下格式的invoke响应,Teams会自动弹出带预填充内容的卡片窗口:
{ "task": { "type": "continue", "value": { "card": { "contentType": "application/vnd.microsoft.card.adaptive", "content": <替换为你构造完成的自适应卡片JSON对象> }, "height": "large", "width": "medium", "title": "自定义卡片生成" } } }
可选:提交卡片后发送到聊天窗口
如果需要用户点击提交按钮后,将最终填写完成的卡片发送到当前聊天,只需要在处理卡片提交的invoke请求时,返回如下格式的响应即可:
{ "composeExtension": { "type": "result", "attachmentLayout": "list", "attachments": [ { "contentType": "application/vnd.microsoft.card.adaptive", "content": <替换为用户提交后的最终卡片内容> } ] } }
内容的提问来源于stack exchange,提问作者GMAC
相关产品推荐
相关产品推荐

