Azure Bot Service的message endpoint能否检测用户编辑消息行为
结论
你收不到用户编辑消息的请求不是Azure Bot Service不支持这个能力,是默认配置下不会转发消息更新事件,同时你的服务大概率也没做对应事件类型的适配,按下面步骤调整即可。
操作步骤
- 首先确认你接入Bot的通道支持消息编辑上报
Teams、官方Web Chat、Direct Line 这几个常用通道都是原生支持编辑/删除消息事件上报的,如果你用的是第三方自定义通道,需要先和通道提供方确认是否会把用户编辑消息的动作同步给Azure Bot Service。 - 开启Azure Bot侧的消息更新事件开关
进入Azure门户里你的Bot Service资源页,找到配置栏,把消息更新事件转发(对应英文选项是Enable messaging update events)的勾选框打上,保存配置后等3-5分钟让配置全局生效。 - 适配你本地服务的事件处理逻辑
注意用户编辑消息时,Bot Service推送到你message endpoint的不是普通的message类型活动,而是messageUpdate类型的活动。你当前的服务应该只做了message类型的请求处理,所以会直接忽略这类请求,表现就是没有任何请求进来。
处理messageUpdate活动时你可以拿到这些核心信息:- 被编辑的原消息ID
- 编辑后的最新消息内容
- 编辑操作的发起用户信息
- 编辑操作的时间戳
如果你是用微软官方提供的Bot Framework SDK开发的,直接新增messageUpdate类型的处理路由即可,不需要手动解析原始请求结构。
排查提示
如果按上面配置完还是收不到请求,可以先用Azure Bot自带的测试Web Chat功能做验证:在测试窗口发一条消息再编辑,用抓包工具看你本地服务有没有收到请求,先排除是防火墙拦截、服务路由配置错误这类基础问题。
另外如果后续需要处理用户删除消息的场景,对应的活动类型是messageDelete,可以一并做适配。部分不支持消息编辑的通道(比如短信通道、旧版第三方社交平台通道)本身不会上报这类事件,配置了也无法收到,需要提前确认通道能力。
内容的提问来源于stack exchange,提问作者Zhongwei Xu
相关产品推荐
相关产品推荐

