我正在尝试在对话框流中编写webhook,我使用的是官方SDK的apiv2
google.golang.org/genproto/googleapis/cloud/dialogflow/v2但我无法使用官方sdk生成正确的响应。
我的意思是,在文档和WebhookResponse结构之后,我无法为响应生成预期的json。
这是我正在使用的代码:
response = dialogflow.WebhookResponse{
FulfillmentMessages: []*dialogflow.Intent_Message{
{
Message: &dialogflow.Intent_Message_Card_{
Card: &dialogflow.Intent_Message_Card{
Title: "Title",
Subtitle: "Subtitle",
ImageUri: "https://example.com/images/example.png",
Buttons: []*dialogflow.Intent_Message_Card_Button{
{
Text: "Button",
Postback: "https://example.com/path/for/end-user/to/follow",
},
},
},
},
},
},
}这是它生成的json:
{
"fulfillment_messages": [
{
"Message": {
"Card": {
"title": "Title",
"subtitle": "Subtitle",
"image_uri": "https://example.com/images/example.png",
"buttons": [
{
"text": "Button",
"postback": "https://example.com/path/for/end-user/to/follow"
}
]
}
}
}
]
}但这是我应该送回的json (根据正式文件)。
"fulfillmentMessages": [
{
"card": {
"title": "card title",
"subtitle": "card text",
"imageUri": "https://example.com/images/example.png",
"buttons": [
{
"text": "button text",
"postback": "https://example.com/path/for/end-user/to/follow"
}
]
}
}
]
}所以我的json不起作用,因为它有不应该出现的信息,还有带有大写字母的卡片。我试着发送文档的json,它工作正常,对话框流的响应是正确的。
我不明白如何使用官方SDK生成正确的json。请考虑一下,我是刚开始使用高朗的。这是我的第一个项目。
这是我目前正在使用的文档:如您所见,FulfillmentMessages是一个Intent_Message数组。
FulfillmentMessages []*Intent_MessageIntent_Message必须包含消息(这里,文档)
提前感谢您的帮助和建议。
H2K
更新:如果我使用log.Println(响应),我可以在日志中看到正确的响应
fulfillment_messages:{card:{title:"Title" subtitle:"Subtitle" image_uri:"https://example.com/images/example.png" buttons:{text:"Button" postback:"https://example.com/path/for/end-user/to/follow"}}}它不是JSON,但是结构是正确的,没有消息,没有卡片.
所以问题是当我用Gin和命令返回它时:
c.JSON(200, response)发布于 2020-06-10 11:55:07
我找到解决办法了!
我需要使用jsonpb封送处理程序,并将它作为字符串返回给Gin。
这里有一个例子:
m := jsonpb.Marshaler{}
result, _ := m.MarshalToString(response)
c.String(200, result)我完全疯了,我希望它能对别人有所帮助。
https://stackoverflow.com/questions/62300331
复制相似问题