如何解决AWS Connect流程向Lambda函数传递空JSON的问题?
AWS Connect调用Lambda传空JSON的解决办法
1. 先把权限配置补全
- 给Lambda执行角色添加信任策略:进入Lambda的配置>权限>执行角色>信任关系,添加允许Connect调用的规则:
{ "Effect": "Allow", "Principal": { "Service": "connect.amazonaws.com" }, "Action": "sts:AssumeRole" }
- 再给Lambda添加资源策略:在配置>权限>资源策略里补充:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "connect.amazonaws.com" }, "Action": "lambda:InvokeFunction", "Resource": "你的Lambda函数ARN", "Condition": { "ArnEquals": { "AWS:SourceArn": "你的Connect实例ARN" } } } ] }
权限不匹配的话,Connect可能无法正常传递参数,甚至调用Lambda都会失败。
2. 抠细节检查参数配置
- 目标密钥要严格大小写匹配Lambda中的参数名,比如Lambda用
phoneNumber,就不能写成Phonenumber,大小写错一个都不行 - 手动输入值时别乱加符号,比如电话号码直接写
+1234567890即可,不需要额外加引号 - 如果引用联系属性(比如
${ContactData.CustomerEndpoint.Address}),要确保在当前流程节点该属性已经有值——比如刚接通就调用Lambda,可能还没获取到客户号码,自然传空
3. 打日志确认真实输入
- 在Lambda开头加一段代码,把收到的event完整打印出来:
import json import logging logger = logging.getLogger() logger.setLevel(logging.INFO) def lambda_handler(event, context): logger.info("收到的event内容: " + json.dumps(event)) # 你的业务逻辑写在这里
去CloudWatch查看日志,确认到底是空对象还是有你没注意到的字段——有时候Connect会传一些默认元数据,只是你没处理而已。
4. 确认区域和流程版本
- 必须保证Connect实例和Lambda在同一个AWS区域,跨区域调用容易出现各种异常
- 修改完联系流程后一定要发布新版本,并且将新版本关联到对应的号码/队列——只编辑草稿没用,实际运行的还是旧流程
内容的提问来源于stack exchange,提问作者CSharpMinor
相关产品推荐
相关产品推荐

