您的 webhook 目前在 cruisePlanCoverage
函数中使用硬编码数据。在本教程的这一步骤中
您将创建一个
Spanner
使用涵盖的目标填充数据库
然后更新函数以查询数据库。
项目配置
请务必确保您的 Dialogflow 智能客服人员和数据库位于同一项目中。要让函数 安全地访问数据库 此外,您还必须启用 Spanner API。
在创建数据库之前,请从 Google Cloud 控制台中选择您的项目。
为项目启用 Spanner API。
创建 Spanner 实例
首次使用 Spanner 时, 您必须创建一个实例 后者是指 该实例中 Spanner 数据库使用的唯一资源。
在 Google Cloud 控制台中,转到 Spanner 实例页面。
点击创建实例。
对于实例名称,请输入 Tutorial Instance。
系统会根据实例名称自动输入实例 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 控制台会显示目标表的架构页面。
- 在左侧导航菜单中 点击数据以显示“目标表”表格的数据页面。
点击插入。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 Functions 函数以设置所需的环境变量:
打开 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 Functions 函数的日志。
如果您的函数没有连接到数据库,
并在日志中看到了权限错误
您可能需要修复默认服务账号的角色
您的函数所使用的名称。
此服务账号的形式为
PROJECT_ID@appspot.gserviceaccount.com
。
您可以通过以下任一方式解决此问题:
如果 IAM 主页面上显示了默认服务账号,请更改服务账号的权限。Editor 角色有效。 但在生产场景中,您可能需要更精细的角色
如果 IAM 主页面上未显示默认服务账号,请将该服务账号添加为新主账号,以授予所需角色。
或者,您也可以 使用您创建的服务账号。
更多信息
如需详细了解上述步骤,请参阅:
- 搭配使用 Cloud Spanner 与 Cloud Functions
- 使用 Google Cloud 控制台创建和查询数据库
- Google 标准 SQL 数据定义语言
- Google 标准 SQL 数据操纵语言