疑難排解

為代理啟用 Cloud Logging

為代理程式啟用 Cloud Logging。這對於擷取資料及診斷實際對話中的問題至關重要。

收集對話 ID

如果發生非預期行為,請收集 Dialogflow 對話 ID。這些 ID 位於對話記錄中,可追蹤對話的執行路徑,並檢查特定互動。

API 呼叫遭拒

問題

收到 API 呼叫的 PERMISSION_DENIED 回應。

解決方案

請確認您已正確設定 (Dialogflow CXDialogflow ES) 驗證和角色。請特別注意,請務必完成以下操作:

  • 已建立服務帳戶,且未誤刪。
  • 為服務帳戶提供角色,授予呼叫所選方法的權限。
  • 已下載服務帳戶私密金鑰檔案。
  • GOOGLE_APPLICATION_CREDENTIALS 環境變數設為私密金鑰檔案。

API 呼叫提及不明專案

問題

收到 API 呼叫的錯誤訊息。Dialogflow API has not been used in project 32555940559

解決方案

請確認你已完成下列事項:

  • 設定 GOOGLE_APPLICATION_CREDENTIALS 環境變數 (請參閱 PERMISSION_DENIED)。
  • 提供給 API 呼叫的專案 ID 正確無誤。

API 呼叫發生驗證憑證無效錯誤

問題

收到 API 呼叫的回應。Request had invalid authentication credentials. Expected OAuth 2 access token, login cookie or other valid authentication credential.

解決方案

這可能是因為您使用用戶端程式庫手動建立憑證時,指定了非預設區域。如需相關指引,請參閱下列文章:

API 呼叫回應要求切換至其他主機

問題

收到 API 呼叫的 Please switch to 'REGION-dialogflow.googleapis.com' to access resources located in 'REGION' 回應,其中 REGION 是特定區域 ID。

解決方案

如果您在要求中指定區域,但未指定端點,就會發生這種情況。如需相關指引,請參閱下列文章:

API 呼叫回應缺少欄位

問題

API 回應缺少部分欄位。

解決方案

如果您預期 API 回應中的特定欄位會是數值,但傳回值為 0 時,該欄位可能不會出現在回覆中。

如要進一步瞭解預設值行為 (包括非數值),請參閱:

由於有防刪除鎖定,因此無法刪除專案

問題

嘗試刪除 Google Cloud 專案時,您會收到通知,指出專案有留置權,因此無法刪除,且其中一項留置權與 Dialogflow ES 相關。

解決方案

  1. 請確認您不再需要與專案相關聯的 Dialogflow ES 虛擬服務專員。如果收到代理程式不存在的通知,表示該代理程式已遭刪除。

    Dialogflow ES 主控台

    開啟 https://dialogflow.cloud.google.com/#/agent/project-id/intents

    請注意,這個連結與 Google Cloud 專案刪除對話方塊中的連結不同。

    Dialogflow API

    使用 agent 類型的 search 方法。

  2. 取得留置權名稱。

    gcloud

    如要列出專案的留置權,請使用 gcloud alpha resource-manager liens list 指令,詳情請參閱「列出專案的留置權」說明文件。

    API Explorer

    在「Method: liens.list」(方法:liens.list) 頁面使用「Try this API」(試用這個 API) 面板:

    • 按照參數說明中的建議,填寫 parent 欄位。
    • 點選「Execute」
  3. 刪除防刪除鎖定。

    gcloud

    如要移除防刪除鎖定,請使用 gcloud alpha resource-manager liens delete LIEN_NAME 指令,詳情請參閱「移除專案的防刪除鎖定」說明文件。

    API Explorer

    在「Method: liens.delete」頁面使用「Try this API」面板:

    • 在「name」欄位中填入您在步驟 2 中取得的防刪除鎖定名稱。
    • 點選「Execute」
  4. 關閉專案。

Dialogflow CX 網頁服務掛鉤失敗,並顯示逾時錯誤

問題

從 Dialogflow CX 呼叫的 Webhook 可能會失敗,並顯示以下錯誤訊息:

Webhook call failed. Error: DEADLINE_EXCEEDED

這可能是因為 Webhook 呼叫超過 Webhook 逾時限制。以下是 Webhook 呼叫可能超過逾時限制的原因:

  • 嘗試觸發不存在的意圖。
  • Webhook 後端 (例如 Cloud Functions) 的冷啟動問題。
  • Webhook 會呼叫其他服務,導致回應時間變長。
  • 代理程式與 Webhook 後端之間沒有連線 (例如負載平衡器設定錯誤)。
  • 機構政策禁止執行輸入流量或 Dialogflow 方法。

