2016-09-21 3 views
2

Я начал интегрировать Luis в мой BOT, запрос LUIS отлично работает в браузере, но кажется, что при вызове через код что-то возвращается из LUIS GetResult, выдает ошибку.Luis integration throws error

Запрос ЛУИС является here

Исходный код диалога:

[LuisModel("2d3e39d8-632a-4e00-bf2f-d98ea4b2ed79&", "subscription Key")] 
    [Serializable] 
    public class SupportDialog : LuisDialog<object> 
    { 

     [LuisIntent("")] 
     public async Task None(IDialogContext context, LuisResult result) 
     { 
      await context.PostAsync("Sorry, I dont understand what you need"); 
      context.Wait(MessageReceived); 
     } 


     [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.Resolution.FirstOrDefault().Value ?? null; 
       if(!string.IsNullOrEmpty(resolutionStr)) 
       { 
        returnMsg = "Your order " + resolutionStr + " status is " + orderStatus + " and expected to deliver by " + deliveryDate.Humanize(); 
       } 
      } 

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

    } 

MessageController Исходный код:

internal static IDialog<object> MakeRoot() 
     { 
      return Chain.From(() => new SupportDialog()); 
     } 

     [ResponseType(typeof(void))] 
     public virtual async Task<HttpResponseMessage> Post([FromBody] Activity activity) 
     { 
      if (activity != null) 
      { 
       // one of these will have an interface and process it 
       switch (activity.GetActivityType()) 
       { 
        case ActivityTypes.Message: 
         await Conversation.SendAsync(activity, MakeRoot); 
         break; 

        case ActivityTypes.ConversationUpdate: 
        case ActivityTypes.ContactRelationUpdate: 
        case ActivityTypes.Typing: 
        case ActivityTypes.DeleteUserData: 
        default: 
         Trace.TraceError($"Unknown activity type ignored: {activity.GetActivityType()}"); 
         break; 
       } 
      } 
      return new HttpResponseMessage(System.Net.HttpStatusCode.Accepted); 
     } 

Я получаю следующее сообщение об ошибке (частичное извлечение только) в моем СЭП Эмулятор при попытке отладки:

