在 Dialogflow CX 中为 Dialogflow Messenger 和 Facebook Messenger 集成使用不同的自定义负载

Using different Custom payloads for Dialogflow messenger and Facebook messenger integration in Dialogflow CX

我想这可能是一个愚蠢的问题,可以通过一种非常简单的方式解决,但我真的很挣扎。

我有一个“旧”聊天机器人,它内置于 Dialogflow ES 中,具有 2 个集成(DF messenger、FB messenger)。因为我设置了 2 个集成,所以我会自动为每个意图提供 2 个可用响应选项卡。

如果我想添加一个按钮,我需要使用自定义负载类型的响应。由于我有 2 个不同的集成,需要不同的代码,因此我需要为每个集成设置自定义负载(每个选项卡上有 1 个)。

DF Messenger 示例的自定义负载:

{
  "richContent": [
    [
      {
        "icon": {
          "color": "#F78A2D",
          "type": "network_check"
        },
        "text": "Text on the button",
        "type": "button",
        "link": "https://www.example.com"
      }
    ]
  ]
}

具有类似功能的 FB Messenger 示例的自定义负载:

{
  "facebook": {
    "attachment": {
      "type": "template",
      "payload": {
        "template_type": "button",
        "buttons": [
          {
            "title": "Text on the button",
            "url": "https://www.example.com",
            "type": "web_url"
          }
        ],
        "text": "Required text"
      }
    }
  }
}

一切正常。

问题

我想用 Dialogflow CX 实现同样的目标。

我已经设置了相同的集成(DF 和 FB 信使),我注意到的第一件事是我没有看到 FB 信使的任何额外选项卡。因为我找不到单独的 FB 选项卡,所以我一直在使用单个自定义负载响应并将两种代码混合在一起(对于 DF messenger 和 FB messenger),但没有成功。

我设法做到的是:

如果在这个单一的自定义负载响应中我只使用 DF Messenger 的代码,它会按预期与 DF Messenger 一起工作 - 用户通过按钮获得响应。 FB Messenger 只是“忽略”代码并且不显示按钮。代码:

{
  "richContent": [
    [
      {
        "icon": {
          "color": "#F78A2D",
          "type": "network_check"
        },
        "text": "Text on the button",
        "type": "button",
        "link": "https://www.example.com"
      }
    ]
  ]
}

如果我只使用 FB 信使的代码,它会按预期工作 - 用户会得到快速回复的响应。 DF messenger 只是“忽略”了代码,并没有显示 quick replies/chips。代码(不同于 Dialogflow ES,但让我们从简单的开始,只使用快速回复:D):

{
  "text": "Pick a color:",
  "quick_replies":[
    {
      "content_type":"text",
      "title":"Red",
      "payload":"Red color"
    },{
      "content_type":"text",
      "title":"Green",
      "payload":"Green color"
    }
  ]
}

现在我们来解决问题。因为 FB Messenger 没有额外的标签(如前所述),所以我试图通过将两种代码混合在一起来使男性的东西起作用。所以混合代码看起来像这样:

{
  "richContent": [
    [
      {
        "icon": {
          "color": "#F78A2D",
          "type": "network_check"
        },
        "text": "Text on the button",
        "type": "button",
        "link": "https://www.example.com"
      }
    ]
  ],
  "text": "Pick a color:",
  "quick_replies":[
    {
      "content_type":"text",
      "title":"Red",
      "payload":"rdeč"
    },{
      "content_type":"text",
      "title":"Green",
      "payload":"zelen"
    }
  ]
}

正如您现在假设的那样,此代码适用于 DF Messenger 集成(用户获得按钮),但不适用于 FB 集成(用户无法获得快速回复)。

所以真正的问题是:

  1. 如何让它工作?
  2. 我是不是在某个地方缺少用于 FB Messenger 响应的不同选项卡(类似于 DF ES)?
  3. 或者代码中是否只缺少一两件事?
  4. 我是否应该使用条件响应又名“IF FB messenger integration THEN use FB 代码否则使用 DF 代码”?如果是这样,我如何检查集成是什么 用户目前正在使用?

哦,顺便说一句,有没有人知道如何快速 link 如何调试 FB Messenger 集成?我熟悉 GCP 日志浏览器,但我似乎无法在这些日志中找到任何与 FB 相关的问题 - 我假设他们可以提供帮助,因为 FB 集成没有按预期工作。

我在 Google 论坛上得到的答案最能描述解决方案并且是最新的:


工程师们正在努力在 Dialogflow CX (LINK) 的单个代理中为不同的集成使用自定义有效负载。您可以通过选择话题标题左侧列出的星标来订阅以获取有关此功能请求所取得进展的自动更新。

与此同时,一个可能的解决方法是使用不同的代理进行集成。


编辑: 刚刚想到了另一种解决方案,我认为它不仅仅是一种解决方法,而且实际上可能会坚持下去(也许这就是 Google 想象的方式).我们可以使用版本控制,就像我们为不同的集成提供不同的版本一样。唯一值得一提的缺点是我在这里可以看到,我们需要在所有版本中使用所有机器人流程,因此需要在所有集成中使用。如果我们想为不同的集成使用完全不同的通信流,这可能是个问题。这个问题可以通过清空特定集成的流程来解决(或者根本不 using/linking 它们),但另一方面,完全不同的通信流程也可能只是意味着一个新的代理。

欢迎对此解决方案发表评论。如果你同意,我很好奇。