本指南提供了各种用于实现 webhook 的示例以及 webhook 问题排查建议。
设置会话参数
以下示例展示了如何设置会话参数。
Go
要向 Dialogflow 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
请参阅 Webhook 快速入门。Java
要向 Dialogflow 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Node.js
要向 Dialogflow 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Python
要向 Dialogflow 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
返回履单响应
以下示例展示了如何返回 fulfillment 响应。
Go
要向 Dialogflow 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
请参阅 Webhook 快速入门。Java
要向 Dialogflow 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Node.js
要向 Dialogflow 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Python
要向 Dialogflow 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
根据需要设置表单参数
以下示例展示了如何根据需要标记参数。
Java
要向 Dialogflow 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Node.js
要向 Dialogflow 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
验证表单参数
以下示例展示了如何验证表单参数。
Java
要向 Dialogflow 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Node.js
要向 Dialogflow 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Python
要向 Dialogflow 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
记录会话 ID
以下示例展示了如何记录来自 webhook 请求的 session ID
。
Python
要向 Dialogflow 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
问题排查
在对网络钩子进行问题排查时,记录网络钩子中的会话 ID 会很有帮助。WebhookRequest 的 sessionInfo.session
字段包含会话 ID。每个对话的会话 ID 都应是唯一的,这有助于您将代理日志与使用相同会话 ID 的请求的网络钩子日志进行比较。上面的记录会话 ID 部分介绍了如何通过网络钩子记录会话 ID。
此外,如果您在 Cloud Functions 或类似 Google Cloud 无服务器选项上托管 webhook,则可以使用日志条目中的 trace
字段作为日志过滤条件。单次函数执行会导致多个日志条目具有相同的跟踪记录值。
以下示例使用会话 ID 和跟踪记录值将特定 Dialogflow 代理错误日志与相应的 Cloud Functions 网络钩子日志条目相关联。该示例对启用了 Cloud Logging 的代理使用 Cloud Logging 过滤条件。
1. 过滤特定代理的错误日志的 Dialogflow 日志
使用以下 Cloud Logging 过滤条件过滤 Dialogflow 日志,找出特定代理的错误日志:
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. 根据会话 ID 过滤 Cloud Functions 函数日志
使用以下 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
。
生成的日志与执行第 1 步中的会话 ID 和第 2 步中的跟踪记录相关联的网络钩子请求期间生成的所有网络钩子日志相对应。