问题排查

为代理启用 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

    使用方法:liens.list 页面上的试用此 API 面板:

    • 填写参数说明中建议的 parent 字段。
    • 点击执行
  3. 删除安全锁。

    gcloud

    使用 gcloud alpha resource-manager liens deleteLIEN_NAME 命令(如移除项目中的安全锁文档中所述)。

    API Explorer

    使用方法:liens.delete 页面上的试用此 API 面板:

    • 使用您在步骤 2 中获得的安全锁名称填写 name 字段。
    • 点击执行
  4. 关闭项目。

Dialogflow CX 网络钩子失败,并显示“超出截止时间”错误

问题

从 Dialogflow CX 调用的网络钩子可能会失败,并显示以下错误消息:

Webhook call failed. Error: DEADLINE_EXCEEDED

这可能是因为网络钩子调用超出了网络钩子超时限制。以下是 Webhook 调用超出超时限制的可能原因:

  • 尝试触发不存在的 intent。
  • Webhook 后端(例如 Cloud Functions)的冷启动问题。
  • 网络钩子会调用其他服务,从而增加响应时间。
  • 代理与 Webhook 后端之间没有连接(例如,负载平衡器配置错误)。
  • 组织政策阻止入站流量或 Dialogflow 方法运行。

临时解决方法

Webhook 的默认超时时间限制为 5 秒。您可以在创建或修改网络钩子资源时增加网络钩子超时时限,这样网络钩子就有更多时间来响应。

控制台无法设置项目

问题

使用控制台创建代理时,收到 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 手机网关Dialogflow ES 手机网关中创建了手机号码,可以在控制台中将其删除。请注意,删除代理而不删除手机号码不会删除与其关联的手机号码。

或者,您也可以按照以下步骤使用该 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 控制台中使用查看所有代理页面上的搜索选项,按代理 ID 查找代理。

对于 Dialogflow ES,一个项目最多只能与 5 个代理相关联,而一个 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)。查找所有具有包含此参数和实体的注释的 intent。
  2. 修正注释,确保这些注释均未应用于表示不需要的匹配值的文本。
  3. 在运行时测试代理,以验证问题是否已解决。
  4. 如果问题仍然存在,请确保在高级实体设置中取消选中自动扩展模糊匹配选项,然后再次测试代理。

语音聊天机器人跳过了一些回答

问题

对于同时支持文本和语音的代理,语音机器人不会朗读某些回答。

解决方案

如果为特定对话轮次定义了至少一个输出音频文本响应,请确保在整个代理的履单和 Webhook 响应中,此对话轮次的所有步骤都始终包含输出音频文本选项。

SSML 标记未生效

问题

SSML 标记在代理履单中定义,但语音机器人读取合成文本时没有 SSML 效果。

解决方案

确保在 Dialogflow 控制台中,每个响应卡片或每个响应消息对象(如果响应由 API 或 webhook 提供)中仅存在一个 <speak></speak> 对。

语音代理将数字零读作字母 O

问题

对于专为语音而设计的代理,语音代理会将零读作字母 O,而不是数字零。

解决方案

  1. 代理说更改为使用输出音频文本对话选项
  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-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. 修改代理设计,以移除无限循环转换或减少单个对话轮次的转换次数。

正则表达式匹配范围过广

问题

创建正则表达式实体时收到错误 Regular expression match is too broadDialogflow CXDialogflow ES)。

解决方案

不妨考虑以下方法:

  • 在正则表达式中使用 ^$ 分别表示文本的开头和结尾。
  • 使用带有必需参数的正则表达式实体(Dialogflow CXDialogflow ES)。
  • 定义必需的参数提示,以要求最终用户仅提供实体值,而不包含任何周围的字词。

语音识别插入了不需要的非字母数字字符

问题

在尝试匹配字母数字时,语音识别器会插入不需要的非字母数字字符(空格、短划线等),导致实体无法匹配。

解决方案

  1. 如果您使用系统实体来匹配数字,请考虑改用正则表达式实体 (Dialogflow CXDialogflow ES)。
  2. 遵循正则表达式实体对字母数字的语音识别不准确部分中的所有建议。
  3. 对于使用电话集成功能匹配号码,除了语音识别之外,还可以考虑使用 DTMF 选项。

