【问题标题】:Go dialogflow sdk WebhookResponse doesn't return the correct jsonGo dialogflow sdk WebhookResponse 不返回正确的 json
【发布时间】:2020-06-10 09:34:55
【问题描述】:

我正在尝试在 Go 中为 Dialogflow 编写一个 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(根据official documentation


  "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 不起作用,因为它有不应该存在的 Message 和带有大写首字母的 Card。我尝试发送文档的 json 并且它有效,Dialog Flow 正确响应。

我不明白如何使用官方 SDK 生成正确的 json。请考虑到我是使用 Go Lang 的新手。这是我的第一个项目。

这是我目前正在使用的文档: https://pkg.go.dev/google.golang.org/genproto/googleapis/cloud/dialogflow/v2?tab=doc#WebhookResponse 如您所见,FulfillmentMessagesIntent_Message

的数组
FulfillmentMessages []*Intent_Message

Intent_Message 必须包含 Message(here 文档)

提前感谢您的任何帮助和建议。

H2K

更新: 如果我使用 log.Println(response) 我可以在日志中看到正确的响应

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但结构正确,没有Message,没有Card...

所以问题是当我用 Gin 和命令返回它时:

c.JSON(200, response)

【问题讨论】:

    标签: json go sdk response dialogflow-es


    【解决方案1】:

    我找到了解决办法!

    我需要使用 jsonpb 封送器并将其作为字符串与 Gin 一起返回

    这里是一个例子:

    m := jsonpb.Marshaler{}
    result, _ := m.MarshalToString(response)
    c.String(200, result)
    

    我已经完全疯了,我希望它可以对其他人有所帮助。

    【讨论】:

      猜你喜欢
      • 2019-04-30
      • 1970-01-01
      • 2021-12-01
      • 2019-10-21
      • 2018-05-27
      • 2014-12-21
      • 2016-10-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多