如何设置坐席两次呼入来电分配的间隔延迟
实现坐席拒接来电后分配间隔延迟的方案
核心设计思路
给每个坐席新增拒接冷却到期时间戳的状态字段,分配来电时实时校验当前时间是否超出冷却到期时间,仅符合条件的坐席才会进入待分配池。
该方案不需要额外跑定时任务修改坐席状态,仅通过分配时的实时时间对比实现,性能开销极低,并发适配性好。
具体实现步骤
- 扩展坐席状态数据结构,新增
reject_cooldown_until字段,存储Unix毫秒级时间戳,默认值为0 - 修改坐席拒接来电的触发逻辑:当坐席点击拒接来电后,立即将该字段更新为
当前时间 + 预设冷却间隔(例如2000毫秒) - 调整呼入来电的坐席筛选逻辑:原有空闲、权限匹配等筛选条件之外,新增判断规则
当前时间 >= 坐席.reject_cooldown_until,不满足规则的坐席直接排除出待分配列表 - 可选扩展:在坐席后台和运营后台增加冷却状态展示,方便相关人员感知当前坐席的分配限制状态
参考实现伪代码
// 配置项:拒接后冷却时长,单位毫秒,可支持后台动态配置 const REJECT_COOLDOWN_MS = 2000 // 坐席拒接来电时触发的逻辑 function handleAgentReject(agentId) { updateAgentData(agentId, { reject_cooldown_until: Date.now() + REJECT_COOLDOWN_MS }) } // 呼入来电分配时筛选可用坐席的逻辑 function filterAvailableAgents() { const allOnlineAgents = getAllOnlineAgents() const currentTime = Date.now() return allOnlineAgents.filter(agent => { // 原有筛选条件:空闲、技能匹配、未签出等 const baseCondition = agent.isIdle && agent.skillMatch && !agent.isSignedOut // 新增冷却校验条件 const cooldownCondition = currentTime >= agent.reject_cooldown_until return baseCondition && cooldownCondition }) }
边界场景适配
- 若冷却时间内无其他可用坐席,可根据业务需求二选一:要么将来电置入等待队列,冷却时间到期后再分配给该坐席;要么直接分配给备用技能组坐席
- 若坐席在冷却时间内主动切换为忙碌/离线状态,冷却时间正常计时,无需额外处理
- 可支持分层配置:不同等级、不同技能组的坐席配置不同的冷却时长,比如新人坐席可设置更长的间隔,降低连续拒接的概率
内容的提问来源于stack exchange,提问作者Nikunj Pithadiya
相关产品推荐
相关产品推荐

