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

如何通过DirectLine API捕获用户typing事件?Facebook Messenger是否支持?

捕获DirectLine API(REST)中的用户Typing事件

我来帮你梳理下通过DirectLine API(REST)处理用户typing事件的具体方案,还有你提到的渠道兼容性问题——确实这部分容易让人混淆,咱们一步步来:

一、客户端给机器人发送Typing事件

如果是要从用户端把typing状态传给机器人,你需要构造一个符合DirectLine规范的POST请求:

  • 接口地址:https://directline.botframework.com/v3/directline/conversations/{conversationId}/activities
  • 请求头必须带上你的DirectLine密钥:Authorization: Bearer YOUR_DIRECTLINE_SECRET
  • 请求体要严格按照这个格式来:
{
  "type": "typing",
  "from": {
    "id": "你的用户ID",
    "name": "你的用户名"
  },
  "conversation": {
    "id": "当前对话ID"
  }
}

发送成功后,机器人端就能监听到ActivityTypes.Typing类型的活动,你可以在机器人代码里针对这个事件做相应处理。

二、客户端接收机器人的Typing事件

要是你需要在客户端捕获机器人正在输入的状态,有两种方式:

  • WebSocket流式方式:连接这个地址wss://directline.botframework.com/v3/directline/conversations/{conversationId}/stream,机器人发送的typing事件会实时推送到客户端,这种方式延迟最低。
  • 轮询方式:定期调用GET https://directline.botframework.com/v3/directline/conversations/{conversationId}/activities?watermark={上次返回的水印值},然后在返回的活动列表里筛选type为typing的条目即可。

三、关于渠道兼容性的关键说明

你提到的2017年的答复其实现在依然适用:Bot Framework本身是支持typing事件的,但能不能在具体渠道生效,完全取决于渠道自身的API支持:

  • 支持的渠道:Slack、Skype、Teams,还有直接用DirectLine连接的Web Chat,这些渠道能正常传递typing事件,用户和机器人都能收到状态。
  • 不支持的渠道:Facebook Messenger(截至目前还是不支持双向的typing事件传递),这类渠道会直接忽略typing事件,不管是用户还是机器人发的,都不会展示出来。

四、常见坑点排查

  • 要是客户端发了typing事件但机器人没收到,先检查请求格式:type字段必须是小写的"typing",还有请求头的授权密钥有没有过期或者写错。
  • 要是机器人发了typing事件但客户端收不到,先确认你用的渠道是不是支持这个功能——如果是Facebook Messenger这类不支持的渠道,就算DirectLine传了事件,渠道也不会把它展示给用户。

内容的提问来源于stack exchange,提问作者Francisco Carriedo Scher

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 06:43:14