解決方法

Webhook 的預設逾時上限為 5 秒。您可以建立或編輯 Webhook 資源,藉此提高 Webhook 的逾時限制,讓 Webhook 有更多時間回應。

控制台無法設定專案

問題

使用控制台建立代理程式時,收到 Failed to set up GCP project 錯誤。

解決方案

您可能沒有建立專案的權限。 Google Cloud 確認是否可以直接從控制台建立 Google Cloud 專案。如果無法建立專案,請按照錯誤訊息中的建議操作。

回覆中顯示工作階段參數參照

問題

Dialogflow 傳回的回應包含參數參照,而非參數值。例如:
Hello, $session.params.customer_name

如果系統在目前工作階段中找不到參數,或參數的使用方式不符合其類型,系統就不會解析參數,而是顯示參數參照。

解決方案

如果使用的參數未納入對話、有錯字,或與使用的類型不同,就可能會出現這個問題。

如果未啟用 API,控制台就無法建立代理程式

問題

使用控制台建立代理程式時發生錯誤。Dialogflow API has not been enabled for the project. Code: FAILED_PRECONDITION

解決方案

按照設定步驟啟用 Dialogflow API。

嘗試從機構帳戶存取控制台時,收到服務錯誤訊息

問題

嘗試從機構帳戶存取控制台時,收到 You don't have access to this service 錯誤訊息。

解決方案

請與貴機構的系統管理員聯絡,確認貴機構的設定允許存取控制台。否則,請檢查您從其他機構遷移的帳戶是否已遭 Google 標示為受限。如果貴機構的其他使用者可以存取控制台,但您無法存取,這很可能就是問題所在。

或者,您也可以向支援團隊尋求協助。

缺少流程,因此無法以 JSON 格式匯出代理程式

問題

代理程式以原始位元組形式匯出時成功,但以 JSON 格式匯出時失敗,並顯示類似以下的錯誤訊息:

Flow 'projects/PROJECT_ID/locations/LOCATION_ID/agents/AGENT_ID/flows/FLOW_ID' does not exist
in the agent

如果測試案例參照的流程已刪除,就會發生這個問題。

解決方案

如要解決這個問題,請找出未使用的測試案例,確認錯誤訊息中參照的流程是否用於任何測試案例,然後刪除確認的測試案例。

電話閘道連線

問題

使用電話閘道時,收到忙線訊號或通話中斷。

解決方案

這項功能設有配額與限制。如果收到忙線訊號或通話中斷,表示可能已超過配額

嘗試建立新電話號碼時發生 RESOURCE_EXHAUSTED 錯誤

問題

在 Dialogflow CX、Dialogflow ES 或 Agent Assist 中嘗試建立新電話號碼時,系統會傳回 RESOURCE_EXHAUSTED 錯誤。

解決方案

這個錯誤表示您已超出每個專案的電話號碼上限。如要建立新的電話號碼,請刪除與專案相關聯的未使用電話號碼,直到低於上限為止。

如果您在 Dialogflow CX Phone GatewayDialogflow ES Phone Gateway 中建立電話號碼,可以在主控台中刪除。請注意,刪除代理程式時,如果沒有一併刪除電話號碼,與該代理程式相關聯的電話號碼就不會刪除。

或者,您也可以按照下列步驟使用 API。

步驟 1:找出與專案相關聯的所有電話號碼

如要找出與專案相關聯的電話號碼,請針對可能已建立電話號碼的所有區域,使用 projects.phoneNumbers/listprojects.locations.phoneNumbers.list API 方法。

  • 如為 global 區域,請使用下列指令:

    curl -X GET \
    -H "Authorization: Bearer "$(gcloud auth print-access-token) \
    -H "X-Goog-User-Project: PROJECT_ID" \
    -H "Content-Type: application/json; charset=utf-8" \
    https://dialogflow.googleapis.com/v2beta1/projects/PROJECT_ID/locations/global/phoneNumbers
    
  • 如果是其他區域,您需要在兩個位置指定區域:

    curl -X GET \
    -H "Authorization: Bearer "$(gcloud auth print-access-token) \
    -H "X-Goog-User-Project: PROJECT_ID" \
    -H "Content-Type: application/json; charset=utf-8" \
    https://REGION_ID-dialogflow.googleapis.com/v2beta1/projects/PROJECT_ID/locations/REGION_ID/phoneNumbers
    

