如何在BotFramework(Teams渠道)实现自动完成功能与事件追踪?
嘿,作为刚上手Bot Framework开发Teams机器人的新手,这两个问题我当初刚接触时也踩过坑,来给你详细说说:
一、在Bot Framework(Teams渠道)中实现自动完成功能
Teams里的自动完成主要分两种场景,对应不同的实现方式:
1. 聊天输入框的命令/内容自动完成
静态命令建议(通过App Manifest配置)
如果你想让用户@机器人后直接看到预设的命令选项,可以在Teams应用的manifest.json里配置静态命令:
"commands": [ { "title": "查询订单", "description": "快速查询你的历史订单", "commandId": "searchOrders", "parameters": [ { "name": "订单号", "description": "输入订单号精准查询", "inputType": "text" } ] } ]
用户@机器人后,Teams会自动弹出这些命令,输入参数时也会有对应的提示文本。
动态内容建议(通过Bot代码实现)
如果需要根据用户的输入内容实时返回建议,可以在Bot的消息处理逻辑中返回带suggestedActions的回复:
protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken) { var userInput = turnContext.Activity.Text?.ToLower(); var reply = MessageFactory.Text("我猜你想找这些选项:"); // 根据用户输入动态生成建议 if (userInput?.Contains("订单") == true) { reply.SuggestedActions = new SuggestedActions() { Actions = new List<CardAction>() { new CardAction(ActionTypes.ImBack, "我的全部订单", value: "查询我的订单"), new CardAction(ActionTypes.ImBack, "今日新增订单", value: "查询今日订单") } }; } await turnContext.SendActivityAsync(reply, cancellationToken); }
2. 自适应卡片输入框的自动完成
如果是在自适应卡片的输入框里需要自动完成,有两种方式:
- 静态建议:直接在卡片的
Input.Text组件中添加suggestions属性:{ "type": "Input.Text", "id": "orderId", "placeholder": "输入订单号", "suggestions": ["ORD12345", "ORD67890", "ORD11223"] } - 动态建议:开启
fetchSuggestions属性,当用户输入时,Teams会触发Bot的invoke事件,你可以在OnInvokeActivityAsync方法中返回实时生成的建议列表。
二、Bot Framework中的输入事件追踪
Bot Framework确实支持输入事件追踪,但Teams渠道下的事件支持有一定限制,分情况来看:
1. 基础输入事件追踪(完全支持)
最常用的就是监听用户发送消息的事件,每次用户按下回车发送文本、点击卡片按钮或建议选项时,Bot都会收到Message类型的Activity,你可以在OnMessageActivityAsync方法中记录这些输入:
protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken) { // 追踪用户ID、输入内容、时间等信息 var userId = turnContext.Activity.From.Id; var inputContent = turnContext.Activity.Text; var timestamp = turnContext.Activity.Timestamp; // 这里可以把信息写入日志、数据库或监控系统 Console.WriteLine($"用户 {userId} 在 {timestamp} 输入了:{inputContent}"); await turnContext.SendActivityAsync(MessageFactory.Text($"收到你的输入:{inputContent}"), cancellationToken); }
2. 细粒度输入事件(目前Teams渠道不支持)
如果你想追踪用户在聊天框中输入过程中的实时变化(比如每输入一个字符就触发事件),很遗憾,Teams目前不会把这类键盘事件发送给Bot。只有当用户提交输入时,Bot才会收到对应的Activity。
3. 其他可追踪的相关事件
除了消息事件,你还可以监听这些场景:
- 对话更新事件:通过
ConversationUpdate事件追踪用户加入/离开对话的情况; - 卡片交互事件:用户操作自适应卡片(比如输入内容后点击提交按钮)会触发
Invoke事件,你可以在OnInvokeActivityAsync中获取输入框的最终值; - Messaging Extension交互:如果用了消息扩展,用户的查询请求会触发
composeExtension/query等Invoke事件,同样可以追踪。
内容的提问来源于stack exchange,提问作者Akash Tyagi
相关产品推荐
相关产品推荐

