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
相关产品推荐
相关产品推荐

