首页 > 解决方案 > 在 Dialogflow CX 中为 Dialogflow messenger 和 Facebook messenger 集成使用不同的自定义负载

问题描述

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

我有“旧”聊天机器人,内置于 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 messenger),我注意到的第一件事是我没有看到 FB messenger 的任何其他选项卡。因为我找不到单独的 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 信使只是“忽略”代码,不显示快速回复/筹码。代码(与 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 信使响应的不同选项卡(类似于 DF ES)?
  3. 还是代码中缺少一两件事?
  4. 我是否应该使用条件响应,即“如果 FB 信使集成则使用 FB 代码,否则使用 DF 代码”?如果是这样,我如何检查用户目前正在使用什么集成?

哦,顺便说一句,有人有关于如何调试 FB Messenger 集成的快速链接吗?我熟悉 GCP 日志资源管理器,但我似乎无法在这些日志中找到任何与 FB 相关的问题——我假设它们可以提供帮助,因为 FB 集成没有按预期工作。

标签: dialogflow-esfacebook-messenger-botdialogflow-cx

解决方案


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


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

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


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

随意评论这个解决方案。如果你同意,我很好奇。


推荐阅读