You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 17:48:03