本指南提供了各种实现webhook 的示例,以及 webhook 问题排查建议。
设置会话参数
以下示例展示了如何设置会话参数。
Go
如需向 Dialogflow 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
请参阅Webhook 快速入门。Java
如需向 Dialogflow 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Node.js
如需向 Dialogflow 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Python
如需向 Dialogflow 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
返回执行方式响应
以下示例展示了如何返回执行响应。
Go
如需向 Dialogflow 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
请参阅Webhook 快速入门。Java
如需向 Dialogflow 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Node.js
如需向 Dialogflow 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Python
如需向 Dialogflow 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
根据需要设置表单参数
以下示例展示了如何将参数标记为必需参数。
Java
如需向 Dialogflow 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Node.js
如需向 Dialogflow 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
验证表单参数
以下示例展示了如何验证表单参数。
Java
如需向 Dialogflow 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Node.js
如需向 Dialogflow 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Python
如需向 Dialogflow 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
日志会话 ID
以下示例展示了如何记录来自网络钩子请求的 session ID
。
Python
如需向 Dialogflow 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
问题排查
排查网络钩子问题时,记录网络钩子中的会话 ID 会很有帮助。WebhookRequest 的 sessionInfo.session
字段包含会话 ID。每个对话的会话 ID 都应是唯一的,它有助于您将代理日志与使用相同会话 ID 的请求的 webhook 日志进行比较。上文中的记录会话 ID部分介绍了如何记录来自网络钩子的会话 ID。
此外,如果您在 Cloud Functions 或类似的 Google Cloud 无服务器选项上托管 webhook,则可以使用日志条目中的 trace
字段作为日志过滤条件。函数的单次执行会产生多个具有相同轨迹值的日志条目。
以下示例同时使用会话 ID 和轨迹值将特定的 Conversational Agents (Dialogflow CX) 代理错误日志与相应的 Cloud Functions 网络钩子日志条目相关联。该示例针对已启用 Cloud Logging 的代理使用 Cloud Logging 过滤条件。
1. 过滤对话式 AI 客服 (Dialogflow CX) 日志,以查看特定客服的错误日志
使用以下 Cloud Logging 过滤条件可过滤出对话式 AI 客服 (Dialogflow CX) 日志中特定客服的错误日志:
labels.location_id="global"
labels.agent_id="AGENT_ID"
severity=ERROR
Webhook 日志错误条目如下所示:
{
"insertId": "-zi368ye1ie3r",
"jsonPayload": {
"message": "Webhook error: State: URL_UNREACHABLE, Reason: UNREACHABLE_5xx, HTTP status code: 500",
"code": 14
},
"resource": {
"type": "global",
"labels": {
"project_id": "PROJECT_ID"
}
},
"timestamp": "2022-10-05T19:44:53.098938Z",
"severity": "ERROR",
"labels": {
"session_id": "ec8781-f28-7e6-791-d7e992e8f",
"location_id": "global",
"agent_id": "807346f0-f501-42b5-9642-af59d5e98165"
},
"logName": "projects/PROJECT_ID/logs/dialogflow-runtime.googleapis.com%2Frequests",
"receiveTimestamp": "2022-10-05T19:44:53.222552658Z"
}
请注意 labels.session_id
字段,其中包含会话 ID。您将在下一步中使用会话 ID。
2. 过滤 Cloud Functions 日志以获取会话 ID
使用以下 Cloud Logging 过滤条件,按会话 ID 过滤 Cloud Function 日志:
resource.type = "cloud_function"
resource.labels.function_name = "CLOUD_FUNCTION_NAME"
resource.labels.region = "CLOUD_FUNCTION_REGION"
textPayload="Debug Node: session ID = SESSION_ID"
生成的日志与所提供的会话期间生成的网络钩子日志相对应。例如:
{
"textPayload": "Debug Node: session ID = ec8781-f28-7e6-791-d7e992e8f",
"insertId": "632bdb2b000b7c6c77d0cc62",
"resource": {
"type": "cloud_function",
"labels": {
"project_id": "PROJECT_ID",
"function_name": "webhook",
"region": "us-central1"
}
},
"timestamp": "2022-10-05T19:44:53.098938Z",
"severity": "INFO",
"labels": {
"execution_id": "ozt5bnz50eeo",
"instance_id": "00c61b117c1f116421aa5503bc80f9aa636b9ef117bb2722f3d54414085e62be6e55af0aa0250a63534262b31a3d3a14af8c940203f1915db8b25b"
},
"logName": "projects/PROJECT_ID/logs/cloudfunctions.googleapis.com%2Fcloud-functions",
"trace": "projects/PROJECT_ID/traces/e41eefc1fac48665b442bfa400cc2f5e",
"receiveTimestamp": "2022-10-05T19:44:53.222552658Z"
}
请记下 trace
字段,以便在下一步中使用。
3. 过滤特定轨迹的 Cloud Functions 日志
使用以下 Cloud Logging 过滤条件可过滤特定轨迹的 Cloud Function 日志:
resource.type = "cloud_function"
resource.labels.function_name = "CLOUD_FUNCTION_NAME"
resource.labels.region = "CLOUD_FUNCTION_REGION"
trace="projects/PROJECT_ID/traces/TRACE_ID"
其中 TRACE_ID
是轨迹的最后一个片段。例如,projects/PROJECT_ID/traces/e41eefc1fac48665b442bfa400cc2f5e
的 TRACE_ID
为 e41eefc1fac48665b442bfa400cc2f5e
。
生成的日志与执行 webhook 请求期间生成的所有 webhook 日志相对应,这些日志与第 1 步中的会话 ID 和第 2 步中的轨迹相关联。