使用 Dialogflow 添加自动化功能

Dialogflow 是一款自然语言理解 (NLU) 工具,可处理用户输入,将其映射到已知的意图,并以适当的回复做出响应。Dialogflow 有两个版本。通过将 Business Messages 代理与 Dialogflow ES 集成,您可以轻松创建简单的自动化功能,以快速启动代理。通过与 Dialogflow CX 集成,您可以为更复杂的对话创建高级自动化功能。

Business Messages 代理支持直接与

如需将 Business Messages 代理与 Dialogflow ESDialogflow CX 的其他功能集成,请参阅每个产品的文档。

当用户向具有 Dialogflow 集成的代理发送消息时,Business Messages 会将该用户消息传递给 Dialogflow,并在该消息的 dialogflowResponse 对象中向代理发送 Dialogflow 响应。您可以将代理配置为自动向用户发送 Dialogflow 的响应,而无需您执行任何操作。如需了解详情,请参阅自动回复

Dialogflow 集成

您需要先启用 Dialogflow 集成,然后才能通过 Business Messages 使用基于 Dialogflow 的自动化功能。

前提条件

首先,您需要

  • Business Messages 代理
  • 全球区域,根语言为英语 (en) 的 Dialogflow 代理

如果您没有 Dialogflow 代理,请创建一个

Dialogflow ES

在启用 Dialogflow ES 集成之前,您需要 Dialogflow 代理的项目 ID。如需查找项目 ID,请执行以下操作:

  1. 导航到 Dialogflow 控制台
  2. 选择要关联到 Business Messages 的 Dialogflow 代理,然后点击代理名称旁边的齿轮图标
  3. Google 项目下,记下项目 ID 值。

Dialogflow CX

在启用 Dialogflow CX 集成之前,您需要 Dialogflow 代理的项目 ID 和代理 ID。要找到这些 ID,请执行以下操作:

  1. 导航到 Dialogflow CX 控制台
  2. 选择您的 Dialogflow 项目。
  3. 在代理选择器中,点击 Dialogflow 代理旁边的溢出菜单
  4. 点击复制名称。此操作会按照以下格式复制代理的全名:projects/PROJECT_ID/locations/REGION_ID/agents/AGENT_ID
  5. 记下项目 ID 和代理 ID 值。

启用集成

  1. 在 Business Communications Developer Console 中,导航到 Integrations(集成)。
  2. 对于 Dialogflow,点击启用集成
  3. 点击连接现有模型
  4. 对于 Dialogflow 版本,选择要启用的版本。
  5. 输入您的 Dialogflow 代理的项目 ID。
  6. 如需启用 Dialogflow CX,请输入 Dialogflow 代理的 ID。
  7. 如果您希望 Business Messages 通过 Dialogflow 响应自动回复用户,请选择启用自动回复
  8. 点击下一步
  9. 复制服务帐号电子邮件地址。此帐号会将您的企业消息与 Dialogflow 代理连接起来。
  10. Google Cloud Console 中,选择您的 Dialogflow 项目。
  11. 导航到 IAM 权限
  12. 点击添加,然后输入新的主帐号的服务帐号电子邮件地址。
  13. 选择角色部分,选择 Dialogflow 控制台代理编辑器
  14. 点击添加其他角色,然后选择 Dialogflow API 客户端
  15. 点击保存
  16. 在 Business Communications Developer Console 中,点击下一步
  17. 点击开始集成

Business Messages 与 Dialogflow 连接大约需要两分钟时间。

更新集成

  1. 在 Business Communications Developer Console 中,导航到 Integrations(集成)。
  2. 点击 Dialogflow 旁边的齿轮图标
  3. 切换启用自动回复,具体取决于您是否希望 Business Messages 使用 Dialogflow 响应自动回复用户。

在 Dialogflow 版本之间切换

Business Messages 代理一次只能支持一个 Dialogflow 集成。要从一个 Dialogflow 版本切换到另一个 Dialogflow 版本,您需要先停用当前集成,然后再启用新版本。

停用集成

  1. 在 Business Communications Developer Console 中,导航到 Integrations(集成)。
  2. 点击 Dialogflow 旁边的齿轮图标
  3. 点击停用集成
  4. 点击停用

停用现有 Dialogflow 集成大约需要一分钟时间。

按照这些步骤启用新的 Dialogflow 集成。

意图匹配

为 Business Messages 代理启用 Dialogflow 集成后,您的代理可以使用 Dialogflow 项目的已配置意图来了解和响应用户问题,而无需编写代码。如需详细了解意图,请参阅 Dialogflow ESDialogflow CX 文档。

针对您希望通过自动化功能支持的每个对话选项,配置 Dialogflow intent。Business Messages 代理依靠 Dialogflow 来了解用户消息。

