您的 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 表。 Google Cloud 控制台会显示目标表的架构页面。
- 在左侧导航菜单中,点击数据以显示 Destinations 表的数据页面。
点击插入。 Google Cloud 控制台会显示 Destinations 目标表的查询页面,其中包含一个新的查询标签页,该标签页包含
INSERT和SELECT语句。将这些语句替换为以下内容:INSERT INTO Destinations (Destination, Covered) VALUES('anguilla', TRUE), ('canada', TRUE), ('china', TRUE), ('italy', TRUE), ('mexico', TRUE), ('spain', FALSE);点击运行。
在左侧导航菜单中,再次点击数据以显示目标表的数据。确认该表包含所需的数据。
更新 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] 美元。如需了解详情,请点击此处 [URL]。方案 2 包含通话、短信和流量。费用为每天 [XX] 美元。如需了解详情,请点击此处 [URL]。您想添加哪项邮轮计划? |
| 5 | 选项 1 | 知道了。我已将该方案添加到您的账号中。在游轮上,您可能还需要陆地上的网络覆盖。您将在哪个港口停靠? |
| 6 | 意大利 | 您要在那里待几天? |
| 7 | 3 | 好消息!意大利提供免费的陆地覆盖。大功告成!您现在还需要其他方面的帮助吗? |
如果您检查代码,会发现意大利不在硬编码的覆盖目的地列表中。这意味着您的 webhook 已成功连接到数据库,其中确实包含意大利。
问题排查
Webhook 代码包含日志语句。如果您遇到问题,请尝试查看 Cloud Function 的日志。
如果您的函数未连接到数据库,并且您在日志中看到权限错误,则可能需要修复函数使用的默认服务账号的角色。此服务账号的形式为 PROJECT_ID@。您可以通过以下任一方式解决此问题:
如果 IAM 主页面上显示了默认服务账号,请更改该服务账号的权限。Editor 角色可以正常工作,但在生产场景中,您可能需要更精细的角色。
如果 IAM 主页面上未显示默认服务账号,请将该服务账号添加为新的主账号,以授予所需角色。
或者,您也可以使用您创建的服务账号。
更多信息
如需详细了解上述步骤,请参阅: