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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:19:18