Вы пытались просто удалить return
? Он должен работать. Ниже приведен пример одного из моих ботов, отлично работает. Вам также не нужно использовать {} в кейсе, хотя я не уверен, что это вызывает вашу проблему.
Я также заметил, что вы не создаете отдельный контекст диалога. Честно говоря, я не знаю, требуется ли это, я взял это из примера. Поэтому, когда я передаю контекст в dispatchToTopIntentAsync, я создаю контекст диалога через const dc = await this.dialogs.createContext(context);
, прежде чем попасть в оператор case. Но я также использую старую версию шаблона Dispatch Bot. Независимо от того, я начинаю диалог следующим образом должен быть одинаковым в любом случае.
switch (intent) {
case VIEW_ORDER_INTENT:
await dc.beginDialog(VIEW_ORDER_DIALOG,recognizerResult);
break;
default:
var processResult = await this.qnaDialog.processAsync(userDialog.qnaState,
context.activity);
userDialog.qnaState = processResult[0];
await this.userDialogStateAccessor.set(context,userDialog);
var output = processResult[1];
var result = processResult[2];
await dc.context.sendActivity(output);
break;
}
Еще одно замечание: похоже, вы определяете bookingDetails только в функции рассылки. Это не будет доступно вашему диалоговому окну, и объект не будет обновлен после его завершения. Вы можете передать объект как второй параметр в beginDialog, и у вас может быть диалог, возвращающий результат. Вы должны быть в состоянии сделать это через bookingDetails = await context.beginDialog(ConfirmAuto,bookingDetails);
. Обратите внимание, что вы ожидаете только «beginDialog», так что переменная будет в ожидании, пока диалог не завершится.