无法在AWS Connect联系流中获取AWS Lambda(TypeScript)返回值
问题描述
- 无法将AWS Lambda返回值设置为Amazon Connect联系属性,该Lambda用于检查来电号码是否存在于DynamoDB表中
- Lambda核心功能正常(已通过日志确认),但返回值无法被Connect获取
- 尝试过「String Map」和「JSON」两种响应验证方式:使用「String Map」时Lambda报错,希望采用熟悉的「JSON」方式
相关信息
[A] Lambda代码主体
try { await DynamoDBObject.getItem(parameters, function(error, data){ const twelveDaysUnix = 1036800 const minimumCall = Number(data.Item.LastCall.N) - twelveDaysUnix if(between(dateFunctionality.getTime(), minimumCall, dateFunctionality.getTime())){ returnValue.betweenDates = true event.Details.Parameters.PhoneNumberLambdaReturn = returnValue console.log("Console log of complete event: ",event) console.log("Console log of entered data: ", event.Details.Parameters.PhoneNumberLambdaReturn) return event } else { returnValue.betweenDates = false; return returnValue } }).promise() } catch (error){ console.log("Catch block of try/catch") console.log(error.message) return error.message }
[B] 配置截图
- 调用AWS Lambda Function模块截图:

- 设置联系属性模块截图:

解决方案
1. 修复Lambda异步逻辑错误
你的代码存在Promise与回调混用的问题,导致Lambda没有正确返回结果:
- 使用
await时无需传入回调函数,getItem().promise()会直接返回Promise结果或抛出错误 - 回调函数内的
return无法作为Lambda的最终返回值,因为异步回调的上下文和Lambda主函数上下文分离
修改后的代码示例:
try { // 移除回调,直接await Promise结果 const data = await DynamoDBObject.getItem(parameters).promise(); const twelveDaysUnix = 1036800; const minimumCall = Number(data.Item.LastCall.N) - twelveDaysUnix; const currentTime = dateFunctionality.getTime(); // 修正原条件逻辑错误(原条件等价于仅判断currentTime >= minimumCall) if (currentTime >= minimumCall && currentTime <= Date.now()) { // 直接返回JSON格式结果,Connect会读取这个顶层对象 return { betweenDates: true }; } else { return { betweenDates: false }; } } catch (error) { console.error("Lambda执行错误:", error.message); // 返回标准错误格式,避免Connect解析失败 return { error: error.message, betweenDates: false }; }
关键修复点:
- 移除
getItem的回调函数,用await直接获取查询结果 - Lambda必须返回顶层JSON对象,不要修改
event对象再返回,Connect只会读取Lambda的直接返回值 - 修正原if条件的逻辑漏洞
2. 配置Connect的Lambda响应验证
在Connect的「调用AWS Lambda Function」模块中:
- 将「响应验证」设置为JSON
- 确保返回的JSON结构简洁(如直接返回
{ betweenDates: true }),避免嵌套过深
3. 设置联系属性的正确路径
在Connect的「设置联系属性」模块中:
- 如果Lambda返回
{ betweenDates: true },属性值的路径应为$.LambdaResult.betweenDates(Connect会自动将Lambda返回的JSON包裹在LambdaResult节点下)
关于「String Map」报错的说明
「String Map」要求Lambda返回的键值对全部为字符串类型,如果之前的返回值包含布尔值(true/false),会触发验证失败。若要使用该方式,需将布尔值转为字符串(如"true"/"false")。
内容的提问来源于stack exchange,提问作者Stephen Smith
相关产品推荐
相关产品推荐

