我对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?
答案 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 } }
}