Запуск настраиваемого события в превентивном сообщении Bot Framework

Я работаю с проактивными сообщениями в 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)выполняется как часть адаптивного диалога, все, что я вижу, это то, что EmitEventAsync не выдает ошибок. Я не уверен, как мне легко поставить точку останова, чтобы посмотреть, что происходит?

0 ответов

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