在呼叫中心自动化场景中,自动外呼转人工时显示正确的被叫号码是提升客服效率的关键。若系统仅展示路由条件(如队列ID、技能组名称),而非实际用户号码,会导致客服人员无法快速识别来电身份,影响服务响应速度。本文将通过分步骤配置指南,结合参数解析与最佳实践,帮助开发者实现”转人工时显示被叫号码”的核心需求。
一、技术原理与核心配置逻辑
呼叫中心中间件在自动外呼流程中,需通过信号处理模块完成号码透传。其核心逻辑分为三步:
- 外呼阶段:系统发起呼叫时,将主叫号码(IVR虚拟号)与被叫号码(用户真实号)绑定为”号码对”存储至会话上下文。
- 转人工触发:当用户选择转人工服务时,中间件需从会话上下文中提取被叫号码,而非依赖路由规则生成的临时标识。
- 显示层渲染:坐席终端根据中间件传递的参数,优先展示被叫号码字段,隐藏路由条件等中间信息。
关键参数对照表
| 参数名称 | 作用域 | 默认值 | 推荐配置 |
|—————————|————————-|————|———————————————|
| caller_display | 外呼任务配置 | 路由ID | 设置为${target_number} |
| context_carry | 会话管理模块 | 禁用 | 启用number_pair字段透传 |
| ui_mapping | 坐席终端配置 | 队列名 | 绑定context.target_number |
二、分步骤配置实施
步骤1:外呼任务参数配置
在中间件管理控制台中,进入”自动外呼任务”配置页面,重点修改以下字段:
<!-- 示例配置片段(伪代码) --><outbound_task><caller_display_policy><primary_field>${target_number}</primary_field><fallback_field>route_id</fallback_field></caller_display_policy><context_carry_rules><include field="target_number" /><include field="call_reason" /></context_carry_rules></outbound_task>
操作要点:
- 将
primary_field值设为变量${target_number},确保优先使用被叫号码 - 在
context_carry_rules中显式包含目标号码字段,避免被系统过滤
步骤2:路由规则优化
在智能路由配置界面,需确保路由决策后不覆盖原始号码信息:
- 进入”路由策略-高级设置”
- 关闭
overwrite_caller_info选项 - 在条件匹配规则中,避免将路由组ID写入
display_name字段
典型错误配置示例:
// 错误:将路由条件写入显示字段if (skill_group === 'vip') {display_name = 'VIP队列-' + route_id; // 应避免此类拼接}
步骤3:坐席终端适配
针对不同终端类型(Web/APP/硬件话机),需分别配置显示映射规则:
- Web坐席:在终端配置文件中添加字段映射:
{"display_fields": [{"source": "context.target_number", "label": "客户号码"},{"source": "route.name", "label": "技能组", "hidden": true}]}
- SIP话机:通过自定义头域传递号码:
P-Asserted-Identity: "用户138xxxx"<sip:138xxxx@domain.com>
三、验证与故障排查
验证方法
- 日志检查:在中间件日志中搜索
DISPLAY_NUMBER字段,确认值与被叫号码一致 - 抓包分析:使用Wireshark捕获SIP信令,验证
From头域是否包含原始号码 - 坐席视角测试:以普通坐席身份接听转人工来电,记录显示的号码类型
常见问题处理
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| 仍显示路由ID | 上下文透传未生效 | 检查context_carry配置是否包含目标字段 |
| 显示为空 | 变量解析失败 | 在调试模式查看变量替换结果 |
| 显示部分号码(如后4位) | 隐私策略拦截 | 调整号码脱敏规则,区分存储与显示逻辑 |
四、性能优化建议
-
缓存策略:对高频外呼号码建立本地缓存,减少数据库查询
// 伪代码:号码缓存示例Cache<String, String> numberCache = Caffeine.newBuilder().maximumSize(10000).expireAfterWrite(10, TimeUnit.MINUTES).build();String getDisplayNumber(String taskId) {return numberCache.get(taskId, k -> fetchFromDB(k));}
- 字段精简:在
context_carry中仅保留必要字段,降低网络传输开销 - 异步处理:将号码解析等非实时操作放入消息队列,避免阻塞主流程
五、安全与合规考量
- 号码脱敏:在日志和存储层面,对完整号码进行部分隐藏(如
138****1234) - 权限控制:限制坐席查看完整号码的权限,按角色分配显示级别
- 审计追踪:记录所有号码显示操作,满足合规审查需求
通过上述配置,可实现自动外呼转人工时100%显示被叫号码的目标。实际部署中,建议先在测试环境验证所有场景(包括跨路由组转接、多级IVR等复杂流程),再逐步推广至生产环境。定期检查系统配置是否因版本升级发生变更,确保显示逻辑持续有效。