Bot Composer中Cancel All active dialog后无法启动新Dialog解决方法
Bot Composer执行Cancel All active dialog后无法启动新对话框解决方案
问题场景
使用Bot Composer开发机器人时,在特定业务节点执行Cancel All active dialog操作取消所有活动对话框后,后续配置的Begin new Dialog动作无法正常触发,相关操作配置截图如下:
根因说明
Cancel All active dialog动作会清空当前对话栈内的全部对话框实例,包括承载该Cancel动作本身的对话框上下文,同节点后续绑定的Begin new Dialog会因为所属执行上下文被销毁、动作执行流被强制中断,无法正常运行。
可落地解决方法
- 调整动作挂载位置:将
Cancel All active dialog和后续启动新对话框的逻辑,统一挂载到根对话的全局事件/动作触发节点下,不要放在子对话框的业务流程节点中,避免Cancel动作清空自身所在的执行上下文。 - 解耦两个动作的执行链路:不要在Cancel动作所在节点直接串联
Begin new Dialog,在Cancel动作执行完成后触发一个自定义事件,在自定义事件的响应逻辑中配置新对话框启动动作,通过事件触发绕开同节点动作被强制中断的问题。 - 校验新对话框启动参数:如果要启动的对话框是此前被取消的业务对话框,不要复用旧的对话框实例ID,
Begin new Dialog时传入全新的实例参数,避免因旧实例已被标记销毁导致启动失败。 - 代码动作兜底:如果可视化配置调整后仍存在时序问题,可替换原生Cancel动作为自定义代码动作,在同一段代码逻辑中顺序执行清空对话栈、启动新对话框操作,参考代码如下:
// 放置于Bot Composer的代码动作节点中执行 await dc.cancelAllDialogs(); return await dc.beginDialog('替换为你要启动的目标对话框ID');
内容的提问来源于stack exchange,提问作者Sara Shreim
相关产品推荐
相关产品推荐

