Freeswitch实现软电话功能

本文详细描述了FreeSWITCH中的电话呼叫流程,包括分机注册、登录queue、拨打和挂断电话等步骤,以及如何通过SDK进行操作,并涉及将事件解析为前端可展示的消息。还提及了使用websocket通信和前端返回的JSON消息结构。
摘要由CSDN通过智能技术生成

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:待后续完善 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值