您的 Webhook 目前在 cruisePlanCoverage 函数中使用硬编码的数据。在本教程的这一步中,您将创建一个 Spanner 数据库,使用覆盖的目的地填充该数据库,并更新您的函数以查询该数据库。
项目配置
请务必确保 Dialogflow 代理和数据库位于同一项目中。这是让函数安全访问数据库的最简单方式。此外,您还必须启用 Spanner API。
在创建数据库之前,请先从 Google Cloud 控制台中选择您的项目。
为项目启用 Spanner API。
创建 Spanner 实例
首次使用 Spanner 时,您必须创建一个实例,用于分配 Spanner 数据库在该实例中使用的资源。
在 Google Cloud 控制台中,前往 Spanner 实例页面。
点击创建实例。
对于实例名称,请输入教程实例。
系统会根据实例名称自动输入实例 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 表的架构页面。
- 在左侧导航菜单中,点击数据以显示 Destinations 表的数据页面。
点击插入。 Google Cloud 控制台会显示 Destinations 表的查询页面,其中包含一个新的查询标签页,该标签页包含
INSERT和SELECT语句。使用以下语句覆盖这些语句: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@appspot.gserviceaccount.com。您可以通过以下某种方式解决此问题:
如果默认服务账号显示在 IAM 主页面上,请更改该服务账号的权限。 编辑者角色可以满足要求,但在生产环境中,您可能需要更细化的角色。
如果 IAM 主页面上未显示默认服务账号,请通过添加服务账号作为新的正文来授予所需角色。
或者,您也可以使用您创建的服务账号。
更多信息
如需详细了解上述步骤,请参阅:
- 搭配使用 Cloud Spanner 与 Cloud Functions
- 使用 Google Cloud 控制台创建和查询数据库
- Google 标准 SQL 数据定义语言
- Google 标准 SQL 数据操纵语言