Azure Copilot中的Bot Skill无法在全渠道在线聊天组件或SMS渠道接收事件活动
我之前也碰到过类似ACS渠道下事件无法传递的问题,结合Azure Copilot和Omnichannel的工作机制,给你几个排查和解决的方向:
补全事件活动的必填字段
你当前的事件结构可能缺了Omnichannel/ACS渠道要求的关键信息,比如必须明确指定channelId,还要复用当前上下文里的会话ID和接收方信息,避免手动填错导致路由失败。调整后的事件结构可以参考:transfer_event_activity = { "type": "event", "name": "initiateHandoff", "from": { "id": "1234", "name": "me" }, "channelId": "omnichannel", # SMS渠道填"acssms"即可 "conversation": { "id": turn_context.activity.conversation.id # 直接用当前会话ID,不用手动输入 }, "recipient": turn_context.activity.recipient # 确保接收方信息正确 }检查技能和Copilot的事件路由权限
- 先去Azure Bot Service的技能配置里,确认
initiateHandoff这个事件名称已经被加入到技能和Copilot之间的允许传递列表中。如果没加,Copilot会自动过滤掉这个事件,而且不会有错误日志。 - 另外,在Omnichannel的渠道集成设置里,找一找有没有“允许事件活动传递”的开关,有些版本默认是关闭的,只放行普通消息,得手动打开。
- 先去Azure Bot Service的技能配置里,确认
ACS渠道会话的特殊处理
因为Omnichannel和SMS用的是ACS格式的会话ID,和DirectLine的格式差异很大,所以事件活动里必须额外带上channelData字段,把ACS的会话元数据传进去,Copilot才能正确识别会话来源。可以在事件里加上这段:transfer_event_activity["channelData"] = { "acsConversationId": turn_context.activity.conversation.id, "channelType": "chat" # SMS渠道换成"sms" }确认Copilot主题的触发逻辑
别忽略了最基础的检查:你的Copilot主题是不是真的监听了initiateHandoff事件?有些时候开发者会不小心把触发条件设成“收到特定文本”,而不是“收到事件活动”,这样哪怕事件传过去了也不会触发主题。去Copilot的主题编辑器里,把触发条件改成“当收到事件活动时”,然后指定事件名称为initiateHandoff。开详细日志找线索
虽然你说没看到错误日志,但可以开启Azure Bot Service的详细诊断日志,重点看“通道日志”和“技能调用日志”。另外在Omnichannel的运营模块里,打开对应的会话详情,里面会记录所有进出的活动,包括被过滤掉的事件,说不定能找到事件丢失的原因。
备注:内容来源于stack exchange,提问作者Optimus

