您的 webhook 目前在 accountBalanceCheck
函数中使用硬编码数据。在本教程的这一步中,您将创建一个 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 Checking ( AccountId INT64, Balance INT64, ) PRIMARY KEY(AccountId);
点击提交。 Google Cloud 控制台会返回到数据库的概览页面,并且显示架构更新正在进行中。等待更新完成。
在数据库概览页面的“表”部分中,点击创建表。
在编写 DDL 语句页面中,输入以下内容:
CREATE TABLE Savings ( AccountId INT64, Balance INT64, ) PRIMARY KEY(AccountId);
点击提交。 Google Cloud 控制台会返回到数据库的概览页面,并且显示架构更新正在进行中。等待更新完成。
将数据插入表中
现在,您的数据库中已有表,您需要向表中添加数据。如需添加数据,请执行以下操作:
- 在数据库概览页面上的表列表中,点击“Checking”表。Google Cloud 控制台会显示表的架构页面。
- 在左侧导航菜单中,点击数据以显示表的数据页面。
点击插入。Google Cloud 控制台会显示表的查询页面,其中包含一个新的查询标签页,其中包含
INSERT
和SELECT
语句。使用以下代码覆盖这些语句:INSERT INTO Checking (AccountId, Balance) VALUES(1, 1000), (2, 2000);
点击运行。
在左侧导航菜单中,再次点击数据以显示表格的数据。确认表格包含所需的数据。
点击 tutorial-database: Overview 链接返回数据库概览页面。
在数据库概览页面上的表列表中,点击“Savings”表。Google Cloud 控制台会显示表的架构页面。
在左侧导航菜单中,点击数据以显示表的数据页面。
点击插入。Google Cloud 控制台会显示表的查询页面,其中包含一个新的查询标签页,其中包含
INSERT
和SELECT
语句。使用以下代码覆盖这些语句:INSERT INTO Savings (AccountId, Balance) VALUES(1, 10000), (2, 20000);
点击运行。
在左侧导航菜单中,再次点击数据以显示表格的数据。确认表格包含所需的数据。
更新 Cloud Function 以查询数据库
Webhook 代码中的 accountBalanceCheck
函数会检查是否已使用用于连接到数据库的信息设置特定环境变量。如果未设置这些环境变量,该函数将使用硬编码的账号余额。
现在,您已设置好数据库,接下来更新 Cloud Function 以设置所需的环境变量:
打开 Cloud Functions 概览页面。
点击 tutorial-banking-webhook 函数以进入其详情页面。
点击修改。
打开运行时、构建和连接设置部分。
选择运行时标签页。
在“运行时环境变量”部分中添加以下变量:
PROJECT_ID
:您的项目 IDSPANNER_INSTANCE_ID
:您的 Spanner 实例 ID(可能是tutorial-instance
)SPANNER_DATABASE_ID
:您的 Spanner 数据库 ID(可能是tutorial-database
)
点击下一步。
点击部署。
等待状态指示器显示函数已成功部署。
测试您的代理
您的客服人员现在可以开始试用了。 点击 Dialogflow 控制台中的测试代理按钮以打开模拟器。尝试与客服人员进行以下对话:
对话回合 | 您 | 代理 |
---|---|---|
1 | 您好! | 您好!感谢您选择 ACME 银行。 |
2 | 我想知道我的账号余额 | 您希望将余额存入哪个账户:储蓄账户还是支票账户? |
3 | 正在检查 | 您的最新余额为:10.00 美元 |
如果您检查代码,就会发现 10 美元不是硬编码值。这意味着您的 webhook 已成功连接到数据库,该数据库的余额确实为 10 美元。
问题排查
该 webhook 代码包含日志记录语句。如果您遇到问题,请尝试查看 Cloud Function 的日志。
如果您的函数无法连接到数据库,并且您在日志中看到权限错误,则可能需要修正函数使用的默认服务账号的角色。此服务账号的格式为 PROJECT_ID@appspot.gserviceaccount.com
。您可以通过以下任一方式解决此问题:
如果 IAM 主页面上显示了默认服务账号,请更改服务账号的权限。编辑者角色可以使用,但在生产环境中,您可能需要更精细的角色。
如果 IAM 主页面上未显示默认服务账号,请将该服务账号添加为新主账号,以授予所需角色。
或者,您也可以使用您创建的服务账号。
更多信息
如需详细了解上述步骤,请参阅:
- 搭配使用 Cloud Spanner 与 Cloud Functions
- 使用 Google Cloud 控制台创建和查询数据库
- Google 标准 SQL 数据定义语言
- Google 标准 SQL 数据操纵语言