构建一个可以使用自然语言理解和响应的 Dialogflow CX Google Chat 应用

本页介绍了如何构建同时支持 Google Chat 和 Google Chat 的 Google Chat 应用。 使用自然语言理解和响应 Dialogflow。本指南使用的是 Dialogflow CX, 直接与 Google Chat 集成您还可以使用 Dialogflow ES,用于构建 Dialogflow ES Google Chat 应用 该 Dialogflow ES Google Chat 指南。

以一款可帮助用户租借聊天内容的 Chat 应用为例, 汽车。用户可能会这样写:“我想租车”。通过 Chat 应用可能会回答如下问题: “您想要去哪里取车?”这会启动一个 Chat 应用同时与用户进行了对话, 能够理解并用人类语音做出响应,让您在预约租车时也能轻松做出响应。

这只是一个示例。Dialogflow 聊天应用 各种互动如果需要自然人类语音,则需要 Dialogflow Chat 应用。通过 预建代理 可帮助您快速上手,并展示 Dialogflow 的功能,例如:

  • 预订航班
  • 预约医生
  • 订外卖
  • 回答有关零售商品清单的问题,例如商品是否 有其他颜色可供选择
  • 预构建的 Dialogflow 代理选择页面。
    图 1.为 Dialogflow Chat 应用选择预构建的代理。
  • 在 Dialogflow CX 中测试代理。
    图 2.在 Dialogflow CX 中测试代理,以确保代理的逻辑和配置按预期运行。该图显示了一组连续的主题页面,这些页面涉及对话中的特定步骤(例如为租车设置上车点和还车地点),并配置了连接这些点的逻辑。系统将在模拟器中测试对话。
  • 配置 Dialogflow Chat 应用。
    图 3.在 Google Cloud 控制台的 Chat API 配置页面上配置 Chat 应用以使用 Dialogflow CX 代理处理响应。
  • 测试 Dialogflow CX Chat 应用
    图 4.在 Google Chat 中使用 Dialogflow Chat 应用,讨论租车事宜。

目标

  • 设置环境。
  • 创建和部署 Dialogflow CX 代理。
  • 创建和部署由 Dialogflow CX 代理。
  • 测试 Chat 应用。

前提条件

架构

下图显示了 使用 Dialogflow 构建的聊天应用:

使用 Dialogflow 实现的 Chat 应用的架构。

