您的 Webhook 目前在 accountBalanceCheck 函式中使用硬式編碼資料。在本教學課程的這個步驟中,您將建立 Spanner 資料庫、填入餘額資料,並更新函式來查詢資料庫。
專案設定
請務必將 Dialogflow 代理和資料庫放在同一個專案中。這是讓函式安全存取資料庫最簡單的方法。此外,您必須啟用 Spanner API。
建立資料庫前,請先在 Google Cloud 控制台選取專案。
為專案啟用 Spanner API。
建立 Spanner 執行個體
首次使用 Spanner 時,必須建立執行個體,也就是 Spanner 資料庫所用的資源分配單位。
前往 Google Cloud 控制台的「Spanner Instances」(Spanner 執行個體) 頁面。
點選「建立執行個體」。
在執行個體名稱中,輸入 Tutorial Instance。
系統會根據執行個體名稱自動輸入執行個體 ID。
在「Choose your configuration」(選擇設定) 中,保留預設選項「Regional」(區域),並選取建立函式時選擇的區域位置。
在「Allocate compute capacity」(分配運算能力) 中,輸入 100 個處理單元。這會為教學課程提供最低容量。
點選「建立」。 Google Cloud 控制台會顯示您建立的執行個體「Overview」(總覽) 頁面。
可建立 Spanner 資料庫
建立執行個體後,您需要建立資料庫。如要建立資料庫,請按照下列步驟操作:
- 在執行個體的「總覽」頁面,點選「建立資料庫」。
- 資料庫名稱請輸入 tutorial-database。
- 選取「Google 標準 SQL」資料庫方言。
- 點選「建立」。 Google Cloud 控制台會顯示您建立的資料庫「Overview」(總覽) 頁面。
為資料庫建立資料表
現在您已有資料庫,需要為資料庫建立資料表。如何建立資料表:
- 在資料庫「Overview」(總覽) 頁面的「Tables」(資料表) 部分,按一下「Create table」(建立資料表)。
在「Write DDL statements」(寫入 DDL 陳述式) 頁面中,輸入下列內容:
CREATE TABLE Checking ( AccountId INT64, Balance INT64, ) PRIMARY KEY(AccountId);按一下「提交」。 Google Cloud 控制台會返回資料庫「Overview」(總覽) 頁面,並顯示「Schema updates」(結構定義更新) 正在進行中。等待更新完成。
在資料庫「Overview」(總覽) 頁面的「Tables」(資料表) 部分,按一下「Create table」(建立資料表)。
在「Write DDL statements」(寫入 DDL 陳述式) 頁面中,輸入下列內容:
CREATE TABLE Savings ( AccountId INT64, Balance INT64, ) PRIMARY KEY(AccountId);按一下「提交」。 Google Cloud 控制台會返回資料庫「Overview」(總覽) 頁面,並顯示「Schema updates」(結構定義更新) 正在進行中。等待更新完成。
將資料插入資料表
資料庫已有資料表,接下來要新增資料。如要新增資料,請按照下列步驟操作:
- 在資料庫「Overview」(總覽) 頁面的資料表清單中,按一下「Checking」資料表。 Google Cloud 控制台會顯示資料表的「Schema」(結構定義) 頁面。
- 在左側導覽選單中,按一下「Data」(資料),顯示資料表的「Data」(資料) 頁面。
按一下「插入」。 Google Cloud 控制台會顯示資料表的「Query」(查詢) 頁面,其中包含
INSERT和SELECT陳述式的新查詢分頁。將這些陳述式覆寫為下列內容:INSERT INTO Checking (AccountId, Balance) VALUES(1, 1000), (2, 2000);按一下「執行」。
再次點選左側導覽選單中的「Data」,即可顯示資料表的資料。確認資料表包含所需資料。
按一下「tutorial-database: Overview」(教學課程資料庫:總覽) 連結,返回資料庫總覽頁面。
在資料庫「Overview」(總覽) 頁面的資料表清單中,按一下「Savings」資料表。 Google Cloud 控制台會顯示資料表的「Schema」(結構定義) 頁面。
在左側導覽選單中,按一下「Data」(資料),顯示資料表的「Data」(資料) 頁面。
按一下「插入」。 Google Cloud 控制台會顯示資料表的「Query」(查詢) 頁面,其中包含
INSERT和SELECT陳述式的新查詢分頁。將這些陳述式覆寫為下列內容:INSERT INTO Savings (AccountId, Balance) VALUES(1, 10000), (2, 20000);按一下「執行」。
再次點選左側導覽選單中的「Data」,即可顯示資料表的資料。確認資料表包含所需資料。
更新 Cloud 函式來查詢資料庫
Webhook 程式碼中的 accountBalanceCheck 函式會檢查是否已設定特定環境變數,並提供連線至資料庫的資訊。如果未設定這些環境變數,函式會使用硬式編碼的帳戶餘額。
資料庫設定完成後,請更新 Cloud 函式,設定必要的環境變數:
開啟 Cloud Functions 總覽頁面。
按一下「tutorial-banking-webhook」函式,前往詳細資料頁面。
按一下 [編輯]。
開啟「Runtime, build and connections settings」(執行階段、建構和連線設定) 部分。
選取「Runtime」(執行階段) 分頁標籤。
在「執行階段環境變數」部分新增下列變數:
PROJECT_ID:專案 IDSPANNER_INSTANCE_ID:Spanner 執行個體 ID (可能是tutorial-instance)SPANNER_DATABASE_ID:您的 Spanner 資料庫 ID (可能是tutorial-database)
點選「下一步」。
點選「Deploy」(部署)。
等待狀態指標顯示函式已成功部署。
測試代理
現在可以試用代理了。 按一下 Dialogflow 控制台中的「Test Agent」(測試代理) 按鈕,開啟模擬器。嘗試與代理進行以下對話:
| 對話回合 | 您 | 代理 |
|---|---|---|
| 1 | 你好 | 你好,感謝你選擇 ACME Bank。 |
| 2 | 我想知道帳戶餘額 | 你想查詢哪個帳戶的餘額:儲蓄帳戶還是支票帳戶? |
| 3 | 檢查中 | 最新餘額:$10.00 美元 |
如果查看程式碼,會發現 $10 不是硬式編碼值。這表示 Webhook 已成功連線至資料庫,且資料庫中的餘額為 $10 美元。
疑難排解
Webhook 程式碼包含記錄陳述式。如果發生問題,請嘗試查看 Cloud 函式的記錄。
如果函式未連線至資料庫,且記錄中顯示權限錯誤,您可能需要修正函式所用預設服務帳戶的角色。這個服務帳戶的格式為 PROJECT_ID@。您可以透過下列任一方式修正這個問題:
如果 IAM 主頁面顯示預設服務帳戶,請變更服務帳戶的權限。編輯者角色可以運作,但在實際工作環境中,您可能需要更精細的角色。
如果 IAM 主頁面未顯示預設服務帳戶,請新增服務帳戶做為新主體,授予必要角色。
或者,您也可以使用自行建立的服務帳戶。
更多資訊
如要進一步瞭解上述步驟,請參閱: