首页 > 解决方案 > 如何在 bot 框架中重新启动一系列对话框?

问题描述

我正在开发一个简单的机器人游戏。它有一个根对话框,它可以带你到另外两个对话框——一个开始对话框和一个加入对话框。

加入对话框可以导致玩游戏对话框,当游戏结束时,它会引导您进入分数对话框。感觉像很多机器人(原文如此),但运行平稳。得分完成后,我想回到根对话框进行另一轮。

但我被困住了。

即使我同时发出了一个 EndDialog() 活动和一个仅调用 DialogContext.CancelAllDialogs() 的 CodeAction() 活动,我仍然在看起来像 EndDialog 的范围内,因此我不会回到 Root。因此,我无法重新开始游戏。有什么我想念的吗?我正在使用自适应对话框以及自适应卡和英雄卡。不过,我认为这些卡片并不重要。

标签: botframeworkadaptive-dialogs

解决方案


所以,这就是我最终得到我想要的东西。这可能不是最好的方法,但它有效:

我创建了一个 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();
}

这似乎释放了我创建的对话框,让我回到开始的对话框。


推荐阅读