2016-09-22 3 views
2

Построение простого обслуживания клиентов BOT, разработали модель LUIS, и она отлично работает, когда заказ №. предоставляется на первом этапе. например. Каков статус моего заказа ABC0898787? , где намерение обнаружено правильно, и ABC0898787 идентифицируется как объект.BOT задать вопрос на втором этапе

Однако необходимо адаптировать личинку иметь разговор следующим образом:

Пользователь: Что статус моего заказа

Bot: пожалуйста, не предоставить номер заказа

Пользователь: (Это ABC0986767) или (ABC0986767)

Бот должен иметь возможность сопоставлять номер сущности и обрабатывать запрос.

код для метода умывания, лучший способ интегрировать второй шаг, не создавая модель LUIS, чтобы принимать отдельные слова как сущность?

[LuisIntent("OrderStatus")] 
     public async Task OrderStatus(IDialogContext context, LuisResult result) 
     { 
      var returnMsg = "You wanted to check the order status"; 
      var orderStatus = "Dispatched"; 
      var deliveryDate = DateTime.Now.AddDays(3); 

      var entities = new List<EntityRecommendation>(result.Entities); 
      if(entities.Any((entity)=> entity.Type == "Order")) 
      { 
       var orderEntity = entities.Where((entity) => entity.Type == "Order").FirstOrDefault(); 
       var resolutionStr = orderEntity.Entity; 
       if(!string.IsNullOrEmpty(resolutionStr)) 
       { 
        returnMsg = "Your order " + resolutionStr + " is " + orderStatus + " and expected to arrive " + deliveryDate.Humanize(); 
       } 
      } 

      await context.PostAsync(returnMsg); 
      context.Wait(MessageReceived); 
     } 

ответ

1

Заменить MessageReceived с именем вашего метода, который будет вводиться пользователем. Перед этим проверьте, существует ли сущность. Если существует, то используйте MessageReceived, иначе этот метод.

псевдокод:

if (entity.exists) 
    OutputResult() 
    Context.Wait(MessageReceived) 
else //entitiy doesn't exist 
    SendMessage("Please enter order number") 
    Context.Wait(MyMethod) 

Метод называется MyMethod начинается так:

public async Task MyMethod(IDialogContext context, IAwaitable<IMessageActivity> argument) 
{ 
    var response = await argument; 
    string text = response.Text; 

Я думаю, Microsoft не сделать это достаточно ясно, что MessageReceived это просто имя метода (что вы не вижу), и его можно заменить на имя любого другого метода. Также может быть несколько методов context.Wait s в зависимости от условия, если код не достигает контекста.Wait() два раза, прежде чем пользователь отправит новое сообщение.

+0

Пробовал делать это, но если я использую IAwaitable аргумент, контекст.Wait выдает ошибку компиляции. Если я пользователь IAwaitable , он компилируется отлично. но окончательное поведение НЕ правильно. – Vikram

+0

в основном, BOT должен предложить пользователю предоставить заказ №. – Vikram

+0

в основном, бот должен запросить у пользователя ссылку no (которая сопоставляется с сущностью в моей модели LUIS), и она должна использовать этот единственный ввод слова с высказыванием раньше, и LUIS должен определить объект для него. Не уверен, если это объясняет это достаточно хорошо – Vikram