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

Amazon Connect未接来电Lambda邮件通知配置及代码验证咨询

Amazon Connect坐席未接通话邮件通知配置指南

一、联系流中Lambda函数的调用节点

必须在**断开流(Disconnect Flow)**中调用该Lambda函数——只有当通话完全断开后,Amazon Connect才会生成包含完整断开原因的事件数据。具体配置步骤:

  • 登录Amazon Connect控制台,进入「联系流」页面,创建或编辑一个断开流
  • 在断开流的节点画布中,添加「调用AWS Lambda函数」节点,选择你创建的目标Lambda函数
  • 回到主联系流:在转接坐席的节点(如「转接至队列」「转接至坐席」)后,添加「设置联系属性」节点,仅当坐席未接听导致转接失败时,设置自定义属性DisconnectCause为unattended
  • 将主联系流中处理坐席未接的分支,引导至「断开/清除」节点,并关联你创建的断开流

二、Lambda代码修正与验证

你的原代码存在几个关键问题,以下是修正后的版本及对应说明:

修正后的Python代码

import json
import boto3
from botocore.exceptions import ClientError

def lambda_handler(event, context):
    try:
        # 安全提取事件数据,避免KeyError
        contact_data = event.get('Details', {}).get('ContactData', {})
        contact_id = contact_data.get('ContactId', '未知ID')
        
        # 检查断开原因数组是否有效
        disconnect_reasons = contact_data.get('DisconnectReasons', [])
        if not disconnect_reasons:
            return {'statusCode': 200, 'message': '无有效断开原因,跳过通知'}
        
        disconnect_reason = disconnect_reasons[0]
        # 提取自定义断开原因属性
        disconnect_cause = contact_data.get('Attributes', {}).get('DisconnectCause', '')
        
        # 仅匹配坐席未接的场景
        if disconnect_reason == 'CONTACT_FLOW_DISCONNECTED' and disconnect_cause == 'unattended':
            # 邮件内容配置
            subject = f"未接来电通知:联系ID {contact_id}"
            body = f"联系ID {contact_id} 的通话因坐席未接听而断开,请及时跟进。"
            sender = 'sender@example.com'  # 需在SES中完成邮箱验证
            recipient = 'recipient@example.com'  # 需在SES中验证或属于已验证域名
            
            # 初始化SES客户端(指定你的AWS区域)
            ses_client = boto3.client('ses', region_name='us-east-1')
            response = ses_client.send_email(
                Destination={'ToAddresses': [recipient]},
                Message={
                    'Body': {'Text': {'Charset': 'UTF-8', 'Data': body}},
                    'Subject': {'Charset': 'UTF-8', 'Data': subject}
                },
                Source=sender
            )
            
            print(f"邮件发送成功,SES响应ID:{response['MessageId']}")
            return {'statusCode': 200, 'message': '邮件已发送'}
        else:
            return {'statusCode': 200, 'message': '不符合未接来电条件,跳过通知'}
    
    except ClientError as e:
        error_msg = e.response['Error']['Message']
        print(f"SES调用失败:{error_msg}")
        return {'statusCode': 500, 'message': f"邮件发送失败:{error_msg}"}
    except Exception as e:
        print(f"未知错误:{str(e)}")
        return {'statusCode': 500, 'message': f"处理失败:{str(e)}"}

代码修正说明

  1. 安全数据提取:用get()替代直接键索引,避免因事件数据缺失触发KeyError
  2. 异常捕获:添加SES调用的ClientError捕获和通用异常处理,确保Lambda返回有效响应
  3. 必填返回值:Lambda必须返回JSON格式响应,否则Amazon Connect会判定调用失败
  4. SES前置检查:发件人/收件人邮箱需在Amazon SES完成验证,Lambda执行角色需附加AmazonSESFullAccess(或最小权限自定义策略)
  5. 区域指定:初始化SES客户端时必须指定你的AWS部署区域(如us-east-1)

三、额外注意事项

  • 确保Amazon Connect的IAM角色拥有调用该Lambda函数的权限
  • 测试时可通过Amazon Connect的「测试联系流」功能模拟坐席未接场景,查看CloudWatch日志验证Lambda执行情况
  • 若需要获取来电号码等更多信息,可在联系流中添加「获取客户电话号码」节点,将号码存入自定义属性后在Lambda中提取使用

内容的提问来源于stack exchange,提问作者Debash Bora

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 15:17:44