调用 Dialogflow API 时,Business Messages 会将用户消息载荷传递给您的 intent 和 fulfillment 网络钩子。当用户消息与 intent 匹配时,您可以在 QueryParameters 内的 business_messages_payload 字段中以 Struct 格式访问此载荷。

载荷包含用户消息中的所有字段(DialogflowResponse 除外)。

对于 Dialogflow CX,Business Messages 还会将名为 channel 且值为 google_business_messages 的会话参数传递给您的 intent,您可以使用如下格式在代理中引用它:$session.params.channel

此参数可用于向 Dialogflow 执行方式添加条件,以支持同一 Dialogflow 代理中的多个渠道。

如需详细了解查询参数,请参阅 Dialogflow ESDialogflow CX 参考文档。

前提条件

在 Dialogflow 中创建 NLU 模型时,您可以为意图配置不同的响应类型。Business Messages 支持默认响应,其中可能包括:

  • 文字
  • 自定义负载
  • 在线客服人员转接(仅限 Dialogflow CX)

自定义载荷必须与有效的 Business Messages JSON 消息响应对象相匹配。为 intent 配置自定义载荷响应时,Business Messages 会忽略以下字段:

  • name
  • messageId
  • representative

请参阅以下示例响应。

包含建议的文本

{
  "text": "Hello World!",
  "fallback": "Hello World!\n\nReply with \"Hello\" or \"Hi!\"",
  "suggestions": [
    {
      "reply": {
        "text": "Hello",
        "postbackData": "hello-formal"
      }
    },
    {
      "reply": {
        "text": "Hi!",
        "postbackData": "hello-informal"
      }
    }
  ]
}

复合信息卡

{
  "fallback": "Hello, world!\nSent with Business Messages\n\nReply with \"Suggestion #1\" or \"Suggestion #2\"",
  "richCard": {
    "standaloneCard": {
      "cardContent": {
        "title": "Hello, world!",
        "description": "Sent with Business Messages.",
        "media": {
          "height": "TALL",
          "contentInfo":{
            "altText": "Google logo",
            "fileUrl": "https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png",
            "forceRefresh": "false"
          }
        },
        "suggestions": [
          {
            "reply": {
              "text": "Suggestion #1",
              "postbackData": "suggestion_1"
            }
          },
          {
            "reply": {
              "text": "Suggestion #2",
              "postbackData": "suggestion_2"
            }
          }
        ]
      }
    }
  }
}
{
  "fallback": "Card #1\nThe description for card #1\n\nCard #2\nThe description for card #2\n\nReply with \"Card #1\" or \"Card #2\"",
  "richCard": {
    "carouselCard": {
      "cardWidth": "MEDIUM",
      "cardContents": [
        {
          "title": "Card #1",
          "description": "The description for card #1",
          "suggestions": [
            {
              "reply": {
                "text": "Card #1",
                "postbackData": "card_1"
              }
            }
          ],
          "media": {
            "height": "MEDIUM",
            "contentInfo": {
              "fileUrl": "https://my.files/cute-dog.jpg",
              "forceRefresh": false
            }
          }
        },
        {
          "title": "Card #2",
          "description": "The description for card #2",
          "suggestions": [
            {
              "reply": {
                "text": "Card #2",
                "postbackData": "card_2"
              }
            }
          ],
          "media": {
            "height": "MEDIUM",
            "contentInfo": {
              "fileUrl": "https://my.files/elephant.jpg",
              "forceRefresh": false
            }
          }
        }
      ]
    }
  }
}

在线客服人员转接

{
  "metadata": {}
}

常见问题解答聊天机器人

为 Business Messages 代理启用 Dialogflow ES 集成后,您可以创建常见问题解答聊天机器人。当您将问题和答案作为受支持的知识文档提供时,Business Messages 和 Dialogflow 会创建必要的基础架构来了解和回答用户问题,而无需您编写代码。

如需查看常见问题解答聊天机器人的实际运用,请与 Business Messages 常见问题解答聊天机器人聊天。

前提条件

在创建 FAQ 聊天机器人之前,您需要以知识文档(最多 50 MB)的形式提供问题和答案:公开发布的 HTML 文件或 CSV 文件。

一般而言,知识文档

  • 可以在答案中包含有限的 Markdown,如富文本中所述。
  • 大小不超过 50 MB。
  • 问题/答案对不应超过 2000 个。
  • 请勿提供重复回答不同答案的问题。

