【问题标题】:dialogflow simple fulfillment webhook in c# not workingc# 中的 dialogflow 简单实现 webhook 不起作用
【发布时间】:2018-06-14 11:19:18
【问题描述】:

我对 dialogflow 和 WebAPI 非常陌生,并且在使用 C# 编写并托管在 Azure 上的简单 dialogflow 实现 webhook 时遇到了麻烦。我正在使用 dialogflow V2.0 API 版本。

目前我的履行工作并返回一个简单的响应,但不考虑意图和参数。我现在正在尝试解析 JSON 获取意图做一个简单的选择案例并返回接收到的参数的值。这给我带来了很多麻烦。下面给出了 webhook 链接、我的代码和“catch”块中返回的错误消息

    public JsonResult Post(string value)
    {
        try
        {
            dynamic obj = JsonConvert.DeserializeObject(value);
            string Location = string.Empty;

            switch (obj.intent.displayName)
            {
                case "getstock":
                    Location = obj.outContexts[0].parameters[0].Location;
                    break;
            }

            WebhookResponse r = new WebhookResponse();
            r.fulfillmentText = string.Format("The stock at {0} is valuing Rs. 31 Lakhs \n And consists of items such as slatwall, grid and new pillar. The detailed list of the same has been email to you", Location);

            r.source = "API.AI";


            Response.ContentType = "application/json";
            return Json(r);
        } catch(Exception e)
        {
            WebhookResponse err = new WebhookResponse();
            err.fulfillmentText = e.Message;
            return Json(err);
        }
    }

错误信息:

Value cannot be null.
 Parameter name: value

上面的函数是通过POST调用的,你可以使用POSTMAN,你会得到JSON响应。

此外,我正在使用带有控制器的 Visual Studio 2017 的 ASP.Net Web Api

【问题讨论】:

  • 这个函数是怎么调用的?看起来它被 value 的 null 调用了。我们需要查看更多信息以帮助了解正在发生的事情。
  • 它被对话流调用,我无法控制它
  • 您能否更新您的问题以提供有关如何将您提供给 dialogflow 的 URL 路由到 Azure 和您正在使用的 C# 框架中的特定函数的信息?
  • post 函数有一个 http post 属性,所以它是用 post 调用的,我也确信 post 正在工作,因为 web 钩子在 catch 块中返回响应
  • 如果您有解决方案,可以分享答案吗?

标签: c# webhooks actions-on-google dialogflow-es google-home


【解决方案1】:

首先安装 nuget 包 Google.Apis.Dialogflow.v2 及其依赖项。稍后它将为您节省大量工作,因为它具有对话流响应/请求 c# 对象,这将使导航对象图更加容易。

第二次为包添加使用using Google.Apis.Dialogflow.v2.Data;

将您的方法更改为类似

 public GoogleCloudDialogflowV2WebhookResponse Post(GoogleCloudDialogflowV2WebhookRequest obj)
    {
            string Location = string.Empty;

            switch (obj.QueryResult.Intent.DisplayName)
            {
                case "getstock":
                Location = obj.QueryResult.Parameters["Location"].ToString();
                break;
            }

            var response = new GoogleCloudDialogflowV2WebhookResponse()
            {
                FulfillmentText = $"The stock at {Location} is valuing Rs. 31 Lakhs \n And consists of items such as slatwall, grid and new pillar. The detailed list of the same has been email to you",
                Source = "API.AI"
            };

            return response;
    }

我认为您代码中的主要问题是“obj.outContexts[0]”outContexts 不是您可以找到参数的地方,除非您设置了输出内容,否则它将为空。您需要在 queryResult 中查找您的参数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-21
    • 1970-01-01
    • 1970-01-01
    • 2018-08-05
    相关资源
    最近更新 更多