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

MS Teams聊天卡片按钮能否启动带撰写能力TaskModule并回传卡片

Teams会话卡片循环交互实现方案

预期实现流程

  • 用户点击聊天会话内卡片上的按钮,启动支持内容撰写的TaskModule
  • 用户提交TaskModule内容后,生成的新卡片插入聊天会话
  • 其他用户可通过新插入的卡片重新触发流程,实现循环交互

现有流程断点

现有示例代码可覆盖前3步流程,第4步出现中断:

  1. 用户A触发Messaging Extension操作composeExtension/fetchTask,应用正常启动TaskModule
  2. 用户A提交TaskModule,触发composeExtension/submitAction事件,应用正常将生成卡片添加到聊天撰写框
  3. 用户B点击聊天内已发送卡片的按钮,触发task/fetch事件,应用正常启动TaskModule
  4. 用户B提交TaskModule,触发task/submit事件,该处理逻辑不属于Messaging Extension处理器范畴,应用无法完成卡片添加到会话/撰写框的操作

注:上述步骤1、2也可通过link unfurl(链接展开)能力替代实现。

最低摩擦成本落地方案

核心逻辑:直接在task/submit处理逻辑中通过当前会话上下文发送卡片,无需额外授权,无需跳转,用户点击按钮的操作即代表使用许可。
不需要强制走Messaging Extension的撰写框返回逻辑,具体改动点如下:

  • 原有task/fetch触发TaskModule、消息扩展提交、链接展开的逻辑全部保留,不需要修改
  • 重写handleTeamsTaskModuleSubmit处理方法:收到TaskModule提交请求时,直接调用TurnContext的sendActivity方法,将生成的新卡片作为附件发送到当前聊天会话,之后返回空的TaskModule响应关闭弹窗即可
  • 新发送的卡片自带相同的触发按钮,其他用户点击即可重新启动流程,形成完整循环

修正后的核心代码片段

仅需替换原有handleTeamsTaskModuleSubmit方法实现,其余代码无需调整:

// 处理task/submit事件
handleTeamsTaskModuleSubmit = async (
  context: TurnContext,
  taskModuleRequest: TaskModuleRequest
): Promise<TaskModuleResponse> => {
  // 直接向当前会话发送新生成的卡片
  await context.sendActivity({
    attachments: [getChatCard()]
  });
  // 关闭TaskModule弹窗
  return {
    task: {
      type: "continue",
      value: null
    }
  };
};

方案说明

  • 权限层面:卡片按钮触发的invoke请求自带当前会话的合法权限,context.sendActivity可以直接在当前会话发消息,不需要用户单独给应用授权,符合无额外授权的要求
  • 交互成本:卡片直接发送到会话,省去用户手动点击发送按钮的步骤,比消息扩展返回撰写框的流程摩擦成本更低
  • 兼容性:完全复用原有getChatCard卡片生成逻辑,和消息扩展、链接展开生成的卡片体验完全一致

补充:如果业务要求必须把卡片插入用户个人撰写框而非直接发送到会话,目前Teams没有提供从普通task/submit事件触发撰写框插入的公开能力,直接发送到会话是唯一无额外授权、无额外页面跳转的可行方案。

内容的提问来源于stack exchange,提问作者bjnsn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 20:06:26