对于 HTML 文件,

  • 来自公共网址的文件必须已被 Google 搜索索引器抓取,因此存在于搜索索引中。您可以使用 Google Search Console 检查是否满足此项要求。请注意,索引器不会及时更新您的内容。当源内容发生更改时,您必须明确更新文档。
  • Dialogflow 在创建响应时从内容中移除 HTML 标记。因此,最好避免使用 HTML 标记并尽可能使用纯文本。
  • 不支持包含单个问题/答案对的文件。

对于 CSV 文件,请执行以下操作:

  • 文件的第一列必须为问题,第二列必须为答案,且不得有标题。
  • 文件必须使用英文逗号作为分隔符。

创建常见问题解答聊天机器人

  1. 在 Business Communications Developer Console 中,导航到 Integrations(集成)。
  2. 知识库 (FAQ) 下,点击创建知识库
  3. 输入知识库的名称,然后点击下一步
  4. 选择 Mime 类型
  5. 添加知识文档。
    • 如果您为 Mime 类型选择 HTML,请在网址中输入常见问题解答的可公开访问网址。
    • 如果您为 Mime 类型选择 CSV,请点击上传,然后选择 CSV 文件。
  6. 点击添加并完成

要向常见问题解答聊天机器人添加其他文档,请点击添加文档按钮。

在您按照上述步骤操作后,Business Messages 会在发送到代理的用户消息中包含 dialogflowResponse 对象。如果您启用自动回复,Business Messages 会以与用户消息相比具有最高 matchConfidence 得分的问题/答案对来响应用户。

自动回复

如果您在 Dialogflow 集成期间启用自动回复,则 Business Messages 会通过 Dialogflow 自动响应用户。您的商家消息代理会以最高的置信度匹配项进行响应。借助 Dialogflow ES 集成,如果常见问题解答和自定义意图都匹配,Business Messages 会给出置信度最高的匹配项。

Business Messages 会将所有自动回复的消息标记为来自 BOT 代表。如果代理支持实时代理,Business Messages 会在 REPRESENTATIVE_JOINED 事件后暂停自动回复,并在 REPRESENTATIVE_LEFT 事件后恢复自动回复。请参阅从聊天机器人转移到人工客服

自动回复常见问题解答

借助 Dialogflow ES 集成,如果 FAQ 答案的置信度最高,Business Messages 会将答案映射到短信。如果存在相关但不同的答案,该消息会显示“查看其他答案”建议。否则,消息会包含问题和建议的回复,询问该消息是否满足用户的请求。

自动回复 intent 响应

intent 响应可以包括以下一个或多个响应。

如果意图响应具有最高的置信度匹配,则以下操作适用。

  • 如果响应至少有一个文本值,则 Business Messages 会将此值映射到短信。
  • 如果响应至少有一个具有有效 Business Messages JSON 对象结构的自定义载荷,则 Business Messages 会使用提供的 JSON 对象创建消息。
  • 如果响应至少有一个在线代理切换响应,请参阅使用在线代理请求自动回复

由于 Dialogflow 可以在一个意图匹配中包含多个响应,因此 Business Messages 会将每个文本、自定义载荷或在线客服人员转接响应作为单独的消息发送。如果 intent 匹配中有多条消息,但其中部分消息的格式不正确,则 Business Messages 只会将有效消息作为自动回复发送。

自动回复人工客服请求

Dialogflow CX 支持在线客服人员转接响应。它表明应将对话移交给人工代表,并让您为移交程序传递自定义元数据。如果意图响应具有最高的置信度匹配,并且包含在线客服人员转接,则 Business Messages 会向您的网络钩子发送在线客服人员请求的事件。如需处理此事件,请参阅从聊天机器人切换到实时代理

自动回复后备消息

如果 Dialogflow 没有获得高置信度的匹配项,Business Business Messages 会发送一个后备响应。在 Dialogflow ES 和 Dialogflow CX 中,回退的处理方式不同。

Dialogflow ES

对于常见问题解答聊天机器人,如果没有找到常见问题解答,则 Business Messages 会发送一条找不到答案的后备消息。

对于配置的 intent,如果没有与 intent 响应匹配,则 Business Messages 会发送后备 intent 响应。 您可以使用 Dialogflow 提供的后备文本,也可以使用额外的文本和自定义载荷配置回退。

下面是您的网络钩子可以接收的后备 intent 响应示例:

{
  "intentResponses": [
    {
      "intentName": "projects/df-integration/agent/intents/12345",
      "intentDisplayName": "Default Fallback Intent",
      "intentDetectionConfidence": "1.0",
      "fulfillmentMessages": [
        {
          "text": "One more time?"
        }
      ]
    }
  ]
}

Dialogflow 会预先填充 intent_nameintent_display_name

Dialogflow CX

