You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法在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模块截图:调用Lambda模块截图
  • 设置联系属性模块截图:设置联系属性模块截图
解决方案

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 20:22:31