语音输入的空白转写内容

问题

针对语音输入的 Dialogflow 响应返回空转写内容。系统会将这些请求视为无输入或无匹配项。

解决方案

收听录音,确认其中包含语音内容。

确保在代理设置中启用语音自适应(Dialogflow CXDialogflow ES)。

如果启用语音自适应功能后问题仍未解决,请在非生产环境中尝试使用以下语音模型,并使用效果最好的模型:

  • latest_short
  • phone_call
  • command_and_search

对于英语以外的语言,请在Speech-to-Text 支持的语言文档中查找支持的语音模型。

指定语音模型的方式取决于您如何设置与 Dialogflow 的互动。

  • 对于 API 请求,请在 InputAudioConfigDialogflow CXDialogflow ES)的 model 字段中提供模型名称。

  • 如果您使用电话网关(Dialogflow CXDialogflow ES),则可以更新在启用集成时由 Dialogflow 创建的对话配置文件中的语音模型:

    1. 检索对话资料 ID:

      • 使用 conversationProfiles.list 方法检索与您的项目关联的所有对话配置文件。
      • 找到要更新的对话配置文件,然后复制 name 字段值。

      对于 Dialogflow CX 电话网关,您可以在集成设置中找到对话资料显示名称。对于 Dialogflow ES Phone Gateway,对话资料显示名与启用集成功能的代理名称相对应。

      如果您有多个显示名称相同的对话个人资料,请验证 conversationProfiles.list 方法响应中 automatedAgentConfig 字段内的代理 ID。

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

  • 对于 Contact Center AI 集成,请咨询电话集成商,了解如何更新集成或个人请求的语音模型。

了解 playbook 循环错误

问题

关联 playbook 时,您遇到错误 Playbook <playbookID> caused loop in playbook routes

解决方案

如果您尝试路由到“祖先”剧本(直接或间接调用当前剧本的剧本),则可能会发生循环。如需解决此问题,请验证剧本路由是否为单向,并且不会在同一对话路径中返回到父剧本。

比较代理版本时出现“文件大小超过 2MB”的空白屏幕错误

问题

尝试比较两个不同的代理版本时,屏幕会变为空白,并显示以下错误消息:

File size exceeds 2MB

此问题是由于其中一个文件的大小超过 2MB 导致的。

解决方案

如需比较代理版本(其中一个文件的大小超过 2MB),建议使用 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. 确保您的正则表达式实体允许匹配语音识别器可能插入的非字母数字字符(空格、短划线等)。为了满足此列表中的要求 2,请创建多个实体条目:一个条目用于满足此列表中的要求 2,另一个条目用于处理非字母数字字符。例如,如需匹配 5 位数字并允许使用非字母数字字符,请使用以下代码:
     \d{5}
     (\d[^a-zA-Z0-9]*){5}
    
  5. 确保您的代理符合参数定义要求(Dialogflow CXDialogflow ES)。

    Dialogflow CX 示例

    Dialogflow CX 中的必需参数

    Dialogflow ES 示例

    Dialogflow ES 中的必需参数
  6. 确保您的代理符合训练短语注解要求(Dialogflow CXDialogflow ES)。

    Dialogflow ES 示例

    Dialogflow ES 中的训练短语中没有注释
  7. 确保您的测试符合测试指南(Dialogflow CXDialogflow ES)。
  8. 如需移除语音识别器可能插入的非字母数字字符,请使用以下代码:
  9. 查看语音自适应限制(Dialogflow CXDialogflow ES)。

设计受控对话

构建具有明确定义的对话路径的代理。确保代理可以请求满足用户要求所需的信息。避免对话范围过广,这可能会导致不可预测的行为。

分析日志

playbook、工具和数据存储区的输入和输出会记录在日志中。使用收集的对话 ID 跟踪调用链,并确定执行出错的位置。

尝试使用提示

如果特定指令无法正常运行,请尝试重新措辞。 或者,您也可以使用 Gemini 生成提示(元提示)。这种迭代式方法有助于找到适合您使用情形的最佳措辞。

向支持团队提供完整的信息

向 Cloud 支持团队提交支持请求时,请附上调查期间收集的相关对话 ID 和日志。此信息对于高效调试问题至关重要。