分机示忙示闲接口(SET_EXT_PRESENCE_STATE)
适用于:OA/CRM 弹屏录单等场景,坐席录入客户信息期间临时置忙话机,让话务组暂停向该分机分发来电;保存退出后置闲恢复接听。 配套:配合 websocket-call-state 订阅
presence事件,可实时刷新坐席忙闲看板;配合 agent-supervision 的 EXTNUM_MONITOR 可轮询忙闲。
1. 状态语义与对来话的影响
分机在线状态共三个可设置值(存于分机属性,重启后仍保留):
| state 取值 | 含义 | 对来话分发的影响(源码行为) |
|---|---|---|
online | 示闲,正常接听 | 正常参与话务组/排队分发;由 busy 置回 online 时,该分机被排到话务组分发队尾(避免刚回来的坐席立刻又被分配) |
busy | 置忙 | 话务组/排队分发直接跳过该分机(不响铃);组空闲判定视为不可用 |
reducing | 减少来电 | 仍参与分发,但顺序/优先振铃的话务组会把它排到呼叫队列尾部(优先分给其他分机,轮到组内只剩它时才响铃);同时振铃组中与普通分机无差别 |
注意:置忙影响的是话务组/排队分发。点对点直呼该分机的呼叫路径不经过组分发,置忙不改变其行为。
2. 设置忙闲状态(SET_EXT_PRESENCE_STATE)
GET http://{cti_host}:12121/bridge/callctrl?extnum=801&state=busy&reason=LeaveSeat&opt=SET_EXT_PRESENCE_STATE
{cti_host}:12121 为 CTI 服务器 HTTP 地址,12121 为默认端口,以现场配置为准。GET 与 POST 等价(服务端 POST 委托给 GET 处理)。
| 参数 | 必填 | 说明 |
|---|---|---|
| extnum | 是 | 被设置状态的分机号码,如 801 |
| state | 是 | online 示闲 / busy 置忙 / reducing 减少来电。不区分大小写;其他任何取值(包括 unkown)返回 400 |
| reason | 否 | 忙闲原因,存入分机属性并展示在 Oms 分机管理;供对接系统配合展示业务场景,如 录单中、LeaveSeat。中文值建议 UTF-8 percent-encoding 后传输;注意明文中的 + 会被服务端二次解码为空格 |
| opt | 是 | 固定 SET_EXT_PRESENCE_STATE。官方《二次开发接口说明书》中印作 ET_EXT_PRESENCE_STATE 系笔误,以服务端实际取值为准 |
响应
HTTP 状态码恒为 200,业务结果写在响应体(纯文本业务码,与全部 /bridge/callctrl 接口一致,见 README §3.1):
| 业务码 | 含义 |
|---|---|
| 200 | 设置成功(含重复设置相同 state+reason 的幂等请求,服务端内部 410 已映射为 200) |
| 400 | 参数错误:缺 extnum/state,或 state 取值非法 |
| 404 | 目标分机不存在(系统中无此分机号) |
curl 示例
# 弹屏时置忙
curl "http://192.168.1.80:12121/bridge/callctrl?extnum=801&state=busy&reason=LeaveSeat&opt=SET_EXT_PRESENCE_STATE"
# 录单保存后置闲
curl "http://192.168.1.80:12121/bridge/callctrl?extnum=801&state=online&opt=SET_EXT_PRESENCE_STATE"
# 坐席临时改为少接来电(仍保留在话务组)
curl "http://192.168.1.80:12121/bridge/callctrl?extnum=801&state=reducing&opt=SET_EXT_PRESENCE_STATE"
# 带中文原因(UTF-8 percent-encoding)
curl "http://192.168.1.80:12121/bridge/callctrl?extnum=801&state=busy&reason=%E5%BD%95%E5%8D%95%E4%B8%AD&opt=SET_EXT_PRESENCE_STATE"
调用模式建议
弹屏生命周期内"置忙 → 业务完成 → 置闲"必须成对调用:置忙后未置闲,该分机将持续不被分配来电。客户端崩溃/关页导致漏发置闲时,可用 GET 接口(见 §3)配合看板核查,或由坐席手动恢复。接口幂等,重复设置相同状态无副作用。
3. 查询分机忙闲状态(GET_EXT_PRESENCE_STATE)
GET http://{cti_host}:12121/bridge/callctrl?extnum=801&opt=GET_EXT_PRESENCE_STATE
| 参数 | 必填 | 说明 |
|---|---|---|
| extnum | 是 | 分机号码 |
| opt | 是 | 固定 GET_EXT_PRESENCE_STATE |
分机存在时响应体(注意:键名无引号的非严格 JSON,不要用严格 JSON 解析器,建议正则提取):
{"extnum":"801", "state":"online", "expired":false}
| 字段 | 含义 |
|---|---|
| state | 当前忙闲状态,取值 online / busy / reducing / unkown(未知,拼写即如此) |
| expired | 该分机注册是否已过期 |
分机不存在或查询失败时,响应体为文本 unkown。
4. 设置成功后的服务端联动
一次成功的 SET 会触发以下动作,对接方可据此设计下游逻辑:
- 状态持久化:写入分机表(
presentstate/presencereason/presencetime),重启不丢; - WebSocket presence 通知:向订阅该分机的客户端推送
{"extnum":"801","state":"busy","sceenShowType":"presence"}(字段sceenShowType为历史拼写,勿改;见 websocket-call-state §4.2); - 操作日志:写入后台操作日志,操作人取坐席助手登录名/工号/分机号;置忙时服务端自动附加备注(
offduty下班置忙 /working通话置忙 /rest闲时置忙),与reason参数相互独立; - 话务统计打点:就绪/案面时长统计(置闲且空闲时打就绪起点)。
5. 常见问题排查
| 现象 | 原因与处理 |
|---|---|
| 返回 400 | 缺 extnum/state;或 state 值非法(仅接受 online/reducing/busy,大小写不敏感;传 unkown 也是 400);或 opt 拼写错(非法 opt 统一落 400) |
| 返回 404 | 分机号在系统中不存在,核对分机配置 |
| 置忙成功但分机仍被叫响 | 来电来自点对点直呼或该分机不在话务组;置忙只拦截话务组/排队分发(见 §1) |
| 未调用接口,分机状态却变了 | 忙闲状态存在多个写入口:话机拨打置忙功能码(reason 记为 Dial To)、Oms 后台手工修改、下班时间自动置忙(offduty)、网页坐席离开(Third Web Left)。对接系统应以订阅 presence 事件为准,而非假设只有自己改状态 |
| 中文 reason 展示乱码 | 用 UTF-8 percent-encoding 传输(见 §2 参数表);避免在 reason 明文中使用 + |
| 幂等性疑问 | 相同 state+reason 重复调用返回 200,无副作用;仅当 state 或 reason 变化时才产生一次新的状态变更记录 |