在上图中,用户与 Dialogflow 交互 Chat 应用具有以下信息流:

  1. 用户在 Chat 中向 聊天应用(可通过私信或 Chat 聊天室。
  2. Dialogflow 虚拟客服位于 Google Cloud 中, 并处理消息以生成响应。
  3. (可选)使用 Dialogflow webhook, Dialogflow 代理可以与外部第三方服务进行交互,例如 作为项目管理系统或工单工具。
  4. Dialogflow 代理将响应发送回 Chat 中的 Chat 应用服务。
  5. 系统会将回复发送到 Chat 聊天室。

设置环境

在使用 Google API 之前,您需要先在 Google Cloud 项目中启用这些 API。 您可以在单个 Google Cloud 项目中启用一个或多个 API。
  1. 在 Google Cloud 控制台中,启用 Google Chat API 和 Dialogflow API。

    启用 API

  2. 确认您是在正确的 Cloud 项目,然后点击下一步

  3. 确认您启用的 API 正确无误,然后点击启用

创建 Dialogflow CX 客服

Dialogflow CX 代理 是处理并发对话的虚拟客服 与您的最终用户互动它是一个自然语言理解模块, 能够理解人类语言的细微差别。Dialogflow 翻译最终用户文本 您的应用和服务会在对话期间访问结构化数据 可以理解。您可以设计和构建一个 Dialogflow 代理来处理 个会话。

Dialogflow 代理就像人类呼叫中心的客服人员。你对两者都进行了训练 处理预期的对话场景, 过于明确。

以下是创建 Dialogflow CX 代理的方法:

  1. 在 Dialogflow CX 控制台中,打开 Dialogflow CX 控制台。点击 菜单 > Dialogflow CX

    转到 Dialogflow CX 控制台

  2. 选择一个 Google Cloud 项目。要查找您的项目,您可能需要 点击全部,然后进行搜索。

  3. 现在,您可以选择预构建的代理或 创建您自己的模板。如果您想探索代理 请选择 预建代理 这也有助于了解代理的功能。

    如需选择预建代理,请按以下步骤操作:

    1. 点击使用预建代理
    2. 选择预建代理。在本指南中,请选择 旅行:租车

      代理被评为新手, 中级或高级(取决于代理使用的功能数量) 以及其对话逻辑的精密程度。选择一个 中级或高级代理可能需要特定于代理 自定义和设置,包括在 Google Cloud 控制台中启用功能和 API Google Cloud 控制台。

    3. 点击作为代理导入

    如需创建您自己的代理,请按照下列步骤操作:

    1. 点击创建代理
    2. 选择自动生成 数据存储区代理 或选择自行构建以创建其他类型的代理。

    有关代理构建流程的详细演示,请参阅 创建一个 Dialogflow CX 代理

  4. 配置基本的代理设置:

    1. 显示名中,输入显示名。
    2. 选择您的首选位置。如果您想更改高级设置 位置信息设置、 点击修改
    3. 选择您的首选时区。
    4. 选择代理的默认语言。 代理的默认语言一经创建便无法更改。
  5. 点击创建。Dialogflow CX 开始创建代理,然后 显示代理的默认启动流程。

  6. (可选)自定义代理。如需详细了解代理 自定义流程,请参阅 创建一个 Dialogflow CX 代理

  7. 最佳实践是,测试代理:

    1. 点击 Test agent
    2. 选择在环境中测试代理
    3. 在“环境”中,选择草稿
    4. 在“流”中,选择默认启动流
    5. 在“页面”中,选择初始页
    6. 与代理交谈的撰写栏中,输入 Hello 并按 Enter 键。 代理通过自我介绍来进行回应。
    7. 通过测试示例对话完成测试。
  8. Dialogflow CX 代理已创建。返回到 Dialogflow CX 控制台。 点击菜单图标 > Dialogflow CX

    转到 Dialogflow CX 控制台

  9. 代理下,点击 > 复制名称。将此名称另存为 您在配置 Chat 应用时需要使用。

创建一个聊天应用并将其与 Dialogflow 代理连接

创建 Dialogflow CX 代理后,请按照以下步骤将其转换为 Chat 应用:

  1. 在 Google Cloud 控制台中,前往 Google Chat API。搜索“Google Chat API”和 依次点击 Google Chat API管理

    前往 Chat API

  2. 点击配置并设置 Chat 应用:

    1. 应用名称中,输入 Dialogflow App
    2. 头像网址中,输入 https://developers.google.com/workspace/chat/images/quickstart-app-avatar.png
    3. 说明中,输入 Responds to real human conversation
    4. 功能下,选择接收 1 对 1 消息,然后 加入聊天室和群组对话
    5. 连接设置下,选择 Dialogflow
    6. Dialogflow 设置下,选择 Dialogflow CX
    7. 代理或环境资源名称中,粘贴 Dialogflow CX 代理 复制的名称 创建一个 Dialogflow CX 代理
    8. 将此 Chat 应用设为可供特定用户和群组使用 ,然后输入您的电子邮件地址。
    9. 日志下,选择将错误记录到 Logging
  3. 点击保存

Chat 应用现在可以接收和回复了 Chat 中的消息。

测试 Chat 应用

通过发送消息来测试 Dialogflow CX Chat 应用 Google Chat。

  1. 使用您用于登录的 Google Workspace 账号打开 Google Chat 在您添加为可信测试员时提供的凭据。

    前往 Google Chat

  2. 点击 发起新对话
  3. 添加一人或多人字段中,输入 Chat 应用。
  4. 从结果中选择您的 Chat 应用。直接客户 消息会打开。

  5. 在与应用的新私信对话中,输入“Hello”并 按 enter

    Dialogflow Chat 应用通过引入 本身。

  6. 使用 测试对话示例

测试对话示例

要测试 Dialogflow CX Chat 应用,请在 在 Dialogflow CX 控制台或 Google Chat 中进行以下对话。 该说明有助于您了解 Dialogflow CX 代理如何解读 并生成自己的自然语言响应, 对话中的每个步骤。此示例对话基于 预构建代理 名为旅行:租车

对话框 说明
最终用户:Hello
代理:Hi!我是虚拟租车代理人。我可以 帮您开始新的租车预订。我能提供什么帮助 你今天呢?
  1. 系统调用默认初始流中的默认欢迎意图路由。
  2. 此状态处理程序的 fulfillment(“Hi!我是...”) 已添加到响应队列中。
  3. 代理将响应队列发送给最终用户。
最终用户:我想租车。
代理:Where would you like to take up the vehicle?
  1. car_rental.reservation_create intent 路由 匹配。
  2. 会话转换到自提位置页面。
  3. 提货地点页面表单尚未填写完毕,因此 代理使用 pickup_location 参数来提示用户 (“您想去哪里取...”)、 响应队列就会被添加到响应队列中
  4. 代理将响应队列发送给最终用户。
最终用户:拉斯维加斯
代理:好的,您的上车点将在拉斯维加斯。
代理:Is your sales off location different from your 自提地点?
  1. 最终用户输入会填充 pickup_location 代理所请求的参数。 对话回合。
  2. car_rental.return_different_location intent 默认启动流中的路由是否匹配。
  3. 提货位置页面中的表单填写路线 会得到评估和调用 它包含履单信息(“Ok, your pickup...”) 响应队列及其参数引用解析为 最终用户提供的实际值。
  4. 会话转换到确认位置页面。
  5. Confirm Location 页面有一个条目执行方式 (“您的下车点是否有所不同...”)、 响应队列就会被添加到响应队列中
  6. 代理将响应队列发送给最终用户。
最终用户:是。我会在洛杉矶还车。
代理:好的,您的下车点将在洛杉矶。
代理:What date and time would you like to take up the vehicle?
  1. car_rental.return_different_location intent 默认启动流中的路由是否匹配。
  2. 会话转换到下车地点页面。
  3. 最终用户输入会填充 drop_off_location 代理所请求的参数。 对话回合。
  4. 下车地点页面中的表单填写路线 会得到评估和调用 它包含一个履单信息(“好的,您的下车点...”),该执行方式已添加到 加入响应队列。
  5. 会话转换到租借时长页面。
  6. 租借时长页面中的表单值不完整,因此 提示用户输入 pickup_date_time 参数 (“您想在什么日期和时间取车...”)、 响应队列就会被添加到响应队列中
  7. 代理将响应队列发送给最终用户。
最终用户:我想在 3 月 5 日中午取车。
代理:What date and time would you like to off the vehicle?
  1. 最终用户输入会填充 pickup_date_time 代理所请求的参数。 对话回合。
  2. 租借时长页面缺少另一个缺少的表单值, 因此它会提示用户输入 drop_off_date_time 参数 (“您想在什么日期和时间下车...”)、 响应队列就会被添加到响应队列中
  3. 代理将响应队列发送给最终用户。
最终用户:3 月 15 日中午。
代理:请确认:

您将于以下时间后上车 拉斯维加斯 2024-03-05 12:00:00 还车 洛杉矶 2024 年 3 月 15 日 12:00:00

您觉得可以吗?
  1. 最终用户输入会填充 drop_off_date_time 代理所请求的参数。 对话回合。
  2. 会话转换到确认租借时长页面。
  3. 确认租借时长页面有一个条目完成 (“确认...”)、 响应队列就会被添加到响应队列中
  4. 代理将响应队列发送给最终用户。
最终用户:是,谢谢。
代理:Great!现在,让我们选择一辆车。
代理:Are you like an Economic 或 Lux 车辆?
  1. small_talk.confirmation.yes intent 确认租借时长页面中的路线是否匹配。
  2. 代理通过消息确认用户的选择 (“太好了!现在选择...”), 响应队列就会被添加到响应队列中
  3. 会话转换到车辆消歧页面。
  4. 车辆消歧页面表单尚未填写完成,因此 使用 vehicle_type 参数提示用户 (“您想要经济舱还是奢侈品...”)、 响应队列就会被添加到响应队列中
  5. 代理将响应队列发送给最终用户。
最终用户:请尽量经济。
代理:您希望 Cymbal Car or the Cymbal Truck?
  1. $session.params.vehicle_type="economy_vehicle" intent 路由是否匹配。
  2. 会话转换到经济选项页面。
  3. Economy Options 页面有一个条目执行方式 (“您是否想要...”)、 响应队列就会被添加到响应队列中
  4. 代理将响应队列发送给最终用户。
最终用户:Cymbal Truck。
代理:The Cymbal Truck is $50.33 per day. 该设备可容纳 4 人,并配有 AM/FM 收音机。 要继续付款吗?
最终用户:是的,谢谢。
  1. $session.params.vehicle_type="Cymbal Truck" intent 路线匹配,并且填充了 vehicle_model 参数。
  2. 会话转换到 Confirm Cymbal Truck 页面。
  3. 确认 Cymbal Truck 页面有一个输入项执行方式 (“Cymbal 卡车每天的费用是 50.33 美元...”), 响应队列就会被添加到响应队列中
  4. 代理将响应队列发送给最终用户。
  5. 用户的响应与 small_talk.confirmation.yes 匹配 。
代理:What card type will you are using?
最终用户:Altostrat
代理:请输入卡号。
最终用户:1234 1234 1234 1234
代理:What is the name on the card?
最终用户:Charlie
代理:What is the billing street address?
最终用户:1800 Amphibious Blvd.加利福尼亚州山景城
代理:What is the billing ZIP code?
最终用户:94045
代理:You will be Picking the Cymbal Car 2024-03-05 12:00:00 还在, 2024-03-15 12:00:00。此行程的总费用将是 175.38 美元。
代理:感谢您与我们租房,祝您度过愉快的一天!
  1. 会话转换到付款页面。
  2. 付款表单尚未填写完毕,因此代理发出提示 card_typecard_number 的用户, billing_namebilling_street_address、 和 billing_zip_code 参数 (“哪种卡片类型会...”) 这些响应会依序添加到响应队列中并作为 响应。用户的响应会设置每个参数值。
  3. 会话转换到租借确认页面。
  4. 租借确认页面有一个条目执行方式 (“好的,上车点将是...”), 响应队列就会被添加到响应队列中
  5. 代理将响应队列发送给最终用户。
  6. 会话转换到结束会话页面。

通过 Dialogflow 发送卡片消息

Dialogflow 可以 text卡片消息。用卡片回复 消息,请将其指定为 自定义载荷fulfillment

以下 JSON 展示了如何将卡片消息作为自定义载荷发送 执行方式:

json

{
  'cardsV2': [{
    'cardId': 'createCardMessage',
    'card': {
      'header': {
        'title': 'A card message!',
        'subtitle': 'Sent from Dialogflow',
        'imageUrl': 'https://developers.google.com/chat/images/chat-product-icon.png',
        'imageType': 'CIRCLE'
      },
      'sections': [
        {
          'widgets': [
            {
              'buttonList': {
                'buttons': [
                  {
                    'text': 'Read the docs!',
                    'onClick': {
                      'openLink': {
                        'url': 'https://developers.google.com/workspace/chat'
                      }
                    }
                  }
                ]
              }
            }
          ]
        }
      ]
    }
  }]
}

限制和注意事项

  • 聊天互动事件 获得有限的支持和一些注意事项:
    • 以下 互动事件类型
      • MESSAGE
      • ADDED_TO_SPACE
      • CARD_CLICKED
    • 对于 MESSAGEADDED_TO_SPACE 事件,发送到 Dialogflow 代理对应于argumentText Chat 消息。如果邮件包含 斜杠命令,则该值 而是改为使用 text 字段。
    • 对于 CARD_CLICKED 事件,发送到 Dialogflow 代理的查询输入 格式为 CARD_CLICKED.functionName,其中 functionName 对应 function 字段的值 Action 对象 附加至互动卡片元素(如按钮)的卡片。
    • 每个 Chat 互动事件的完整 JSON 载荷 作为查询参数中的自定义载荷发送到 Dialogflow; 访问 Dialogflow webhook 查询 WebhookRequest.payload 字段的值。
  • 回复时的注意事项 斜杠命令从卡片或对话框接收数据: <ph type="x-smartling-placeholder">
      </ph>
    • 当 Dialogflow Chat 应用收到包含斜杠的消息时 命令,查询输入仅包含 text 字段的值。 text 字段以斜杠命令的名称开头(例如, /command),可用于配置 Dialogflow 代理的 intent 来检测斜杠命令
    • 如果 Dialogflow 代理需要处理 聊天互动事件 JSON 载荷, 它可以通过使用 Dialogflow webhook 检查查询参数中的自定义载荷。
    • 如需显示对话框,请执行以下操作: Dialogflow 代理的单个自定义 JSON 载荷进行响应, 包含包含“DIALOG”的消息 操作响应
    • 为了处理从卡片输入的数据,Dialogflow 代理可以检测 以文本 CARD_CLICKED 开头并以 包含适当的 action
  • 不支持链接预览
  • 如果 Dialogflow 代理只响应一条消息,该消息 会同步发送到 Google Chat。如果 Dialogflow 代理响应, 处理多条消息,则所有消息都会发送到 Chat 来异步加载 create 针对 Chat API 中的 spaces.messages 资源调用 1 次 消息。
  • 将 Dialogflow CX 与 Chat 集成使用时, 您必须设置 Dialogflow 代理和 Chat 应用 在同一 Google Cloud 项目中运行。如果您需要设置 Dialogflow 和聊天,然后就可以 设置中间服务器以方便连接。要了解如何操作, 看看这个 适用于 Dialogflow CX 的 Chat 集成示例

问题排查

当 Google Chat 应用或 card 会返回错误, 聊天界面会显示一条内容为“出了点问题”的消息。 或“无法处理您的请求”。有时,Chat 界面 不会显示任何错误消息,但 Chat 应用或 卡片会产生意外结果;例如,卡片消息 。

虽然 Chat 界面中可能不会显示错误消息, 提供描述性错误消息和日志数据,以帮助您修正错误 启用 Chat 应用的错误日志记录时。如需观看方面的帮助, 请参阅 排查并修正 Google Chat 错误

清理

为避免系统因 我们建议您删除 Cloud 项目中。

  1. 在 Google Cloud 控制台中,前往管理资源页面。点击 菜单 &gt; IAM 和管理员 &gt; 管理资源

    前往 Resource Manager

  2. 在项目列表中,选择要删除的项目,然后点击 删除
  3. 在对话框中输入项目 ID,然后点击关停以删除项目 项目。