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

Microsoft Teams机器人中Adaptive Card如何获取用户输入数据

处理Teams Adaptive Card提交事件的方法

是的,存在专门处理Adaptive Card提交事件的逻辑,你需要在Bot的消息处理流程中捕获Submit按钮触发的Activity,或者使用Teams Toolkit提供的Action Handler来处理。以下是具体实现方式:

方式一:在Bot的onMessage事件中直接处理

当用户点击Adaptive Card的Submit按钮时,Teams会向Bot发送一条message类型的Activity,其中activity.value字段包含所有表单输入控件的ID和对应值。你可以在Bot的消息处理逻辑中判断并处理:

修改Bot主文件(如bot.ts)中的onMessage方法:

import { TurnContext } from "botbuilder";
import { MyCommandHandler } from "./myCommandHandler";

const commandHandler = new MyCommandHandler();

this.onMessage(async (context: TurnContext, next) => {
  // 检查是否为Adaptive Card提交的表单数据
  if (context.activity.value) {
    // 获取表单所有输入值
    const formData = context.activity.value;
    
    // 根据控件ID提取对应数据
    const selectedTask = formData["dropdown-task"];
    const selectedDate = formData["date"];
    const selectedTime = formData["time"];
    const timeSpent = formData["dropdown-time-spent"];
    const description = formData["description"];

    // 执行后续业务逻辑,比如保存数据、回复用户
    await context.sendActivity(`已收到你的提交:
任务:${selectedTask}
日期:${selectedDate}
时间:${selectedTime}
耗时:${timeSpent}
描述:${description}`);
  } else {
    // 处理原始命令逻辑
    await commandHandler.handleCommandReceived(context, context.activity.text);
  }

  await next();
});

方式二:使用Teams Toolkit的Action Handler

如果你使用的是新版Teams Toolkit,可以创建专门的Action Handler类来处理Submit动作,让代码更模块化:

1. 修改Adaptive Card的Submit按钮,添加标识字段

给Submit按钮的data属性添加一个verb字段,用于区分不同的提交动作:

{
  "type": "Action.Submit",
  "title": "Submit",
  "style": "positive",
  "id": "submit-btn",
  "data": {
    "verb": "submit-form"
  }
}

2. 创建Submit动作处理器

新建submitActionHandler.ts文件:

import { AdaptiveCardActionHandler, TurnContext } from "@microsoft/teamsfx";

export class SubmitActionHandler implements AdaptiveCardActionHandler {
  // 对应Submit按钮data中的verb值
  triggerVerb = "submit-form";

  async handleActionInvoked(context: TurnContext, actionData: any) {
    // actionData包含所有表单输入值
    const selectedTask = actionData["dropdown-task"];
    const selectedDate = actionData["date"];
    
    // 处理业务逻辑并回复用户
    await context.sendActivity(`提交成功!你选择的任务是:${selectedTask}`);
  }
}

3. 注册Action Handler

在Bot初始化文件(如index.ts)中注册该处理器:

import { TeamsFx, TeamsBot } from "@microsoft/teamsfx";
import { SubmitActionHandler } from "./submitActionHandler";

const teamsfx = new TeamsFx();
// 注册所有动作处理器
const actionHandlers = [new SubmitActionHandler()];
const bot = new TeamsBot(teamsfx, actionHandlers);

注意事项

  • 确保Adaptive Card中所有输入控件的id属性唯一且正确,这是获取对应值的关键。
  • 若使用Teams Toolkit的Action Handler,需确保Bot实例是通过TeamsBot类创建的,而非原生Bot Framework的ActivityHandler。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 16:14:55