步驟 2:(選用) 找出與對話設定檔相關聯的代理程式

透過對話設定檔取得與電話號碼相關聯的 Dialogflow CX 服務專員 ID,有助於判斷服務專員是否仍在使用中,以及是否仍需要該電話號碼。方法是使用 projects.conversationProfiles/get API 方法。您可以在步驟 1 中執行的指令回覆中找到對話設定檔 ID。

  • 如為 global 區域,請使用下列指令:

    curl -X GET \
    -H "Authorization: Bearer "$(gcloud auth print-access-token) \
    -H "X-Goog-User-Project: PROJECT_ID" \
    -H "Content-Type: application/json; charset=utf-8" \
    https://dialogflow.googleapis.com/v2beta1/projects/PROJECT_ID/locations/global/conversationProfiles/CONVERSATION_PROFILE_ID
    
  • 如為其他區域,請在兩個位置指定區域:

    curl -X GET \
    -H "Authorization: Bearer "$(gcloud auth print-access-token) \
    -H "X-Goog-User-Project: PROJECT_ID" \
    -H "Content-Type: application/json; charset=utf-8" \
    https://REGION_ID-dialogflow.googleapis.com/v2beta1/projects/PROJECT_ID/locations/REGION_ID/conversationProfiles/CONVERSATION_PROFILE_ID
    

在 Dialogflow CX 控制台的「View all agents」頁面,使用「Search」選項依 ID 尋找服務專員。

如果是 Dialogflow ES,一個專案最多只能與五個代理程式建立關聯,且一個 Dialogflow ES 代理程式只能與一個電話號碼建立關聯。因此,您可以透過 https://dialogflow.cloud.google.com/#/editAgent/PROJECT_ID/intents,在 Dialogflow ES 控制台中開啟代理程式。

如果找不到代理人,但確定不再需要該電話號碼,仍可刪除。

步驟 3:刪除未使用的電話號碼

如要刪除不再需要的電話號碼,請使用 projects.phoneNumbers/deleteprojects.locations.phoneNumbers.delete API 方法。您可以在步驟 1 中執行的指令回覆中,找到電話號碼 ID。

  • 如為 global 區域,請使用下列指令:

    curl -X DELETE \
        -H "Authorization: Bearer "$(gcloud auth print-access-token) \
        -H "X-Goog-User-Project: PROJECT_ID" \
        -H "Content-Type: application/json; charset=utf-8" \
        https://dialogflow.googleapis.com/v2beta1/PHONE_NUMBER_ID
    
  • 如為其他區域,請指定區域:

    curl -X DELETE \
        -H "Authorization: Bearer "$(gcloud auth print-access-token) \
        -H "X-Goog-User-Project: PROJECT_ID" \
        -H "Content-Type: application/json; charset=utf-8" \
        https://REGION_ID-dialogflow.googleapis.com/v2beta1/PHONE_NUMBER_ID
    

Dialogflow CX Messenger 沒有回應

問題

Dialogflow CX Messenger 互動沒有服務專員回應。

解決方案

如果沒有收到 Dialogflow CX Messenger 的任何回覆,請確認專案已啟用帳單功能,且專案已啟用 Dialogflow API。請參閱設定操作說明。

參數值相符,但不是實體同義字

問題

  • 一般情況:即使與參數相應的實體不含相符值做為同義字,系統仍會在執行階段擷取參數值。
  • 更具體的案例:從實體刪除同義詞並重新訓練代理程式後,系統仍會將該同義詞擷取為這個實體的參數值。

解決方案

  1. 使用「搜尋」選項,檢查代理程式中是否可能存在相符值 (做為隱含實體) (Dialogflow CXDialogflow ES)。找出所有含有這個參數和實體的註解意圖。
  2. 修正註解,確保這些註解都不會套用至代表不當相符值的文字。
  3. 在執行階段測試代理程式,確認問題是否已解決。
  4. 如果問題仍未解決,請確認進階實體設定中的「自動擴展」和「模糊比對」選項均未勾選,然後再次測試代理程式。

語音機器人略過部分回覆

問題

如果服務專員同時支援文字和語音,語音機器人不會朗讀部分回覆。

解決方案

如果為特定對話輪次定義了至少一個輸出音訊文字回應,請確保在該對話輪次的所有步驟中,代理程式的完成和 Webhook 回應都一律提供輸出音訊文字選項。

SSML 標記未生效

問題

代理程式履行中定義了 SSML 標記,但語音機器人讀取合成文字時,沒有套用 SSML 效果。

解決方案

請確認 Dialogflow 主控台中的每個回覆資訊卡,或 API/Webhook 提供的每個回覆訊息物件,都只包含一組 <speak></speak>

語音虛擬服務專員將數字 0 唸成字母 O

問題

如果是專為語音設計的代理程式,語音代理程式會將零讀成字母 O,而不是數字 0。

解決方案

  1. 將「Agent says」(虛擬服務專員說) 變更為使用「Output audio text dialogue option」(輸出音訊文字對話選項)
  2. 勾選 SSML 核取方塊。
  3. 使用 SSML 標記包圍文字:
      <speak>
        <say-as interpret-as='verbatim'>YOUR_TEXT</say-as>
      </speak>

舉例來說,信用卡號碼中的零會唸成「零」:

   <speak>
      <say-as interpret-as='verbatim'>5177 7702 8500 4578</say-as>
   </speak>

合成發音不符預期

問題

合成的服務專員回覆發音 (例如專有名詞、縮寫) 不如預期。

解決方案

如要確保系統能正確發音不常見的字詞,請在代理程式回覆中使用 SSML say-asphoneme 標記。

已達允許的狀態機器執行步驟上限

問題

將執行階段要求傳送至服務專員時,在 Dialogflow CX 控制台或記錄中收到下列錯誤訊息:

You have reached the maximum allowed state machine execution steps. You may consider simplifying your agent/flow design. Current execution steps are: [<array_of_objects>]

錯誤訊息中的陣列包含要求執行步驟的清單。如果步數過多,清單可能不完整。

解決方案

這則錯誤訊息通常表示單一對話輪的轉移次數過多。常見的例子是轉換至同一網頁,這會建立無限迴圈。

如要解決這個問題,請按照下列步驟操作:

  1. 從錯誤訊息複製 JSON 陣列。
  2. (選用) 將複製的陣列格式化為美觀的 JSON,方便閱讀。 如果錯誤訊息遭到截斷,請搜尋最後一個「Step」物件,刪除不完整的步驟物件和前面的半形逗號,然後在驗證及美化 JSON 之前,新增右方括號。
  3. 查看每個步驟的 "TriggeredTransitionRouteId""TargetPage" 值。如果是無限迴圈,大部分步驟的 "TriggeredTransitionRouteId""TargetPage" 欄位都會重複值。
  4. 修改代理程式設計,移除無限迴圈轉換,或減少單一對話回合的轉換次數。

規則運算式比對過於廣泛

問題

建立正則運算式實體 (Dialogflow CXDialogflow ES) 時收到錯誤 Regular expression match is too broad

解決方案

請考慮下列做法:

  • 在規則運算式中使用 ^$,分別表示文字的開頭和結尾。
  • 使用具有必要參數的 Regexp 實體 (Dialogflow CXDialogflow ES)。
  • 定義必要參數提示,要求使用者只提供實體值,不要加上任何周圍的字詞。

語音辨識插入非英數的字元

問題

嘗試比對英數字元時,語音辨識器會插入非英數字元 (空格、破折號等),導致實體不相符。

解決方案

  1. 如果使用系統實體比對數字,建議改用 regexp 實體 (Dialogflow CXDialogflow ES)。
  2. 請按照「regexp 實體無法準確辨識英數字」一節中的所有建議操作。
  3. 如要使用電話整合功能比對號碼,除了語音辨識功能外,也可以考慮使用 DTMF 選項。

語音輸入的轉錄稿空白

問題

語音輸入的 Dialogflow 回應會傳回空白轉錄稿。系統會將要求視為沒有輸入內容或沒有相符項目。

解決方案

聆聽音訊錄音內容,確認是否含有語音。

確認已在虛擬服務專員設定中啟用語音適應功能 (Dialogflow CXDialogflow ES)。

如果啟用語音適應功能後問題仍未解決,請在非正式環境中實驗下列語音模型,並使用可產生最佳結果的模型:

  • latest_short
  • phone_call
  • command_and_search

如要瞭解支援的語音模型,請參閱 Speech-to-Text 支援的語言說明文件。

