1.话务步骤
分机注册(需要查询分机状态来判断是否可用)->登录(接听呼入电话需要登录到指定queue)->拨打电话->就绪->未就绪-> 登出。
根据相应事件产生自己需要的事件,之后根据dn关联坐席的websocket,之后把解析的信息推送到前端,做软电话按钮的展现。
- 解析header获取信息
String callUuid = event.get("Channel-Call-UUID"); String eventDate = event.get("Event-Date-Local"); String logicalDirection = event.get("Caller-Logical-Direction"); String thisDn = event.get("variable_dialed_user");//被叫 String otherDn = event.get("Caller-Caller-ID-Number");//主叫 String answerState = event.get("Answer-State");//话务状态->ringing String switchName = event.get("FreeSWITCH-Switchname"); String ani = event.get("Caller-Caller-ID-Number"); String dnis = event.get("Caller-Callee-ID-Number"); logger.info("【Fs EsEvent】->>> onEventDialing EsEvent callUuid:{},eventDate:{}, logicalDirection:{}, thisDn:{},otherDn:{},answerState:{},switchName:{}", callUuid, eventDate, logicalDirection, thisDn, otherDn, answerState, switchName); Integer referenceId = Integer.valueOf(event.get("Event-Sequence"));
- 前端JSON返回消息体
{
"agentId": "21009",
"ani": "0000000000",
"callType": "outbound",
"callUuid": "b85e2357-c85d-4eaf-be09-e08b48a2650e",
"connId": "b85e2357-c85d-4eaf-be09-e08b48a2650e",
"dnis": "1000",
"eventType": "EVENT_DIALING",
"mediaType": "voice",
"messageType": "VoiceCallStateChangeMessage",
"referenceId": 47755,
"sessionId": "079dc84e-a643-4dd7-86fa-d9a991008c08",
"thisDn": "1000"
}
2. sdk调用方式
/*<--注册分机-->*/ //EslMessage eslMessage1 =inboundClient.sendApiCommand("callcenter_config agent set contact", "21010@default user/1000"); //System.out.println("#####dial eslMessage: "+eslMessage1.getHeaders().toString()); //System.out.println("#####dial eslMessage: "+eslMessage1.getBodyLines().toString()+"=&&="+eslMessage1.getBodyLines().get(0));
/*<--查询分机状态-->*/ // EslMessage eslMessage=inboundClient.sendApiCommand("list_users", "group default user 1000"); //System.out.println("#####eslMessage: "+eslMessage.getHeaders().toString()); //System.out.println("#####eslMessage: "+eslMessage.getBodyLines().get(0)); /*<--播放欢迎语-->*/ //inboundClient.sendBackgroundApiCommand("originate", "user/1000 &playback(/usr/local/freeswitch/sounds/huanying.wav)"); //inboundClient.sendBackgroundApiCommand("callcenter_config agent set status", "21009@default 'Available'"); /*<--就绪-->*/ //inboundClient.sendBackgroundApiCommand("callcenter_config agent set status", "21009@default 'Available'"); /*<--登出-->*/ //inboundClient.sendBackgroundApiCommand("callcenter_config agent set status", "21009@default 'Logged Out'"); /*<--拨打电话异步(没有事件消息)-->*/ //inboundClient.sendBackgroundApiCommand("originate", "user/1000 1001"); /*<--拨打电话同步-->*/ //EslMessage eslMessage1=inboundClient.sendApiCommand("originate", "user/1000 1001"); //System.out.println("#####dial eslMessage: "+eslMessage1.getHeaders().toString()); //System.out.println("#####dial eslMessage: "+eslMessage1.getBodyLines().toString()+"&&"+eslMessage1.getBodyLines().get(0)); /*<--登录到queue-->*/ //inboundClient.sendBackgroundApiCommand("callcenter_config tier add", "support@default 21009@default 1 1"); //callcenter_config tier set [key(state|level|position)] [queue name] [agent name] [value] //*<--登录到queue-->*/ // inboundClient.sendBackgroundApiCommand("callcenter_config tier add", "support@default 21009@default 1 1"); //EslMessage eslMessage1=inboundClient.sendApiCommand("callcenter_config tier add", "support@default 21009@default 1 1");; //#####dial eslMessage: [-ERR Tier already exist!]&&-ERR Tier already exist! //System.out.println("#####dial eslMessage: "+eslMessage1.getHeaders().toString()); //System.out.println("#####dial eslMessage: "+eslMessage1.getBodyLines().toString()+"&&"+eslMessage1.getBodyLines().get(0)); /*<--这个queue未就绪-->*/ // support@default 21009@default on break //inboundClient.sendBackgroundApiCommand("callcenter_config tier set state", "support@default 21009@default on break"); System.out.println("###################Fs excuted start############");
3.转换成软电话事件
PS:待后续完善