我想对 Amazon Connect 中的联系流错误进行故障排除。
解决方法
开启联系流日志
开启流日志。使用联系流日志来了解调用如何遍历联系流的不同块。此外,您可以使用联系流日志排除故障并找出错误。
要查看调用如何遍历此流,关联联系流日志,或在沙盒环境中重现问题,请导出您的流。
识别您的联系流错误
要监控和识别联系流错误,请使用 ContactFlowErrors 和 ContactFlowFatalError Amazon CloudWatch 指标。
要查找与错误相关的事件,请完成以下步骤:
- 打开 CloudWatch 控制台。
- 在导航窗格中的 Logs(日志)下,选择 Log Insights。
- 为 Amazon Connect 实例日志选择日志组的名称。格式为 /aws/connect/yourinstancename。
- 在右上角,指定查询的时间范围。
- 针对特定时间范围运行以下查询:
fields @timestamp, @message| filter @message like 'Results'
| parse @message '"Results":"*","ContactId":"*","ContactFlowId":"*","ContactFlowName":"*","ContactFlowModuleType":"*"' as Results, ContactId, ContactFlowId, ContactFlowName, BlockType
| filter Results like 'rror' or Results like 'ailed' or Results like 'imeout' or Results like 'xception' or Results like 'No prompt provided' or Results like 'Instance has reached concurrent Lambda thread access limit' or Results like 'nsupported' or Results like 'nvalid' or Results like 'not found' or Results like 'execution limit reached'
| sort @timestamp asc
| display Timestamp, Results, ContactId, ContactFlowId, ContactFlowName, BlockType
-or-
针对特定联系人 ID 运行以下查询:
fields @timestamp, @message| sort @timestamp desc
| filter ContactId = "162faf0b-4e68-4a4b-bbde-96c9631f2a95"
注意: 将 ContactId 的值替换为您的联系人 ID。
要对联系流错误进行故障排除,请查看您的 CloudWatch 警报配置详细信息。确定您是使用 ContactFlowErrors 还是 ContactFlowFatalError 指标配置了警报以及警报的关联联系流。
如果警报指标是 ContactFlowFatalError,则错误可能是服务问题所致,即该流因系统错误而未能运行。如果警报指标是 ContactFlowErrors,则意味着 Amazon Connect 将联系块路由到错误分支。
然后,查看与受影响联系流相关的日志,以确定产生错误的块。有关流块的更多信息,请参阅 Amazon Connect 流设计器中的流块定义。
注意: 联系流块可能会导致 CloudWatch 发生错误,但不会生成相应的 CloudWatch 日志。
对联系流中的 Lambda 错误进行故障排除
调用 Lambda 函数块可调用 AWS Lambda,并选择性地返回可用于设置联系属性的键值对。此块可能导致联系流错误。
要调查 Lambda 函数错误,请在 CloudWatch Logs Insights 中运行以下查询:
fields @timestamp, @message| sort @timestamp desc
| filter Results LIKE "Error"
输出类似于以下内容:
{
"Results": "The Lambda Function Returned an Error.",
"ContactId": "alebb22a-93c4-4f90-8f22-b3718c4578E0",
"ContactFlowId": "contact-flow-id",
"ContactFlowName": "chat",
"ContactFlowModuleType": "InvokeExternalResource",
"Timestamp": "2023-12-20T14:14:13.794Z",
"Parameters": {
"FunctionARN": "arn:aws:lambda:us-west-2:1099999:function:Connect-Wallboard-Historical-Metrics",
},
"TimeLimit": "3000"
}
受影响的 InvokeExternalResource 的 ContactFlowModule 类型,这指的是 Lambda 函数、联系流名称和错误。找到受影响的 Lambda 函数。然后,关联时间戳或联系人 ID,以在 Lambda 执行日志中获取导致错误的确切事件。
以下是 InvokeExternalResource 块在联系流日志中导致的错误示例:
{
"Results": "Status Code: 403; Error Code: AccessDeniedException; RequestID: 435c21cc-19d8-4847-864e-e32867fe3a70
"ContactId": "alebb22a-93c4-4f90-8f22-b3718c4578E0",
"ContactFlowId": " arn:aws:lambda:us-west-2:1099999/contact-flow/65569e69-5c67-4061-8776-fd1d501c4838",
}
"Access Denied" 错误表示联系流无权调用 Lambda 函数。有关如何向实例添加函数的信息,请参阅向 Amazon Connect 实例添加 Lambda 函数。
没有 RequestId 可以将联系流的 Amazon Connect 日志消息与 Lambda 执行日志关联起来。如果 Lambda 函数打印调用事件,则使用 ContactId 关联联系流日志和 Lambda 函数执行日志。如果该函数未打印调用事件,则使用联系流日志中的时间戳来筛选 Lambda 函数的执行日志。
如果调用 Lambda 函数块返回错误,但 Lambda 函数中没有相应的条目,则检查以下配置:
- Lambda 有效载荷可能为空。
- 该函数返回的输出必须是键和值对的平面对象,其值包括字母数字、短划线和下划线字符。
- Lambda 函数响应不是简单的字符串映射,响应也不大于 32k。最佳做法是测试 Lambda 函数返回的输出,确认 Amazon Connect 正确使用了 Lambda 返回的函数。
为防止联系流错误,您可以在生产环境中部署联系流之前使用 Amazon Connect 的原生呼叫仿真功能。