> Exception: System.Net.Http.HttpRequestException: Response status code 
> does not indicate success: 400 (Bad Request).\r\n at 
> System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task 
> task)\r\n at 
> System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task 
> task)\r\n at 
> System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()\r\n at 
> Microsoft.Bot.Builder.Luis.LuisService.<Microsoft-Bot-Builder-Luis-ILuisService-QueryAsync>d__4.MoveNext()\r\n--- 
> End of stack trace from previous location where exception was thrown 
> ---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task 
> task)\r\n at 
> System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task 
> task)\r\n at 
> System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()\r\n at 
> Microsoft.Bot.Builder.Luis.Extensions.<QueryAsync>d__3.MoveNext()\r\n--- 
> End of stack trace from previous location where exception was thrown 
> ---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task 
> task)\r\n at 
> System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task 
> task)\r\n at 
> System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()\r\n at 
> Microsoft.Bot.Builder.Dialogs.LuisDialog`1.<MessageReceived>d__7.MoveNext()\r\n--- 
> End of stack trace from previous location where exception was thrown 
> ---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task 
> task)\r\n at 
> System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task 
> task)\r\n at 
> System.Runtime.CompilerServices.TaskAwaiter.GetResult()\r\n at 
> Microsoft.Bot.Builder.Dialogs.Internals.DialogTask.ThunkResume`1.<Rest>d__4.MoveNext()\r\n--- 
> End of stack trace from previous location where exception was thrown 
> ---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task 
> task)\r\n at 
> System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task 
> task)\r\n at 
> System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()\r\n at 
> Microsoft.Bot.Builder.Internals.Fibers.Wait`2.<Microsoft-Bot-Builder-Internals-Fibers-IWait<C>-PollAsync>d__19.MoveNext()\r\n--- 
> End of stack trace from previous location where exception was thrown 
> ---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task 
> task)\r\n at 
> System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task 
> task)\r\n at 
> System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()\r\n at 
> Microsoft.Bot.Builder.Internals.Fibers.Frame`1.<Microsoft-Bot-Builder-Internals-Fibers-IFrameLoop<C>-PollAsync>d__7.MoveNext()\r\n--- 
> End of stack trace from previous location where exception was thrown 
> ---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task 
> task)\r\n at 
> System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task 
> task)\r\n at 
> System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()\r\n at 
> Microsoft.Bot.Builder.Internals.Fibers.Fiber`1.<Microsoft-Bot-Builder-Internals-Fibers-IFiberLoop<C>-PollAsync>d__13.MoveNext()\r\n--- 
> End of stack trace from previous location where exception was thrown 
> ---\r\n at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n 
> at 
> Microsoft.Bot.Builder.Internals.Fibers.Wait`2.Microsoft.Bot.Builder.Internals.Fibers.IAwaiter<T>.GetResult()\r\n 
> at 
> Microsoft.Bot.Builder.Dialogs.Chain.FromDialog`1.<ResumeAsync>d__3.MoveNext()\r\n--- 
> End of stack trace from previous location where exception was thrown 
> ---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task 
> task)\r\n at 
> System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task 
> task)\r\n at 
> System.Runtime.CompilerServices.TaskAwaiter.GetResult()\r\n at 
> Microsoft.Bot.Builder.Dialogs.Internals.DialogTask.ThunkResume`1.<Rest>d__4.MoveNext()\r\n--- 
> End of stack trace from previous location where exception was thrown 
> ---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task 
> task)\r\n at 
> System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task 
> task)\r\n at 
> System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()\r\n at 
> Microsoft.Bot.Builder.Internals.Fibers.Wait`2.<Microsoft-Bot-Builder-Internals-Fibers-IWait<C>-PollAsync>d__19.MoveNext()\r\n--- 
> End of stack trace from previous location where exception was thrown 
> ---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task 
> task)\r\n at 
> System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task 
> task)\r\n at 
> System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()\r\n at 
> Microsoft.Bot.Builder.Internals.Fibers.Frame`1.<Microsoft-Bot-Builder-Internals-Fibers-IFrameLoop<C>-PollAsync>d__7.MoveNext()\r\n--- 
> End of stack trace from previous location where exception was thrown 
> ---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task 
> task)\r\n at 
> System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task 
> task)\r\n at 
> System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()\r\n at 
> Microsoft.Bot.Builder.Internals.Fibers.Fiber`1.<Microsoft-Bot-Builder-Internals-Fibers-IFiberLoop<C>-PollAsync>d__13.MoveNext()\r\n--- 
> End of stack trace from previous location where exception was thrown 
> ---\r\n at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n 
> at 
> Microsoft.Bot.Builder.Internals.Fibers.Wait`2.Microsoft.Bot.Builder.Internals.Fibers.IAwaiter<T>.GetResult()\r\n 
> at 
> Microsoft.Bot.Builder.Dialogs.Chain.LoopDialog`1.<ResumeAsync>d__3.MoveNext()\r\n--- 
> End of stack trace from previous location where exception was thrown 
> ---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task 
> task)\r\n at 
> System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task 
> task)\r\n at 
> System.Runtime.CompilerServices.TaskAwaiter.GetResult()\r\n at 
> Microsoft.Bot.Builder.Dialogs.Internals.DialogTask.ThunkResume`1.<Rest>d__4.MoveNext()\r\n--- 
> End of stack trace from previous location where exception was thrown 
> ---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task 
> task)\r\n at 
> System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task 
> task)\r\n at 
> System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()\r\n at 
> Microsoft.Bot.Builder.Internals.Fibers.Wait`2.<Microsoft-Bot-Builder-Internals-Fibers-IWait<C>-PollAsync>d__19.MoveNext()\r\n--- 
> End of stack trace from previous location where exception was thrown 
> ---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task 
> task)\r\n at 
> System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task 
> task)\r\n at 
> System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()\r\n at 
> Microsoft.Bot.Builder.Internals.Fibers.Frame`1.<Microsoft-Bot-Builder-Internals-Fibers-IFrameLoop<C>-PollAsync>d__7.MoveNext()\r\n--- 
> End of stack trace from previous location where exception was thrown 
> ---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task 
> task)\r\n at 
> System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task 
> task)\r\n at 
> System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()\r\n at 
> Microsoft.Bot.Builder.Internals.Fibers.Fiber`1.<Microsoft-Bot-Builder-Internals-Fibers-IFiberLoop<C>-PollAsync>d__13.MoveNext()\r\n--- 
> End of stack trace from previous location where exception was thrown 
> ---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task 
> task)\r\n at 
> System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task 
> task)\r\n at 
> System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()\r\n at 
> Microsoft.Bot.Builder.Dialogs.Internals.DialogTask.<Microsoft-Bot-Builder-Dialogs-Internals-IDialogStack-PollAsync>d__19.MoveNext()\r\n--- 
> End of stack trace from previous location where exception was thrown 
> ---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task 
> task)\r\n at 
> System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task 
> task)\r\n at 
> System.Runtime.CompilerServices.TaskAwaiter.GetResult()\r\n at 
> Microsoft.Bot.Builder.Dialogs.Internals.DialogTask.<Microsoft-Bot-Builder-Dialogs-Internals-IPostToBot-PostAsync>d__21`1.MoveNext()\r\n--- 
> End of stack trace from previous location where exception was thrown 
> ---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task 
> task)\r\n at 
> System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task 
> task)\r\n at 
> System.Runtime.CompilerServices.TaskAwaiter.GetResult()\r\n at 
> Microsoft.Bot.Builder.Dialogs.Internals.ReactiveDialogTask.<Microsoft-Bot-Builder-Dialogs-Internals-IPostToBot-PostAsync>d__5`1.MoveNext()\r\n--- 
> End of stack trace from previous location where exception was thrown 
> ---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task 
> task)\r\n at 
> System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task 
> task)\r\n at 
> System.Runtime.CompilerServices.TaskAwaiter.GetResult()\r\n at 
> Microsoft.Bot.Builder.Dialogs.Internals.ExceptionTranslationDialogTask.<Microsoft-Bot-Builder-Dialogs-Internals-IPostToBot-PostAsync>d__2`1.MoveNext()\r\n--- 
> End of stack trace from previous location where exception was thrown 
> ---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task 
> task)\r\n at 
> System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task 
> task)\r\n at 
> System.Runtime.CompilerServices.TaskAwaiter.GetResult()\r\n at 
> Microsoft.Bot.Builder.Dialogs.Internals.LocalizedDialogTask.<Microsoft-Bot-Builder-Dialogs-Internals-IPostToBot-PostAsync>d__2`1.MoveNext()\r\n--- 
> End of stack trace from previous location where exception was thrown 
> ---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task 
> task)\r\n at 
> System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task 
> task)\r\n at 
> System.Runtime.CompilerServices.TaskAwaiter.GetResult()\r\n at 
> Microsoft.Bot.Builder.Dialogs.Internals.ScoringDialogTask`1.<Microsoft-Bot-Builder-Dialogs-Internals-IPostToBot-PostAsync>d__6`1.MoveNext()\r\n--- 
> End of stack trace from previous location where exception was thrown 
> ---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task 
> task)\r\n at 
> System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task 
> task)\r\n at 
> System.Runtime.CompilerServices.TaskAwaiter.GetResult()\r\n at 
> Microsoft.Bot.Builder.Dialogs.Internals.PersistentDialogTask.<Microsoft-Bot-Builder-Dialogs-Internals-IPostToBot-PostAsync>d__6`1.MoveNext()\r\n--- 
> End of stack trace from previous location where exception was thrown 
> ---\r\n at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n 
> at 
> Microsoft.Bot.Builder.Dialogs.Internals.PersistentDialogTask.<Microsoft-Bot-Builder-Dialogs-Internals-IPostToBot-PostAsync>d__6`1.MoveNext()\r\n--- 
> End of stack trace from previous location where exception was thrown 
> ---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task 
> task)\r\n at 
> System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task 
> task)\r\n at 
> System.Runtime.CompilerServices.TaskAwaiter.GetResult()\r\n at 
> Microsoft.Bot.Builder.Dialogs.Internals.SerializingDialogTask.<Microsoft-Bot-Builder-Dialogs-Internals-IPostToBot-PostAsync>d__4`1.MoveNext()\r\n--- 
> End of stack trace from previous location where exception was thrown 
> ---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task 
> task)\r\n at 
> System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task 
> task)\r\n at 
> System.Runtime.CompilerServices.TaskAwaiter.GetResult()\r\n at 
> Microsoft.Bot.Builder.Dialogs.Internals.PostUnhandledExceptionToUserTask.<Microsoft-Bot-Builder-Dialogs-Internals-IPostToBot-PostAsync>d__5`1.MoveNext() 

ответ

5

Удалить знак амперсанд в вашем LuisModel.

Я думаю, вы скопировали это из URL случайно.

Также измените свой ключ подписки, который вы разместили внутри своего кода, иначе мы его украдем.

+0

Извините, но какой знак амперсанда вы имеете в виду, но мне не нужно ссылаться на прямой URL-адрес модели LUIS в любом месте моего кода , правильно? – Vikram

+0

Это бесплатная пробная подписка, поэтому она не будет длиться очень долго;) – Vikram

+0

Я имею в виду знак «&» в вашем атрибуте luismodel. Попробуйте удалить это, это опечатка. – K48

2

Существует одна строка кода, которая может бросить нулевой ссылочный исключение:

var resolutionStr = orderEntity.Resolution.FirstOrDefault().Value ?? null; 

Попытка переписать его в следующий способ:

var resolutionStr = orderEntity.Resolution.FirstOrDefault()?.Value; 
+0

проблема в том, что когда я пытаюсь ее отладить, она даже не входит внутрь функции. Я только что попробовал комментировать всю часть, за исключением сообщения с жестко запрограммированным возвратом, и даже тогда он выдает ту же ошибку. Это, по-видимому, вызвано самим атрибутом Luis Intent :-( – Vikram

+0

, пожалуйста, также прикрепите код от вашего контроллера API –

3

Эта ошибка может также возникнуть; когда вы публикуете LUIS приложение под Балетмейстер Slot

Response status code does not indicate success: 400 (Bad Request) 

Так всегда опубликовать ваше приложение ЛУИС под слот производства

И, очевидно, вы должны удалить амперсанд (&) из вашего идентификатора LuisModel.

+1

Я согласен с использованием слота Production vs. Staging slot - и я бы добавил - убедитесь, что Luis app train & publish завершен - ключ Endpoint и Application Id доступный еще до того, как это произойдет –