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

在Amazon Connect通话结束后触发Java版AWS Lambda进行数据采集

Amazon Connect与Java Lambda集成:通话结束后触发数据采集工作流搭建指南

一、通话终止检测方案

Amazon Connect提供两种可靠的通话结束检测方式,按需选择:

  • Contact Flow内置分支:无论用户主动挂断、客服结束通话还是系统中断,通话都会进入联系流的Disconnect分支。这是最直接的触发点,适合需要在通话结束后立即执行动作的场景。
  • EventBridge事件监听:Amazon Connect会向EventBridge发送contact-ended事件(包含通话终止原因、contact ID等核心信息)。适合不需要实时触发、或者需要批量处理多通话数据的场景。

二、Lambda触发配置与方式

方式1:通过Contact Flow直接触发(推荐实时处理)

这是最常用的触发方式,配置步骤如下:

  1. 在Lambda控制台,给你的Java Lambda函数添加资源策略,允许Amazon Connect调用它:
    {
      "Version": "2012-10-17",
      "Id": "connect-invoke-lambda",
      "Statement": [
        {
          "Sid": "AllowConnectInvoke",
          "Effect": "Allow",
          "Principal": {
            "Service": "connect.amazonaws.com"
          },
          "Action": "lambda:InvokeFunction",
          "Resource": "arn:aws:lambda:你的区域:你的账号ID:function:你的Lambda函数名",
          "Condition": {
            "ArnLike": {
              "AWS:SourceArn": "arn:aws:connect:你的区域:你的账号ID:instance/你的Connect实例ID"
            }
          }
        }
      ]
    }
    
  2. 编辑Amazon Connect的联系流:
    • 在流程末尾找到Disconnect节点,在它之前添加Invoke Lambda Function模块(注意:不要放在Disconnect之后,否则流程已终止无法执行)。
    • 选择你的Java Lambda函数,设置传递的参数(比如直接传递$ContactId系统变量,后续Lambda通过这个ID拉取完整数据)。

方式2:通过EventBridge触发(异步/批量处理)

  1. 在EventBridge控制台创建规则:
    • 事件源选择AWS Connect,事件类型选择contact-ended。
    • 目标选择你的Java Lambda函数。
  2. 确保Lambda的执行角色有接收EventBridge事件的权限(默认执行角色通常已包含)。

三、通话数据采集方法

所有核心数据都可以通过两种方式获取:

  1. Contact Flow传递参数:在调用Lambda时,直接将需要的数据(比如来电ID、自定义属性)通过Set Contact Attributes设置后,作为参数传递给Lambda。
  2. 调用Amazon Connect API拉取:通过Lambda调用Connect的API获取完整通话数据,Java环境下使用AWS SDK for Java v2实现。

核心数据采集说明:

  • 通话时长:调用DescribeContact API,从ContactDetails.Duration字段获取(单位:秒);或者在通话开始时用Set Contact Attributes记录当前时间戳,结束时计算差值。
  • 来电ID:从CustomerEndpoint.Address字段获取(在DescribeContact返回结果中),或者直接在Contact Flow中传递$CustomerEndpoint.Address变量。
  • 自定义属性:调用GetContactAttributes API,传入contact ID即可获取所有通过Set Contact Attributes设置的自定义键值对。

四、Java Lambda代码示例(基于AWS SDK v2)

以下是处理通话结束数据的Java Lambda handler示例,包含调用Connect API拉取数据的逻辑:

import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.connect.ConnectClient;
import software.amazon.awssdk.services.connect.model.DescribeContactRequest;
import software.amazon.awssdk.services.connect.model.DescribeContactResponse;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
import java.util.Map;

public class ConnectPostCallHandler implements RequestHandler<Map<String, Object>, String> {

    private final ConnectClient connectClient;

    public ConnectPostCallHandler() {
        // 初始化Connect客户端,使用Lambda执行角色的默认权限
        this.connectClient = ConnectClient.builder()
                .region(Region.US_EAST_1) // 替换为你的Connect实例区域
                .build();
    }

    @Override
    public String handleRequest(Map<String, Object> input, Context context) {
        // 从Contact Flow传递的参数中获取contact ID
        String contactId = (String) input.get("ContactId");
        String connectInstanceId = "你的Connect实例ID"; // 替换为你的实例ID

        try {
            // 调用DescribeContact获取通话核心数据
            DescribeContactRequest describeRequest = DescribeContactRequest.builder()
                    .instanceId(connectInstanceId)
                    .contactId(contactId)
                    .build();
            DescribeContactResponse describeResponse = connectClient.describeContact(describeRequest);

            // 提取所需数据
            String callerId = describeResponse.contact().customerEndpoint().address();
            long callDuration = describeResponse.contact().duration();
            Map<String, String> customAttributes = describeResponse.contact().attributes();

            // 这里添加你的数据处理逻辑(比如写入S3、DynamoDB等)
            context.getLogger().log("通话结束数据:来电ID=" + callerId + ",时长=" + callDuration + "秒");
            context.getLogger().log("自定义属性:" + customAttributes.toString());

            return "数据处理完成";
        } catch (Exception e) {
            context.getLogger().log("处理失败:" + e.getMessage());
            throw new RuntimeException("数据采集失败", e);
        }
    }
}

五、关键配置注意事项

  • 权限最小化:不要给Lambda执行角色全量的AmazonConnectFullAccess,建议只添加connect:DescribeContact和connect:GetContactAttributes权限,遵循最小权限原则。
  • 区域一致性:确保Connect实例、Lambda函数、EventBridge规则都在同一个AWS区域,避免跨区域调用的延迟和额外费用。
  • 错误处理:在Contact Flow的Lambda调用模块中添加错误分支,处理Lambda调用失败的情况(比如重试或记录日志)。

内容的提问来源于stack exchange,提问作者Mahmudul Hasan Shafin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 11:42:48