如何配置Amazon Connect的Invoke Lambda块传递来电号码并修正代码
解决Amazon Connect传递来电号码给Lambda生成客户ID的问题
一、Amazon Connect "Invoke AWS Lambda function" 块配置
配置Lambda IAM权限
- 给Lambda的执行角色添加权限策略,允许Amazon Connect调用该函数:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "lambda:InvokeFunction", "Resource": "你的Lambda函数ARN" } ] } - 修改角色的信任关系,允许Connect服务调用:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "connect.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
- 给Lambda的执行角色添加权限策略,允许Amazon Connect调用该函数:
配置Invoke Lambda块参数
- 在Connect流程中添加「Invoke AWS Lambda function」块,选择目标Lambda函数
- 在「Input parameters」区域,添加键值对:
- 键:
callerPhoneNumber - 值:
$.Details.ContactData.CustomerEndpoint.Address(这是Connect存储来电号码的固定路径)
- 键:
- 设置「Output variable name」(比如
LambdaResult),后续流程可通过$.LambdaResult.CustomerID引用生成的客户ID
二、修正后的Lambda代码
之前的代码报错核心原因是参数路径错误:Amazon Connect传递的参数不会直接放在event根节点,而是嵌套在Details.Parameters下;另外两次调用datetime.now()可能导致日期时间不一致。修正后的代码如下:
import datetime def lambda_handler(event, context): # 从Connect传递的参数中提取来电号码 caller_phone_number = event['Details']['Parameters']['callerPhoneNumber'] # 统一获取当前时间,避免两次调用now()产生时间差 current_datetime = datetime.datetime.now() current_date = current_datetime.strftime('%Y%m%d') current_time = current_datetime.strftime('%H%M%S') # 可选:清理号码格式(比如移除国际区号前缀的+号) cleaned_phone = caller_phone_number.replace('+', '') # 拼接生成客户ID customer_id = f"{cleaned_phone}-{current_date}-{current_time}" return { 'CustomerID': customer_id }
常见问题排查
- 如果仍报错「KeyError」:检查Input parameters里的键名是否和Lambda代码中取的
callerPhoneNumber完全一致,或者确认Connect传递的event结构是否正确(可在Lambda控制台查看测试事件) - 如果报错「Permission denied」:检查Lambda角色的信任关系和权限策略是否配置正确
- 号码格式异常:来电号码可能包含
+或其他特殊字符,可根据业务需求添加格式化逻辑
内容的提问来源于stack exchange,提问作者Randika Ujith
相关产品推荐
相关产品推荐

