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

Bot Framework Composer中如何终止被Allow Interruption打断的原有对话

Bot Framework Composer 中断场景下终止上级对话的正规实现方案

Composer的对话栈遵循后进先出规则,HelpDialog通过中断触发时,会被压在Dialog A的上层,默认HelpDialog结束弹出栈后自然回到下层的Dialog A,要避免恢复只需主动将Dialog A从对话栈中移除即可,官方原生支持两种正规实现方式:

1. 无代码内置动作实现(优先推荐)

直接使用Composer原生提供的Cancel all dialogs动作即可实现需求,配置步骤如下:

  • 定位到HelpDialog中需要终止Dialog A并跳转的逻辑节点
  • 添加取消所有对话(Cancel all dialogs)内置动作
  • 动作参数按需配置:
    • 取消范围选择父级及以上对话,即可精准移除被中断的Dialog A及更上层的其他父对话
    • 若需要保留HelpDialog的上下文数据,可勾选「保留当前对话」选项
  • 紧接该动作之后添加开始新对话动作,选择你需要触发的目标对话即可

该动作执行后Dialog A会被直接销毁,HelpDialog执行完后续逻辑后不会再触发Dialog A的恢复流程。

2. 自定义代码实现(适配复杂场景)

如果需要精准控制仅移除特定对话、不影响其他栈内容,可以通过操作对话上下文的栈结构实现:
在对应节点添加代码段动作,以C#运行时为例,代码示例如下:

// 循环移除Dialog A及上层非当前HelpDialog的所有对话
while (dc.ActiveDialog != null && dc.ActiveDialog.Id != "HelpDialog")
{
    await dc.CancelDialogAsync(cancellationToken);
}
// 移除完成后直接启动目标对话
await dc.BeginDialogAsync("你的目标对话ID", cancellationToken: cancellationToken);

JS运行时只需按对应语法调整API调用即可实现相同效果。

注意事项

不要仅使用End this dialog动作结束HelpDialog,该动作只会将HelpDialog自身弹出栈,下层的Dialog A依然存在,会自动触发恢复逻辑。

内容的提问来源于stack exchange,提问作者user16540151

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 01:45:03