您的 webhook 目前在 cruisePlanCoverage
函数中使用硬编码数据。在本教程的这一步中,您将创建一个 Spanner 数据库,将涵盖的目的地填充到其中,并更新函数以查询数据库。
项目配置
请务必将 Dialogflow 智能客服人员和数据库都放在同一项目中。这是函数安全访问数据库的最简单方法。此外,您还必须启用 Spanner API。
在创建数据库之前,请在 Google Cloud 控制台中选择您的项目。
为项目启用 Spanner API。
创建 Spanner 实例
首次使用 Spanner 时,您必须创建一个实例,用于分配 Spanner 数据库在该实例中使用的资源。
在 Google Cloud 控制台中,前往 Spanner 实例页面。
点击创建实例。
对于实例名称,请输入教程实例。
系统会根据实例名称自动输入实例 ID。
在选择配置中,保留默认选项 Regional,然后选择您在创建函数时选择的区域位置。
在分配计算容量中,输入 100 个处理单元。这为本教程提供了最低容量。
点击创建。Google Cloud 控制台将显示您创建的实例的概览页面。
创建 Spanner 数据库
现在您已经有了实例,接下来需要创建数据库。如需创建数据库,请执行以下操作:
- 在实例概览页面中,点击创建数据库。
- 对于数据库名称,请输入 tutorial-database。
- 选择 Google 标准 SQL 数据库方言。
- 点击创建。Google Cloud 控制台将显示您创建的数据库的概览页面。
为数据库创建表
现在您已经有了数据库,接下来需要为数据库创建表。如需创建表,请执行以下操作:
- 在数据库概览页面的“表”部分中,点击创建表。
在编写 DDL 语句页面中,输入以下内容:
CREATE TABLE Destinations ( Destination STRING(1024), Covered BOOL, ) PRIMARY KEY(Destination);
点击提交。 Google Cloud 控制台会返回到数据库的概览页面,并且显示架构更新正在进行中。等待更新完成。
将数据插入到表中
现在,您的数据库中已有表,您需要向该表中添加数据。如需添加数据,请执行以下操作:
- 在数据库概览页面上的表列表中,点击“目标位置”表。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 | Got it.我已将该方案添加到您的账号中。在游轮上航行时,您可能还需要陆地覆盖。您会停靠哪个港口? |
6 | 意大利 | 您要在那里停留几天? |
7 | 3 | 好消息!意大利境内陆地免费覆盖。大功告成!您现在还需要其他方面的帮助吗? |
如果您检查代码,就会发现意大利不在涵盖的目的地的硬编码列表中。这意味着您的 Webhook 已成功连接到数据库,其中包含意大利。
问题排查
该 webhook 代码包含日志记录语句。如果您遇到问题,请尝试查看 Cloud Function 的日志。
如果您的函数无法连接到数据库,并且您在日志中看到权限错误,则可能需要修正函数使用的默认服务账号的角色。此服务账号的格式为 PROJECT_ID@appspot.gserviceaccount.com
。您可以通过以下任一方式解决此问题:
如果 IAM 主页面上显示了默认服务账号,请更改服务账号的权限。编辑者角色可以使用,但在生产环境中,您可能需要更精细的角色。
如果 IAM 主页面上未显示默认服务账号,请将该服务账号添加为新主账号,以授予所需角色。
或者,您也可以使用您创建的服务账号。
更多信息
如需详细了解上述步骤,请参阅:
- 搭配使用 Cloud Spanner 与 Cloud Functions
- 使用 Google Cloud 控制台创建和查询数据库
- Google 标准 SQL 数据定义语言
- Google 标准 SQL 数据操纵语言