botframework - 如何在 bot 框架中重新启动一系列对话框?
问题描述
我正在开发一个简单的机器人游戏。它有一个根对话框,它可以带你到另外两个对话框——一个开始对话框和一个加入对话框。
加入对话框可以导致玩游戏对话框,当游戏结束时,它会引导您进入分数对话框。感觉像很多机器人(原文如此),但运行平稳。得分完成后,我想回到根对话框进行另一轮。
但我被困住了。
即使我同时发出了一个 EndDialog() 活动和一个仅调用 DialogContext.CancelAllDialogs() 的 CodeAction() 活动,我仍然在看起来像 EndDialog 的范围内,因此我不会回到 Root。因此,我无法重新开始游戏。有什么我想念的吗?我正在使用自适应对话框以及自适应卡和英雄卡。不过,我认为这些卡片并不重要。
解决方案
所以,这就是我最终得到我想要的东西。这可能不是最好的方法,但它有效:
我创建了一个 CodeAction 对话框,当我想要触发一轮重启的消息进入时运行该对话框 - 有一个与之相关的特定意图。CodeAction 调用此方法:
private async Task<DialogTurnResult> CancelAndReturnToRoot(DialogContext dc, object options)
{
var lastDialog = dc;
var secondToLastDialog = lastDialog;
var journeysUp = 1;
while (lastDialog != null)
{
lastDialog = lastDialog.Parent;
if (lastDialog != null)
secondToLastDialog = lastDialog;
journeysUp++;
}
return await secondToLastDialog.CancelAllDialogsAsync();
}
这似乎释放了我创建的对话框,让我回到开始的对话框。
推荐阅读
- python - 如何使用{{花括号}}在Python模板中以秒为单位显示总运行时间?
- python - 如何使 XGBoost 与 reg:squaredlogerror 一起工作?
- python - 在没有 GUI 的 Ubuntu 服务器上使用 Selenium 和 Chrome 驱动程序
- javascript - jQuery 是否在输出数据之前对其进行解析?
- jsonschema - JSON Schema 是否有类似开关的结构?
- google-apps-script - 如何使用 Google Apps 脚本将本地(桌面)中的图像插入 google 电子表格单元格
- nestjs - 配置 TypeORM 默认外键以遵循下划线格式而不是 camelCase
- c# - 获取发送文件请求时远程主机强制关闭现有连接
- r - rowSums(out_pathway) 中的错误:“x”必须是至少二维的数组
- javascript - Typo 不想在 ios 和 android 项目上链接