您的 Webhook 目前在 cruisePlanCoverage 函数中使用硬编码数据。
在本教程的这一步中,
您将创建一个
Spanner
数据库,使用涵盖的目的地填充该数据库,并更新您的函数以查询该数据库。
项目配置
请务必确保您的 Dialogflow 代理和数据库位于同一项目中。 这是让您的函数安全访问数据库的最简单方法。 此外,您还必须启用 Spanner API。
在创建数据库之前, 请从 Google Cloud 控制台中选择您的项目。
为项目启用 Spanner API。
创建 Spanner 实例
首次使用 Spanner 时,您必须创建一个实例,用于分配 Spanner 数据库在该实例中使用的资源。
在 Google Cloud 控制台中,前往 Spanner 实例 页面。
点击创建实例 。
对于实例名称,请输入 Tutorial Instance 。
系统会根据实例名称自动输入实例 ID。
在选择配置中, 保留默认选项区域级,然后选择与您创建函数时选择的区域 位置 相同的区域。
在分配计算容量 中, 输入 100 个处理单元。 这为本教程提供了最低容量。
点击创建 。 控制台会显示您创建的实例的 Google Cloud 概览页面 。
创建 Spanner 数据库
现在您已拥有一个实例,接下来需要创建一个数据库。 如需创建数据库,请执行以下操作:
- 在实例的概览 页面中,点击创建数据库 。
- 对于数据库名称,请输入 tutorial-database 。
- 选择 Google 标准 SQL 数据库方言。
- 点击创建 。 控制台会显示您创建的数据库的概览 页面。 Google Cloud
为数据库创建表
现在您已拥有一个数据库,接下来需要为该数据库创建一个表。 如需创建表,请执行以下操作:
- 在数据库概览 页面的“表”部分中,点击创建表 。
在写入 DDL 语句 页面中,输入:
CREATE TABLE Destinations ( Destination STRING(1024), Covered BOOL, ) PRIMARY KEY(Destination);点击提交 。 控制台会返回到数据库概览 页面,并 显示架构更新 正在进行中。 Google Cloud 等待更新完成。
将数据插入到表中
现在您的数据库中已有一个表,接下来需要向该表中添加数据。 如需添加数据,请执行以下操作:
- 在数据库概览 页面上的表列表中,点击 Destinations 表。 控制台会显示 Destinations 表的架构 页面。 Google Cloud
- 在左侧导航菜单中,点击数据 以显示 Destinations 表的数据 页面。
点击插入 。 控制台会显示 Destinations 表的查询 页面,其中包含一个 新查询标签页,其中包含
INSERT和SELECT语句。 Google Cloud 使用以下语句覆盖这些语句:INSERT INTO Destinations (Destination, Covered) VALUES('anguilla', TRUE), ('canada', TRUE), ('china', TRUE), ('italy', TRUE), ('mexico', TRUE), ('spain', FALSE);点击运行 。
在左侧导航菜单中,再次点击数据 以显示 Destination 表的数据。 确认该表包含所需的数据。
更新 Cloud Function 以查询数据库
Webhook 代码中的 cruisePlanCoverage 函数会检查是否设置了用于连接到数据库的特定环境变量。
如果未设置这些环境变量,该函数会使用硬编码的目的地列表。
现在您已设置数据库,接下来请更新 Cloud Function 以设置所需的环境变量:
打开 Cloud Functions 概览页面。
点击 tutorial-telecommunications-webhook 函数以转至其详情页面。
点击修改 。
打开运行时、构建和连接设置 部分。
选择运行时 标签页。
在“运行时环境变量”部分中添加以下变量:
PROJECT_ID:您的项目 IDSPANNER_INSTANCE_ID:您的 Spanner 实例 ID(可能是tutorial-instance)SPANNER_DATABASE_ID:您的 Spanner 数据库 ID(可能是tutorial-database)
点击下一步 。
点击部署 。
等待状态指示器显示函数已成功部署。
测试智能体
您的智能体现在可以试用了。 在 Dialogflow 控制台中点击测试智能体 按钮以打开模拟器。 尝试与智能体进行以下对话:
| 对话回合 | 您 | 智能体 |
|---|---|---|
| 1 | 您好! | 您好!我是虚拟电信智能体。我可以帮助您解决结算和套餐问题、排查相关问题以及添加旅游和邮轮计划。今天有什么可以帮您? |
| 2 | 我想添加邮轮计划 | 让我为您查看一下。您在我们这里登记的手机号码是多少? |
| 3 | 123-123-1234 | 您的邮轮行程是几天? |
| 4 | 7 | 选项 1 包含通话和短信。每天 $[XX]。如需了解详情,请点击此处 [网址]。选项 2 包含通话、短信和数据流量。每天 $[XX]。如需了解详情,请点击此处 [网址]。您想添加哪个邮轮计划? |
| 5 | 选项 1 | 知道了。我已将该计划添加到您的账号。在邮轮旅行期间,您可能还需要陆地上的服务。您将在哪个港口停靠? |
| 6 | 意大利 | 您将在那里停留几天? |
| 7 | 3 | 好消息!意大利提供免费的陆地服务。大功告成!您现在还需要其他方面的帮助吗? |
如果您检查代码,会发现意大利不在硬编码的涵盖目的地列表中。 这意味着您的 Webhook 已成功连接到数据库,该数据库确实包含意大利。
问题排查
Webhook 代码包含日志记录语句。 如果您遇到问题,请尝试查看 Cloud Function 的日志。
如果您的函数未连接到数据库,并且您在日志中看到权限错误,则可能需要修复函数使用的默认服务帐号的角色。
此服务帐号的格式为
PROJECT_ID@.
您可以通过以下任一方式修复此问题:
如果默认服务帐号显示在 IAM 主页面上, 请更改该服务账号的权限。 “编辑器”角色可以正常使用,但在生产环境中,您可能需要更细化的角色。
如果 IAM 主页面上未显示默认服务帐号, 请授予所需角色 ,方法是将该服务帐号添加为新主账号。
或者,您也可以 使用您创建的服务帐号。
更多信息
如需详细了解上述步骤,请参阅: