botFramework v4, как обработать ответ диалога после вызова LUIS - PullRequest
0 голосов
/ 21 февраля 2019

У меня есть бот, написанный на C #, который использует LUIS для определения намерений.У меня есть метод, который выполняет вызов службы LUIS, а затем ищет намерение «Open_Case».Модель имеет определенный объект CaseNumber, который может или не может быть включен в ответ от службы LUIS.Если в ответе нет сущности с номером дела, я запускаю диалоговое окно, чтобы спросить у пользователя номер дела.Получив номер дела, я хочу вернуть карточку с информацией о деле.

Вот код, который у меня есть: -

/// <summary>
/// Dispatches the turn to the requested LUIS model.
/// </summary>
private async Task DispatchToLuisModelAsync(ITurnContext context, string appName, DialogContext dc, CancellationToken cancellationToken =
default (CancellationToken)) {
var result = await botServices.LuisServices[appName].RecognizeAsync(context, cancellationToken);
var intent = result.Intents ? .FirstOrDefault();

    string caseNumber = null;

    if (intent ? .Key == "Open_Case") {
    if (!result.Entities.ContainsKey("Case_CaseNumber")) {
    var dialogResult = await dc.BeginDialogAsync(CaseNumberDialogId, null, cancellationToken);
     } else {
      caseNumber = (string)((Newtonsoft.Json.Linq.JValue) result.Entities["Case_CaseNumber"].First).Value;
      var cardAttachment = botServices.CaseInfoServices.LookupCase(caseNumber);
      var reply = context.Activity.CreateReply();
      reply.Attachments = new List < Attachment > () {
       cardAttachment
      };
      await context.SendActivityAsync(reply, cancellationToken);
     }
    }
   }

То, с чем я борюсь, это то, куда отправляют кодответ карты должен сидеть.В коде, который у меня есть, я отправляю карту, если номер был возвращен в ответе LUIS, но если номера не было, и я запускаю диалоговое окно, то я получаю доступ только к номеру либо на последнем шаге диалога, либо врезультат диалога в обработчике корневого поворота.В настоящее время я продублировал ответ на последнем этапе диалога, но он кажется неправильным и не элегантным.Я уверен, что должен быть способ, которым я могу собрать номер из LUIS или диалогового окна, и ТОГДА отправить ответ из одного места вместо дублирования кода.

Любые предложения, с благодарностью полученные ...

1 Ответ

0 голосов
/ 22 февраля 2019

Я пришел к выводу, что мне нужно поместить код, который отображает карту, в метод класса бота, затем вызвать его из фрагмента кода else, а также из обработчика поворота, когда dialogTurnStatus равен Complete

...