Запуск настраиваемого события в превентивном сообщении Bot Framework - PullRequest
0 голосов
/ 21 июня 2020

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

...