Я работаю с проактивными сообщениями в Bot Framework, где я хотел бы прервать диалог до тех пор, пока не будет ответа от проактивного сообщения, чтобы только затем продолжить диалог. Я не мог найти способ остановить и возобновить текущий диалог, пока не было получено проактивное сообщение (дайте мне знать, если оно есть!), Однако я обнаружил, что должен быть способ вызвать событие, которое в основном было бы частью 2 диалогового окна.
Я пытаюсь вызвать пользовательское событие Bot Framework из кода, как часть обратного вызова проактивного сообщения бота. Поскольку я использую адаптивные диалоги, ниже приведен код, который я придумал для вызова настраиваемого события:
private async Task BotCallback(ITurnContext turnContext, CancellationToken cancellationToken)
{
var conversationStateAccessors = conversationState.CreateProperty<DialogState>(nameof(DialogState));
var dialogSet = new DialogSet(conversationStateAccessors);
var rootFile = resourceExplorer.GetResource(rootDialogFile);
var rootDialog = resourceExplorer.LoadType<AdaptiveDialog>(rootFile);
dialogSet.Add(rootDialog);
var dialogContext = await dialogSet.CreateContextAsync(turnContext, cancellationToken);
await dialogContext.EmitEventAsync("CustomApproveIntent", rootDialog);
}
В диалоговом файле у меня зарегистрировано настраиваемое событие как таковое:
{
"$kind": "Microsoft.OnDialogEvent",
"$designer": {
"id": "5yPZZ2",
"name": "CustomApproveIntent"
},
"event": "CustomApproveIntent",
"actions": [
{
"$kind": "Microsoft.SendActivity",
"$designer": {
"id": "jQTi2S"
},
"activity": "${SendActivity_jQTi2S()}"
}
]
}
При запуске кода и вызове упреждающего сообщения я действительно замечаю из журналов окна вывода, что мое настраиваемое событие запускается, как я ожидал:
Information: 0 : 4: 'event' ==> CustomApproveIntent ==> OnDialogEvent(CustomApproveIntent)
Information: 0 : Executing Dialog: echobot-final.dialog Rule[3]: OnDialogEvent: ((turn.dialogEvent.name == 'CustomApproveIntent') && True)
Настраиваемое событие имеет только одно действие , то есть отправить ответ бота. Однако я не получаю ответ бота в эмуляторе, хотя похоже, что пользовательское событие было инициировано.
Однако когда я запускаю пользовательское событие как часть адаптивного диалога, вместо кода Ответ бота отображается в эмуляторе правильно, поэтому это должно быть проблема с моим кодом, вызывающим настраиваемое событие. Ниже приведен рабочий вызов настраиваемого события из диалогового окна, который доказывает, что настраиваемое событие функционирует само по себе:
{
"$kind": "Microsoft.EmitEvent",
"$designer": {
"id": "n5vhkg"
},
"eventName": "CustomApproveIntent"
}
Любые идеи о том, почему ответ бота, который запускается в моем настраиваемом событии, не отображается, когда запускается с помощью кода, или как я могу это отладить? Поскольку OnDialogEvent(CustomApproveIntent)
работает как часть адаптивного диалога, все, что я вижу, это то, что EmitEventAsyn c не выдает ошибок. Не знаю, как мне легко поставить точку останова и посмотреть, что происходит?