Dialogflow CX 将后备 intent 响应作为内置事件进行处理。如果没有与意图响应匹配,Business Messages 会从 Dialogflow 中的无匹配默认事件发送回退消息。您可以使用 Dialogflow 提供的后备文字,或使用其他文字、自定义载荷和实时代理切换选项来配置后备。

下面是您的网络钩子可以接收的后备 intent 响应示例:

{
  "intentResponses": [
    {
      "intentName": "sys.no-match-default",
      "intentDisplayName": "Default Fallback Intent",
      "intentDetectionConfidence": "0.3",
      "fulfillmentMessages": [
        {
          "text": "I missed that, say that again?"
        }
      ]
    }
  ]
}

Business Messages 硬编码 intent_nameintent_display_name

Dialogflow 专用字段

启用 Dialogflow 集成后,代理收到的用户消息将包含 dialogflowResponse 对象。无论 Business Messages 是否代表您自动回复消息,网络钩子都会收到所有用户消息的载荷。如需检查是否存在自动回复,请查看 autoResponded 字段的值,然后决定是否需要响应用户。

Dialogflow ES

...
"dialogflowResponse": {
  "queryText": "TEXT",
  "intentResponse": {
    "intentName": "INTENT_ID",
    "intentDisplayName": "INTENT_NAME",
    "intentDetectionConfidence": "CONFIDENCE_NUMERIC",
    "fulfillmentMessages": [{
      "text": "FULFILLMENT_TEXT",
      "jsonPayload": "JSON",
      "error": "ERROR_STATUS",
    }],
  "faqResponse": {
    "userQuestion": "USER_QUESTION",
    "answers": [{
      "faqQuestion": "FAQ_QUESTION",
      "faqAnswer": "FAQ_ANSWER",
      "matchConfidenceLevel": "CONFIDENCE_LEVEL",
      "matchConfidence": "CONFIDENCE_NUMERIC",
    }],
  },
  "autoResponded": "BOOLEAN",
  "autoRespondedMessages": [{
    "message": "MESSAGE_JSON",
    "responseSource": "SOURCE",
  }],
},
...
字段 说明
queryText 原始对话查询文本。如果为 Dialogflow 模型启用了自动拼写更正,则 queryText 包含更正后的用户输入。
intentName 匹配意图的唯一标识符。
intentDisplayName 匹配的意图的名称。
intentDetectionConfidence queryTextintentName 之间的匹配度数值置信度。
text 文本响应。
jsonPayload 自定义载荷响应。 此字符串与 Dialogflow 中定义的自定义载荷匹配。如果载荷没有有效的 Business Messages JSON 对象结构,error 会描述问题。
error 对 intent 执行消息的错误的说明。
userQuestion 用户提出的问题,由 Dialogflow 解析。
faqQuestion Dialogflow 中与用户的问题匹配。
faqAnswer Dialogflow 的回答与用户的问题相匹配。
matchConfidenceLevel userQuestionfaqQuestion 之间的匹配置信度。
matchConfidence userQuestionfaqQuestion 之间的匹配数值置信度评分。
autoResponded Business Messages 是否使用 Dialogflow 的答案自动回复用户。
message 自动响应的载荷。
responseSource 自动回复的来源。请参阅 ResponseSource

Dialogflow CX

...
"dialogflowResponse": {
  "queryText": "TEXT",
  "intentResponse": {
    "intentName": "INTENT_ID",
    "intentDisplayName": "INTENT_NAME",
    "intentDetectionConfidence": "CONFIDENCE_NUMERIC",
    "fulfillmentMessages": [{
      "text": "FULFILLMENT_TEXT",
      "jsonPayload": "JSON",
      "error": "ERROR_STATUS",
      "liveAgentHandoff": {
        "metadata": {}
      }
    }],
  "autoResponded": "BOOLEAN",
  "autoRespondedMessages": [{
    "message": "MESSAGE_JSON",
    "responseSource": "SOURCE",
  }],
},
...
字段 说明
queryText 原始对话查询文本。如果为 Dialogflow 模型启用了自动拼写更正,则 queryText 包含更正后的用户输入。
intentName 匹配意图的唯一标识符。
intentDisplayName 匹配的意图的名称。
intentDetectionConfidence queryTextintentName 之间的匹配度数值置信度。
text 文本响应。
jsonPayload 自定义载荷响应。 此字符串与 Dialogflow 中定义的自定义载荷匹配。如果载荷没有有效的 Business Messages JSON 对象结构,error 会描述问题。
error 对 intent 执行消息的错误的说明。
liveAgentHandoff 在线客服人员转接流程的自定义元数据。
autoResponded Business Messages 是否使用 Dialogflow 的答案自动回复用户。
message 自动响应的载荷。
responseSource 自动回复的来源。请参阅 ResponseSource