Как перезапустить серию диалогов в среде бота?

У меня есть простая игра-бот, которую я разрабатываю. У него есть корневой диалог, который может привести вас к двум другим - диалогу запуска и диалогу соединения.

Диалог присоединения может привести к диалогу "Играть в игру", который по окончании игры приведет вас к диалогу счета. По ощущениям настоящий бот (так в оригинале), но работает плавно. Когда подсчет очков завершен, я хотел бы вернуться к корневому диалогу для следующего раунда.

Но я застрял.

Несмотря на то, что я запускаю как действие EndDialog(), так и действие CodeAction(), которое просто вызывает DialogContext.CancelAllDialogs(), я остаюсь внутри того, что выглядит как EndDialog, и поэтому не возвращаюсь в Root. Таким образом, я не могу перезапустить игру. Что-то мне не хватает? Я использую как адаптивные диалоги, так и адаптивные карты и карты героев. Хотя не думаю, что карты должны иметь значение.

1 ответ

Итак, вот что я в итоге сделал, чтобы получить то, что хочу. Возможно, это не лучший способ, но он работает:

Я создал диалоговое окно 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();
}

Похоже, это освобождает созданные мной диалоги и позволяет мне вернуться к начальному диалогу.

Другие вопросы по тегам