猿问

如何从 Messenger Location 快速回复中接收位置

我有这段代码可以提示用户输入他们的位置。我正在使用 Botframework v4 和 C#。我将信使快速回复放在附件提示中。


  if (response == "test location")

        {

            Activity reply = stepContext.Context.Activity.CreateReply();


            reply.ChannelData = JObject.FromObject(

            new

            {

                text = "loc",

                quick_replies = new object[]

                {

                    new

                    {

                        content_type = "location",

                    },

                },

            });


            return await stepContext.PromptAsync(

               ATTACHPROMPT,

               new PromptOptions

               {

                   Prompt = reply,

               });

        }

但是在用户发送它的位置之后。机器人崩溃。我如何处理位置的返回,这样机器人就不会崩溃?这是例外


System.ArgumentNullException:值不能为空。参数名称:Microsoft.Bot.Builder.AI.Luis.LuisRecognizer.d*23.MoveNext() 处的话语---从先前引发异常的位置结束堆栈跟踪---在 System.Runtime.ExceptionServices.ExceptionDispatchInfo。在 Microsoft.Bot.Builder.AI.Luis.LuisRecognizer.d*10.MoveNext( ) --- 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 在 System.Runtime.CompilerServices 的 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 处的堆栈跟踪从引发异常的先前位置结束.TaskAwaiter。


蓝山帝景
浏览 66回答 1
1回答

qq_遁去的一_1

当用户在 Facebook Messenger 中单击位置快速回复时,传入的活动没有文本属性,这会在调用 LUIS 时导致“值不能为空”错误。这是目前 BotFramework 中的一个已知问题,开发团队目前正在努力解决此问题。同时,在调用 LUIS 识别器之前检查以确保传入活动的文本属性不为空或为空。if(!string.IsNullOrEmpty(turnContext.Activity.Text)) {  var luisResults = await _services.LuisServices[LuisConfiguration].RecognizeAsync(dc.Context, cancellationToken);} 希望这可以帮助!
随时随地看视频慕课网APP
我要回答