Как перезапустить серию диалогов в среде бота?
У меня есть простая игра-бот, которую я разрабатываю. У него есть корневой диалог, который может привести вас к двум другим - диалогу запуска и диалогу соединения.
Диалог присоединения может привести к диалогу "Играть в игру", который по окончании игры приведет вас к диалогу счета. По ощущениям настоящий бот (так в оригинале), но работает плавно. Когда подсчет очков завершен, я хотел бы вернуться к корневому диалогу для следующего раунда.
Но я застрял.
Несмотря на то, что я запускаю как действие 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();
}
Похоже, это освобождает созданные мной диалоги и позволяет мне вернуться к начальному диалогу.