查询数据库

您的 webhook 目前在 accountBalanceCheck 函数中使用硬编码数据。在本教程的这一步中,您将创建一个 Spanner 数据库,使用余额数据填充该数据库,并更新函数以查询数据库。

项目配置

请务必将 Dialogflow 智能客服人员和数据库都放在同一项目中。这是函数安全访问数据库的最简单方法。此外,您还必须启用 Spanner API。

  1. 在创建数据库之前,请在 Google Cloud 控制台中选择您的项目。

    转到“项目选择器”

  2. 为项目启用 Spanner API。

    启用 Spanner API

创建 Spanner 实例

首次使用 Spanner 时,您必须创建一个实例,用于分配 Spanner 数据库在该实例中使用的资源。

  1. 在 Google Cloud 控制台中,前往 Spanner 实例页面。

    转到 Spanner 实例

  2. 点击创建实例

  3. 对于实例名称,请输入教程实例

  4. 系统会根据实例名称自动输入实例 ID。

  5. 选择配置中,保留默认选项 Regional,然后选择您在创建函数时选择的区域位置

  6. 分配计算容量中,输入 100 个处理单元。这为本教程提供了最低容量。

  7. 点击创建。Google Cloud 控制台将显示您创建的实例的概览页面。

创建 Spanner 数据库

现在您已经有了实例,接下来需要创建数据库。如需创建数据库,请执行以下操作:

  1. 在实例概览页面中,点击创建数据库
  2. 对于数据库名称,请输入 tutorial-database
  3. 选择 Google 标准 SQL 数据库方言。
  4. 点击创建。Google Cloud 控制台将显示您创建的数据库的概览页面。

为数据库创建表

现在,您已经有了数据库,接下来需要为数据库创建表。如需创建表,请执行以下操作:

  1. 在数据库概览页面的“表”部分中,点击创建表
  2. 编写 DDL 语句页面中,输入以下内容:

    CREATE TABLE Checking (
      AccountId INT64,
      Balance INT64,
    ) PRIMARY KEY(AccountId);
    
  3. 点击提交。 Google Cloud 控制台会返回到数据库的概览页面,并且显示架构更新正在进行中。等待更新完成。

  4. 在数据库概览页面的“表”部分中,点击创建表

  5. 编写 DDL 语句页面中,输入以下内容:

    CREATE TABLE Savings (
      AccountId INT64,
      Balance INT64,
    ) PRIMARY KEY(AccountId);
    
  6. 点击提交。 Google Cloud 控制台会返回到数据库的概览页面,并且显示架构更新正在进行中。等待更新完成。

将数据插入表中

现在,您的数据库中已有表,您需要向表中添加数据。如需添加数据,请执行以下操作:

  1. 在数据库概览页面上的表列表中,点击“Checking”表。Google Cloud 控制台会显示表的架构页面。
  2. 在左侧导航菜单中,点击数据以显示表的数据页面。
  3. 点击插入。Google Cloud 控制台会显示表的查询页面,其中包含一个新的查询标签页,其中包含 INSERTSELECT 语句。使用以下代码覆盖这些语句:

    INSERT INTO Checking (AccountId, Balance)
    VALUES(1, 1000),
          (2, 2000);
    
  4. 点击运行

  5. 在左侧导航菜单中,再次点击数据以显示表格的数据。确认表格包含所需的数据。

  6. 点击 tutorial-database: Overview 链接返回数据库概览页面。

  7. 在数据库概览页面上的表列表中,点击“Savings”表。Google Cloud 控制台会显示表的架构页面。

  8. 在左侧导航菜单中,点击数据以显示表的数据页面。

  9. 点击插入。Google Cloud 控制台会显示表的查询页面,其中包含一个新的查询标签页,其中包含 INSERTSELECT 语句。使用以下代码覆盖这些语句:

    INSERT INTO Savings (AccountId, Balance)
    VALUES(1, 10000),
          (2, 20000);
    
  10. 点击运行

  11. 在左侧导航菜单中,再次点击数据以显示表格的数据。确认表格包含所需的数据。

更新 Cloud Function 以查询数据库

Webhook 代码中的 accountBalanceCheck 函数会检查是否已使用用于连接到数据库的信息设置特定环境变量。如果未设置这些环境变量,该函数将使用硬编码的账号余额。

现在,您已设置好数据库,接下来更新 Cloud Function 以设置所需的环境变量:

  1. 打开 Cloud Functions 概览页面。

    前往 Cloud Functions 概览

  2. 点击 tutorial-banking-webhook 函数以进入其详情页面。

  3. 点击修改

  4. 打开运行时、构建和连接设置部分。

  5. 选择运行时标签页。

  6. 在“运行时环境变量”部分中添加以下变量:

    • PROJECT_ID:您的项目 ID
    • SPANNER_INSTANCE_ID:您的 Spanner 实例 ID(可能是 tutorial-instance
    • SPANNER_DATABASE_ID:您的 Spanner 数据库 ID(可能是 tutorial-database
  7. 点击下一步

  8. 点击部署

  9. 等待状态指示器显示函数已成功部署。

测试您的代理

您的客服人员现在可以开始试用了。 点击 Dialogflow 控制台中的测试代理按钮以打开模拟器。尝试与客服人员进行以下对话:

对话回合 代理
1 您好! 您好!感谢您选择 ACME 银行。
2 我想知道我的账号余额 您希望将余额存入哪个账户:储蓄账户还是支票账户?
3 正在检查 您的最新余额为:10.00 美元

如果您检查代码,就会发现 10 美元不是硬编码值。这意味着您的 webhook 已成功连接到数据库,该数据库的余额确实为 10 美元。

问题排查

该 webhook 代码包含日志记录语句。如果您遇到问题,请尝试查看 Cloud Function 的日志

如果您的函数无法连接到数据库,并且您在日志中看到权限错误,则可能需要修正函数使用的默认服务账号的角色。此服务账号的格式为 PROJECT_ID@appspot.gserviceaccount.com。您可以通过以下任一方式解决此问题:

更多信息

如需详细了解上述步骤,请参阅: