Amazon Connect调用Lambda开启录音返回ResourceNotFoundException错误排查
Amazon Connect 调用startContactRecording返回ResourceNotFoundException报错排查方案
核心问题1:参数取值错误
你代码中ContactId和InitialContactId直接写死为'$ContactId'、'$InitialContactId'字符串常量,没有从Amazon Connect触发Lambda时传入的event对象中读取真实的通话ID参数,导致API请求找不到对应的通话资源,这是最常见的触发该报错的原因。
Amazon Connect调用Lambda时会将通话相关参数放到event的Details.ContactData字段下,需要从该位置读取对应值。
核心问题2:异步逻辑执行时序错误
startContactRecording是异步API,你当前在调用API后立刻执行callback(null, event)返回结果,会导致Lambda在API请求还未完成执行时就被销毁,请求无法正常完成。需要将callback放到API的回调函数内,等待API执行完成后再返回。
配置类排查点
- 确认你代码中填写的
InstanceId值与你真实使用的Amazon Connect实例ID完全一致,没有拼写错误 - 确认Lambda的执行角色(IAM Role)已添加
connect:StartContactRecording的权限策略 - 确认Lambda部署的区域与Amazon Connect实例所属的AWS区域完全一致,初始化AWS.Connect客户端时建议显式指定区域,避免默认区域不匹配的问题
- 确认触发Lambda的通话在调用该接口时处于活跃状态,已经结束的通话也会触发资源不存在报错
修正后的参考代码
var AWS = require('aws-sdk'); // 显式指定和Connect实例一致的区域,比如us-east-1请替换为你的实际区域 var connect = new AWS.Connect({region: '你的AWS区域代码'}); exports.handler = (event, context, callback) => { // 从event中读取真实的通话参数 var params = { ContactId: event.Details.ContactData.ContactId, InitialContactId: event.Details.ContactData.InitialContactId, InstanceId: 'ab71a95e-7b8a-46bd-bf37-8145924a7c85', // 确认该实例ID正确 VoiceRecordingConfiguration: { VoiceRecordingTrack: "ALL" } }; connect.startContactRecording(params, function(err, data) { if (err) { console.log(err, err.stack); callback(err); // 报错时返回错误信息 } else { console.log(data); callback(null, event); // 接口调用成功后再返回 } }); };
内容的提问来源于stack exchange,提问作者gcg27
相关产品推荐
相关产品推荐

