FSGUI**动态座席组及最新的推送事件的接口**
到2020-7实现的座席组逻辑如下:
a. 在系统中预定几个组,如 110,12345,12320等
B. 接着由座席上线时,指定上线了哪几个组
d. 优先进行和组配套的黑名单,如果是处于黑名单就挂 机或放音
e. 接着查询历史沟通记录,如果记忆中的座席空闲,那么就由该座席来处理,否则找空闲座席处理
f. 如果没有历史沟通,就直接找该组空闲座席
g. 如果没空闲座席了,则判断是vip还是普通用户来电,有一定时器,不断优先判断vip的来电,接着判断普通的来电,在查找到有空闲座席的情况下,转给该空闲座席.
h. 不同的客户,需求有所不同,在有关挂 机的要求,有的要求放音几次后挂 ,有的是,客户不挂 机,我们不主动挂 机,按实际来配.
-
获取token
返回值: "token":"token code"
非正常返回值: "Not Authorized"
curl -d '{"username": "admin", "password": "admin"}' -H "Content-Type:application/json" http://ip:8085/api/login
-
上线
让座席分机为上线或下线,即up or down //up为上线 //down为下线
里边的组,可以为多个如: "12345,12320"
curl -H "Content-Type: application/json" -d '{"Extension":"1002","Value":"up" ,"Groups":"12345,110"}' -H "Authorization:Nway token " http://ip:8085/api/extension_seatstate
-
分机忙闲
让座席分机置忙或置闲 ,这里和设置呼叫状态,在不同的客户需求时,需要进行分开,否则可能只用呼叫状态一项处理不了
//ready or rest //ready 意为设置为闲 //rest 意为设置为忙,小休,开会等
curl -H "Content-Type: application/json" -d '{"Extension":"1002","Value":"ready" }' -H "Authorization:Nway token " http://ip:8085/api/extension_seatstatus
-
设置呼叫状态
//ring,talking,ivr,ready,typing,no_answer, no_ready //ready是等待电话-置闲 //talking是正在通话中 //typing 整理态,接完电话后在整理,默认5分钟 //no_answer 久不应答,即响铃后座席未接 //busy 置忙 //rest 小休
curl -H "Content-Type: application/json" -d '{"Extension":"1002","Value":"ring" }' -H "Authorization:Nway token " http://ip:8085/api/extension_callstate
-
获取排队中的来电
按以下的信息返回排队中的电话信息
Uuid string //呼入的channel的uuid Number string //呼入的号码 RealCallinNumber string //实际呼入的号码 Group string //进入的组 Level string //保留用于normal,vip CallinTime time.Time //呼入时间
curl -H "Authorization:Nway token " http://ip:8085/api/queues
-
获取所有的分机状态
按以下的信息返回所有的分机状态信息
Extension string RegStatus string AgentState string CallState string LastStatusChangeTime string
curl -H "Authorization:Nway token " http://ip:8085/api/get_extensions
-
事件和消息的推送
我们使用redis的pub/sub模式推送如来电,挂 机等事件,以及来电排队等事件,以及cdr
a. 来电,振铃,接通,挂 机等事件
需要psubscribe event_*
就会将所有的event事件推过来
模式如下:
evt_name,callin_number, dest_number, domain, dtmf, gateway, originate_number, direction, auuid, buuid, origination_dest_number
其中evt_name为以下项:
EVENT_CALLIN EVENT_NAME = 1 + iota //呼入 EVENT_CALLOUT //呼出 EVENT_RING //回铃 EVNET_ALERT //振铃 EVENT_ANSWER //应答 EVENT_HANGUP //座席 EVENT_DTMF //按键 EVENT_PLAYRING //开始放音 EVENT_PLAYSTOP //放音结束 EVENT_PARK //park掉 EVENT_UNPARK //解决park EVENT_HOLD //hold掉 EVENT_UNHOLD //unhold EVENT_BRIDGED //已桥接 EVENT_DESTORY //已完全释放 EVENT_TALKING //正在通话中 EVENT_DA //回铃检测
Callin_number为呼入号码,或称为主叫号码
dest_number 目标号码
domain 域,先不用考虑
dtmf, 如果是按键,则这里有值
gateway, 如果是呼出,则这是呼出的gateway名称
originate_number, 原主叫号码
direction, 呼入还是呼出
auuid, 这条通道的uuid
buuid, 关联通道的uuid
origination_dest_number 原始被叫号码
b. 通话详单信息
以前采用http推送模式,虽然也没什么影 响,但后来还是采用redis或进一步放个大点的mq等的来完成推送消息的过程
psubscribe cdr_*
其中,主叫,被叫,如果是呼入到座席,那么中间经过了几个没有回应或转接的信息都一起推送过来,如代码:
arr := []string{strings.Trim(uuid, " "), strings.Trim(a_caller_id_number, " "), strings.Trim(a_destination_number, " "), strings.Trim(a_start_stamp, " "), strings.Trim(a_answer_stamp, " "), strings.Trim(a_end_stamp, " "), strings.Trim(a_duration, " "), strings.Trim(a_billsec, " "), strings.Trim(a_sip_hangup_disposition, " "), strings.Trim(a_record_file, " "), strings.Trim(str_no_answer_agents, " "), strings.Trim(destination_number, " "), strings.Trim(start_stamp, " "), strings.Trim(answer_stamp, " "), strings.Trim(end_stamp, " "), strings.Trim(duration, " "), strings.Trim(billsec, " ")} if len(no_answer_agents) > 0 { var tmpstr string tmpstr = "{" for _, v := range no_answer_agents { tmpstr += v + "," } tmpstr = tmpstr[:len(tmpstr)-1] tmpstr += "}" arr = append(arr, tmpstr) } else { arr = append(arr, "") }
c. 排队信息
psubscripe queue_*
其大概信息如下:
method, uuid, number, group, level, callin_time
d. 在分机发生状态变化时,由系统向外发状态变更
psubscripe agent_*
其大概信息如下:
number, status, time