查詢資料庫

您的 webhook 目前會在 cruisePlanCoverage 函式中使用硬式編碼資料。在本教學課程的這個步驟中,您將建立 Spanner 資料庫,並在其中填入涵蓋的目的地,然後更新函式以查詢資料庫。

專案設定

請務必將 Dialogflow 服務專員和資料庫放在同一個專案中。這是讓函式安全存取資料庫最簡單的方式。此外,您必須啟用 Spanner API。

  1. 建立資料庫前,請先從 Google Cloud 控制台選取專案。

    前往專案選取器

  2. 為專案啟用 Spanner API。

    啟用 Spanner API

可建立 Spanner 執行個體

首次使用 Spanner 時,您必須建立執行個體,這是 Spanner 資料庫會使用的資源分配單位。

  1. 前往 Google Cloud 控制台的「Spanner Instances」(Spanner 執行個體) 頁面。

    前往 Spanner 執行個體

  2. 點選「建立執行個體」

  3. 在執行個體名稱一欄輸入「Tutorial Instance」

  4. 系統會根據執行個體名稱自動輸入執行個體 ID。

  5. 在「選擇設定」中,保留預設的「區域」選項,並選取建立函式時選擇的區域位置

  6. 在「分配運算能力」中,輸入 100 個處理單元。這可為教學課程提供最少的容量。

  7. 點選「建立」。 Google Cloud 控制台會顯示您建立的執行個體的「總覽」頁面。

可建立 Spanner 資料庫

有了執行個體後,您需要建立資料庫。如要建立資料庫,請按照下列步驟操作:

  1. 在執行個體「總覽」頁面中,按一下「建立資料庫」
  2. 在資料庫名稱一欄輸入 tutorial-database
  3. 選取 Google 標準 SQL 資料庫方言。
  4. 點選「建立」。 Google Cloud 控制台會顯示您建立的資料庫的「總覽」頁面。

為資料庫建立資料表

資料庫建立完成後,您需要為資料庫建立資料表。如要建立資料表,請按照下列步驟操作:

  1. 在資料庫「總覽」頁面的「Tables」(資料表) 部分,按一下「Create table」(建立資料表)
  2. 在「Write DDL statements」頁面中輸入:

    CREATE TABLE Destinations (
      Destination STRING(1024),
      Covered BOOL,
    ) PRIMARY KEY(Destination);
    
  3. 按一下「提交」。 Google Cloud 控制台會返回資料庫「總覽」頁面,並顯示正在進行結構定義更新。等待更新完成。

將資料插入資料表

資料庫已有資料表,因此您需要在資料表中新增資料。如要新增資料,請按照下列步驟操作:

  1. 在資料庫「總覽」頁面的資料表清單中,按一下「Destinations」(目的地) 資料表。 Google Cloud 控制台會顯示「Destinations」(目的地) 資料表的「Schema」頁面。
  2. 在左側導覽選單中,按一下「資料」,即可顯示「目的地」表格的「資料」頁面。
  3. 按一下「插入」。 Google Cloud 控制台會顯示「Destinations」表格的「Query」頁面,其中包含包含 INSERTSELECT 陳述式的新查詢分頁。請使用下列內容覆寫這些陳述式:

    INSERT INTO Destinations (Destination, Covered)
    VALUES('anguilla', TRUE),
          ('canada', TRUE),
          ('china', TRUE),
          ('italy', TRUE),
          ('mexico', TRUE),
          ('spain', FALSE);
    
  4. 按一下「執行」

  5. 在左側導覽選單中,再次按一下「資料」,即可顯示目的地資料表的資料。確認表格是否包含所需資料。

更新 Cloud 函式以查詢資料庫

webhook 程式碼中的 cruisePlanCoverage 函式會檢查是否已設定特定環境變數,以便連線至資料庫。如果未設定這些環境變數,函式會使用硬式編碼的目的地清單。

資料庫設定完成後,請更新 Cloud 函式,設定必要的環境變數:

  1. 開啟 Cloud Functions 總覽頁面。

    前往 Cloud Functions 總覽

  2. 按一下 tutorial-telecommunications-webhook 函式,前往其詳細資料頁面。

  3. 按一下 [編輯]

  4. 開啟「執行階段、建構作業和連線設定」部分。

  5. 選取「Runtime」分頁標籤。

  6. 在「Runtime environment variables」(執行階段環境變數) 部分新增下列變數:

    • PROJECT_ID:您的專案 ID
    • SPANNER_INSTANCE_ID:您的 Spanner 執行個體 ID (可能是 tutorial-instance)
    • SPANNER_DATABASE_ID:您的 Spanner 資料庫 ID (可能是 tutorial-database)
  7. 點按「Next」

  8. 按一下 [Deploy] (部署)

  9. 等待狀態指標顯示函式已成功部署。

測試服務專員

服務專員現已準備就緒,可以開始試用。按一下 Dialogflow 主控台的「Test Agent」按鈕,開啟模擬器。請嘗試與代理人進行以下對話:

對話輪次 虛擬服務專員
1 您好 您好,我是虛擬電信服務專員。我可以協助你解決帳單和行程相關問題、排解問題,以及新增旅遊和郵輪行程。今天需要什麼協助嗎?
2 我想新增郵輪行程 我來幫你看看。你的電話號碼是?
3 123-123-1234 你的郵輪行程有幾天?
4 7 選項 1 包含通話和簡訊。費用為 $[XX] 美元/天。詳情請參閱這裡 [網址]。選項 2 包含通話、簡訊和數據。費用為 $[XX] 美元/天。詳情請參閱這裡 [網址]。請問要新增哪個郵輪行程?
5 選項 1 好的,我已將該方案新增至你的帳戶。在郵輪行程中,您可能也需要在陸地上使用網路。你會停靠哪個港口?
6 義大利 你會在那裡停留幾天?
7 3 好消息!義大利提供免費的陸路運送服務。完成所有設定後,今天還有其他問題需要協助嗎?

查看程式碼後,您會發現義大利並未列在硬式編碼的涵蓋目的地清單中。這表示 webhook 已成功連結至資料庫,其中包含義大利。

疑難排解

Webhook 程式碼包含記錄陳述式。如果遇到問題,請嘗試查看 Cloud Functions 的記錄。

如果函式無法連線至資料庫,且您在記錄中看到權限錯誤,可能需要修正函式所使用的預設服務帳戶的角色。這個服務帳戶的格式為 PROJECT_ID@appspot.gserviceaccount.com。您可以透過下列任一方式修正這個問題:

更多資訊

如要進一步瞭解上述步驟,請參閱: