疑難排解

為代理啟用 Cloud Logging

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

收集對話 ID

發生非預期行為時,請收集 Dialogflow 對話 ID。您可以在對話記錄中找到這些 ID,用來追蹤對話的執行路徑,並檢查特定互動。

API 呼叫遭拒

問題

API 呼叫收到 PERMISSION_DENIED 回應。

解決方案

請確認您已正確設定 (Dialogflow CX、Dialogflow 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」頁面上的「Try this API」(試用這個 API) 面板:

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

    gcloud

    使用 gcloud alpha resource-manager liens delete LIEN_NAME 指令,如從專案中移除留置權說明文件所述。

    API Explorer

    使用「方法:liens.delete」頁面上的「Try this API」(試用這個 API) 面板:

    • 在 name 欄位中,填入步驟 2 取得的留置權名稱。
    • 點選「Execute」。
  4. 關閉專案。

Dialogflow CX Webhook 失敗,並顯示「超過期限」錯誤

問題

從 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

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

解決方案

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

電話閘道連線

問題

使用 Phone Gateway 時,聽到忙線音或通話中斷。

解決方案

這項功能有配額和限制。如果聽到忙線音或通話中斷,表示可能已超過配額。

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

問題

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

解決方案

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

如果您在 Dialogflow CX Phone Gateway 或 Dialogflow ES Phone Gateway 中建立了電話號碼,可以在控制台中刪除。請注意,如果刪除代理時未刪除電話號碼,則與該代理相關聯的電話號碼不會刪除。

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

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

如要找出與專案相關聯的電話號碼,請針對可能建立電話號碼的所有區域,使用 projects.phoneNumbers/list 或 projects.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/delete 或 projects.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 CX、Dialogflow ES)。找出所有含有這個參數和實體註解的意圖。
  2. 請修正註解,確保這些註解都不會套用至代表不符預期比對值的文字。
  3. 在執行階段測試代理,確認問題是否已解決。
  4. 如果問題仍未解決,請確認進階實體設定中的「Automatic expansion」(自動展開) 和「Fuzzy matching」(模糊比對) 選項皆未勾選,然後再次測試代理。

語音機器人略過部分回覆

問題

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

解決方案

如果為特定對話輪次定義了至少一個輸出音訊文字回覆,請確保在該對話輪次的所有步驟中,代理的回覆和 Webhook 回覆都包含輸出音訊文字選項。

SSML 標記未生效

問題

SSML 標記是在代理執行作業中定義,但語音機器人讀取合成文字時,不會套用 SSML 效果。

解決方案

請確認 Dialogflow 控制台中的每張回應資訊卡,或每個回應訊息物件 (如果回應是由 API 或 Webhook 提供),都只有一組 <speak></speak>。

語音代理將數字 0 唸成字母 O

問題

如果代理是專為語音設計,語音代理會將數字 0 唸成字母 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>
  4. 。

例如,信用卡號碼中的零會拼寫為「zeroes」:

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

非預期的合成發音

問題

代理回覆的合成發音 (例如專有名詞、首字母縮略字) 不符合預期。

解決方案

如要確保不常見字詞的特定發音,請在代理回覆中使用 SSML say-as 或 phoneme 標記。

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

問題

在 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 CX、Dialogflow ES) 時,收到 Regular expression match is too broad 錯誤。

解決方案

請參考以下做法:

  • 在規則運算式中使用 ^ 和 $,分別表示文字的開頭和結尾。
  • 使用規則運算式實體和必要參數 (Dialogflow CX、Dialogflow ES)。
  • 定義必要參數提示,要求使用者只提供實體值,不含任何前後文字。

語音辨識功能插入不想要的非英數字元

問題

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

解決方案

  1. 如果您使用系統實體比對數字,建議改用規則運算式實體 (Dialogflow CX、Dialogflow ES)。
  2. 請按照「規則運算式實體不準確的英數字元語音辨識」一節中的所有建議操作。
  3. 如要使用電話整合功能比對數字,除了語音辨識外,建議您考慮使用 DTMF 選項。

語音輸入的空白轉錄稿

問題

Dialogflow 對語音輸入的回應會傳回空白轉錄稿。系統會將這些要求視為無輸入內容或不相符。

解決方案

聆聽錄音,確認其中含有語音。

確認已在代理設定 (Dialogflow CX、Dialogflow ES) 中啟用語音調整功能。

如果啟用語音調整功能後仍無法解決問題,請在非正式環境中嘗試下列語音模型,並使用效果最佳的模型:

  • latest_short
  • phone_call
  • command_and_search

如需英文以外的語言,請參閱「Speech-to-Text 支援的語言」說明文件,瞭解支援的語音模型。

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

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

  • 如果您使用 Phone Gateway (Dialogflow CX、Dialogflow 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。

解決方案

如果嘗試轉送至「祖系」playbook (直接或間接呼叫目前 playbook 的 playbook),可能會發生迴圈。如要修正這個問題,請確認 Playbook 轉送為單向,且不會在同一個對話路徑中循環回到父項 Playbook。

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

問題

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

File size exceeds 2MB

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

解決方案

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

正規運算式實體對英數字元的語音辨識不準確

問題

語音輸入的英數字元應與規則運算式實體相符,但收到的轉錄稿不正確 (Dialogflow CX、Dialogflow ES)。

解決方案

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

    Dialogflow CX 範例

    Dialogflow CX 中的必要參數

    Dialogflow ES 範例

    Dialogflow ES 中的必要參數
  6. 請確認代理符合訓練詞組註解規定 (Dialogflow CX、Dialogflow ES)。

    Dialogflow ES 範例

    Dialogflow ES 訓練詞組中沒有註解
  7. 請務必遵循測試指南 (Dialogflow CX、Dialogflow ES)。
  8. 如要移除語音辨識工具可能插入的非英數字元,請使用下列指令:
  9. 查看語音調整限制 (Dialogflow CX、Dialogflow ES)。

設計可控的對話

建構代理時,請明確定義對話路徑。請確保代理能要求提供必要資訊,以滿足使用者需求。避免過於廣泛的對話範圍,以免導致無法預測的行為。

分析記錄

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

測試提示

如果特定指令集的運作不如預期,請嘗試改寫。或者,您也可以使用 Gemini 生成提示詞 (撰寫元提示詞)。這種反覆調整的方法,有助於找出最適合您用途的措辭。

提供完整資訊給支援團隊

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