Google.Cloud.Dialogflow.V2 WebhookResponse无法关闭对话

时间:2018-09-10 16:04:07

标签: c# dialogflow

我对Google Api和Dialogflow非常陌生,因此我首先使用其网站上的node.js和代码实验室进行演练。

现在是时候删除训练轮了,所以我想使用C#Azure托管的webhook解决方案,它适合我的公司体系结构,并且我们是.Net专注的开发人员。

我开始使用Google.Cloud.Dialogflow.V2项目,该项目使我能够快速获取请求对象并创建响应,但是我发现的文档很少,并且无法获得正确的响应以使用ExpectUserResponse结束对话标签。

这里是我所拥有的,它可以正确返回文本,但对话仍保持打开状态

response = new WebhookResponse
{
    FulfillmentText = $"Your magic number is {magicNumber}.",
    Payload = new Struct
    {
        Fields = {
                    {"expectUserResponse", new Value()
                        {
                           BoolValue = false
                        }
                    }
                }
    }
};

写的jSon是

{
  "fulfillmentText": "Your magic number is 6.",
  "payload": {
    "expectUserResponse": false
  }
}

如果我手动将return json更改为此,它将起作用。

{
  "fulfillmentText": "Your magic number is 6.",
  "payload": {
    "google": {
      "expectUserResponse": false
    }
  }
}

所以问题是我如何使用Google.Cloud.Dialogflow.V2获得正确的返回json?

1 个答案:

答案 0 :(得分:1)

听起来好像您希望payload是一个包含google字段的映射,该字段本身就是一个结构。

这是一个完整的示例,它演示了Value中的工厂方法如何使其更易于使用:

using System;
using Google.Cloud.Dialogflow.V2;
using Google.Protobuf.WellKnownTypes;

class Program
{
    static void Main(string[] args)
    {
        var googlePayload = new Struct
        {
            Fields = { { "expectUserPayload", Value.ForBool(false) } }
        };
        var response = new WebhookResponse
        {
            FulfillmentText = $"Your magic number is 100.",
            Payload = new Struct
            {
                Fields = { { "google", Value.ForStruct(googlePayload) } }
            }
        };

        Console.WriteLine(response);
    }
}

输出(重新格式化):

{
  "fulfillmentText": "Your magic number is 100.",
  "payload": { "google": { "expectUserPayload": false } }
}