首页 > 解决方案 > java - 如何在java中正确解析来自对话框流的完整响应?

问题描述

正如您在 Dialogflow 中所知道的,当我们使用履行时,单个响应中可以有多种类型的响应,例如基本卡片、建议、简单响应、链接建议等。如何正确解析此响应以便我们可以拥有一个明确的 Object/JSONObject 区分以后使用的每种类型的响应。我在想有什么办法可以把它解析成这样

{
  simpleRespond:[{text:"Hello},{text:hi}],
  basicCard:[{title:"MyCard",subTitle:"When I was in school",image:{text:"hi",URL:"photo.jpg"}}],
  suggestion:[{text:"banana"},{text:"Apple"}]
  and other response
}

谢谢

标签: javagoogle-cloud-platformdialogflow-esdialogflow-es-fulfillment

解决方案


要知道如何正确填充webhook 响应,包含多个消息和不同类型,我认为您可以专注于该fulfillment_messages[] 字段

请注意,我使用的是 WebhookResponse V2 RPC参考

可以看到该fulfillment_messages[]字段可以包含一个Message 对象列表,其结构如下:

{
  "text": {
    "text": [
      "Text response from webhook"
    ]
  }
}

其中text对象是丰富的响应消息,并且只能是引用中指定的一个。

基于此,您可以fulfillment_messages[]从 WebhookResponse 对象准备字段,如下所示:

{
  "fulfillment_messages": [
    {
      "text": {
        "text": [
          "Message object sample 1"
        ]
      }
    },
    {
      "card": {
        "title": "card title",
        "subtitle": "Message object sample 2"
      }
    },
    {
      "text": {
        "text": [
          "Message object sample 3"
        ]
      }
    }
  ]
}

注意:使用此列表的实际最终结果以及 Dialogflow 的处理方式可能不是您想要的,因此我建议您进行一些测试以了解 Dialogflow 将如何处理它们。据我所知,Dialogflow 可能会在这里做几件事,它可能会尝试将它们放在一起,或者它可能会选择一条随机消息。


推荐阅读