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

如何自动将超时状态的Amazon Connect坐席切换至离线状态?

自动化处理Amazon Connect坐席异常状态的方案

我之前帮好几个客户解决过一模一样的问题——坐席离岗忘切状态,导致运营指标乱飘,手动改又太麻烦。虽然Amazon Connect确实没提供直接切换坐席状态的API,但咱们可以组合几个AWS服务来实现自动化逻辑,完美解决这个需求。

核心思路

咱们的目标是:定期抓取所有坐席的实时状态,筛选出Missed/ACW/Error状态超过1小时的坐席,然后自动把他们切到Offline。核心就是用Connect的实时指标API拿数据,用Lambda做逻辑判断,再通过Contact Flow或者自动化界面来触发状态切换。

具体步骤拆解

1. 抓取坐席实时状态数据

首先得拿到每个坐席的当前状态和持续时间,这里最靠谱的方式是用Amazon Connect的GetCurrentMetricData API,专门用来拉取AGENTS类型的实时指标。我给你写个Python的示例代码,直接就能用:

import boto3

def get_agent_statuses(connect_instance_id, queue_ids=None):
    connect_client = boto3.client('connect')
    filters = {'Channels': ['VOICE']}
    if queue_ids:
        filters['Queues'] = queue_ids
    
    response = connect_client.get_current_metric_data(
        InstanceId=connect_instance_id,
        Filters=filters,
        Groupings=['AGENT'],
        CurrentMetrics=[{'Name': 'AGENT_STATUS', 'Unit': 'SECONDS'}]
    )
    
    agent_status_list = []
    for result in response['MetricResults']:
        agent_id = result['Dimensions']['Agent']['Id']
        agent_name = result['Dimensions']['Agent']['Name']
        # 提取状态和持续时间
        for metric in result['Collections']:
            if metric['Metric']['Name'] == 'AGENT_STATUS':
                status = metric['Value']['Status']
                duration_sec = metric['Value']['Value']
                agent_status_list.append({
                    'agent_id': agent_id,
                    'agent_name': agent_name,
                    'status': status,
                    'duration_sec': duration_sec
                })
    return agent_status_list

这个函数会返回所有坐席的ID、姓名、当前状态和状态持续时间,完全满足咱们的筛选需求。

2. 筛选需要处理的坐席

拿到数据后,就简单了——遍历列表,把状态是Missed/ACW/Error且持续时间超过3600秒的坐席挑出来:

def filter_agents_to_offline(agent_statuses):
    target_statuses = ['Missed', 'ACW', 'Error']
    threshold_sec = 3600  # 1小时
    return [agent for agent in agent_statuses if agent['status'] in target_statuses and agent['duration_sec'] >= threshold_sec]

3. 自动切换坐席到Offline

这是最关键的一步,因为没有直接的API,咱们有两个可行的方案:

方案A:用Contact Flow触发状态切换(推荐)

这个是官方支持的方式,稳定性高:

  1. 先在Amazon Connect控制台创建一个专门的Contact Flow:
    • 拖一个Set Agent Status组件,把状态设置为Offline
    • 再拖一个Disconnect / Hang Up组件,结束流程
  2. 然后在Lambda里调用Connect的StartOutboundVoiceContact API,触发这个Contact Flow,把目标坐席指定为接收者:
    def set_agent_to_offline(connect_instance_id, contact_flow_id, agent_id):
        connect_client = boto3.client('connect')
        try:
            response = connect_client.start_outbound_voice_contact(
                DestinationPhoneNumber='+1234567890',  # 随便填一个有效号码就行,不会真的拨出
                ContactFlowId=contact_flow_id,
                InstanceId=connect_instance_id,
                Attributes={'agent_id': agent_id}
            )
            print(f"Successfully triggered status change for agent {agent_id}")
            return True
        except Exception as e:
            print(f"Failed to set agent {agent_id} to offline: {str(e)}")
            return False
    
    注意:这个方式需要确保坐席没有正在处理的会话,否则状态切换会失败,所以可以在筛选的时候加个判断,或者捕获异常后重试。

方案B:自动化CCP界面(快速验证用)

如果不想折腾Contact Flow,可以用Selenium或者Playwright写个脚本,模拟管理员登录Connect的Real-time metrics报表页面,找到目标坐席,手动点击切换状态的按钮。不过这个方式要注意,一旦Connect的界面更新,脚本可能就失效了,适合临时用或者测试环境验证。

4. 定时执行任务

最后用Amazon EventBridge(之前叫CloudWatch Events)来定时触发Lambda函数,比如每15分钟跑一次,这样就能持续监控坐席状态了。配置起来很简单:

  • 创建一个EventBridge规则,选择固定频率(比如每15分钟)
  • 把Lambda函数设为目标,传递必要的参数(比如Connect实例ID、队列ID)

一些注意事项

  • 权限一定要配对:Lambda角色需要有connect:GetCurrentMetricData、connect:StartOutboundVoiceContact的权限,还要有EventBridge的触发权限
  • 先在测试环境验证:别直接在生产环境跑,先找几个测试坐席试试逻辑,避免误操作
  • 可以加告警:比如在Lambda里加个SNS通知,每次切换了坐席状态就发邮件给管理员,方便监控

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 00:07:47