指定語音模型的方式,取決於您如何設定與 Dialogflow 的互動。

  • 如果是 API 要求,請在 InputAudioConfig(Dialogflow CXDialogflow ES) 的 model 欄位中提供模型名稱。

  • 如果您使用 Phone Gateway (Dialogflow CXDialogflow ES),可以更新對話設定檔中的語音模型。啟用整合功能時,Dialogflow 會建立對話設定檔:

    1. 擷取對話設定檔 ID:

      • 使用 conversationProfiles.list 方法,擷取連結至專案的所有對話設定檔。
      • 找出要更新的對話設定檔,然後複製name欄位值。

      如果是 Dialogflow CX Phone Gateway,對話設定檔顯示名稱會顯示在整合設定中。如果是 Dialogflow ES Phone Gateway,對應的對話設定檔顯示名稱就是啟用整合功能的代理程式名稱。

      如果有多個對話設定檔使用相同的顯示名稱,請從 conversationProfiles.list 方法回應的 automatedAgentConfig 欄位中驗證代理程式 ID。

    2. 使用 conversationProfiles.patch API 方法更新 SpeechToTextConfig 中的 model 欄位。

  • 如果是 Contact Center AI 整合,請洽詢電話整合商,瞭解如何更新整合或個別要求的語音模型。

瞭解應對手冊迴圈錯誤

問題

連結應對手冊時發生錯誤 Playbook <playbookID> caused loop in playbook routes

解決方案

如果您嘗試將路徑導向「上層」劇本 (直接或間接呼叫目前劇本的劇本),可能會發生迴圈。如要修正這個問題,請確認劇本路徑是單向,且不會在同一條對話路徑中返回父項劇本。

比較代理程式版本時,出現空白畫面錯誤「檔案大小超過 2 MB」

問題

嘗試比較兩個不同代理程式版本時,畫面會空白,並顯示以下錯誤訊息:

File size exceeds 2MB

這是因為其中一個檔案超過 2 MB。

解決方案

如要比較代理程式版本,但其中一個檔案的大小超過 2 MB,建議使用 API 方法 compareVersion

規則運算式實體無法準確辨識英數語音

問題

收到語音輸入的英數字元轉錄稿不正確,這些英數字元設計為與正則運算式實體 (Dialogflow CXDialogflow ES) 相符。

解決方案

  1. 確認已在虛擬服務專員設定中啟用語音適應功能 (Dialogflow CXDialogflow ES)。
  2. 請確認至少有一個實體項目符合所有規則運算式項目的規定 (Dialogflow CXDialogflow ES)。
  3. 如為特定模式,請使用最明確的規則運算式。舉例來說,如果英數字元開頭為兩個字母,後面接著五個數字,請使用 [a-zA-Z]{2}\d{5},而非 [a-zA-Z0-9]{7}
  4. 請確認您的 Regexp 實體允許比對語音辨識器可能插入的非英數字元 (空格、破折號等)。如要符合這份清單中的規定 2,請建立多個實體項目:一個項目用於滿足這份清單的規定 2,另一個項目則用於處理非英數字元。舉例來說,如要比對五位數,並允許非英數字元:
     \d{5}
     (\d[^a-zA-Z0-9]*){5}
    
  5. 請確認虛擬服務專員符合參數定義規定 (Dialogflow CXDialogflow ES)。

    Dialogflow CX 範例

    Dialogflow CX 中的必要參數

    Dialogflow ES 範例

    Dialogflow ES 中的必要參數
  6. 請確認虛擬服務專員符合訓練詞組註解規定。

    Dialogflow ES 範例

    Dialogflow ES 訓練詞組中沒有註解
  7. 請確認測試符合測試規範 (Dialogflow CXDialogflow ES)。
  8. 如要移除語音辨識器可能插入的非英數字元,請使用下列項目:
  9. 查看語音適應限制 (Dialogflow CXDialogflow ES)。

設計可控的對話

建構代理時,請明確定義對話路徑。確認代理程式可以要求提供履行使用者需求所需的資訊。避免對話範圍過於廣泛,否則可能會導致無法預測的行為。

分析記錄

應對手冊、工具和資料儲存庫的輸入和輸出內容會記錄在記錄檔中。使用收集到的對話 ID 追蹤通話鏈,並找出執行錯誤的位置。

測試提示

如果特定指令無法正常運作,請嘗試重新措辭。 或者,您也可以使用 Gemini 生成提示 (元提示)。這種疊代方法有助於找出最適合您使用案例的措辭。

向支援團隊提供完整資訊

向 Cloud 支援團隊建立客服案件時,請附上調查期間收集到的相關對話 ID 和記錄。這項資訊對於有效率地偵錯至關重要。