FreeSWITCH和CRM接口
主要用于和第三方的CRM等进行通信的接口,底层采用FreeSWITCH和语音网关等对接,由NWAY_CRM_INTERFACE检测FreeSWITCH中的通信状态,并通过动态链接库、Restful接口将对应的信息状态发送给和本系统对接的CRM系统中。
功能:
1. 使用c++开发的状态采集器(对CRM来说则是服务端)可跨平台运行。
2. 使用动态库作为通信接口,可以异机与crm对接。
3. 使用tcp通信保证通信的可靠性和即时性。
4. 将动态库封装成为Restful接口,方便web直接连接与使用。
5. 采用的FreeSWITCH可以更可靠,更大并发地跑相关业务应用。
6. 更多有待于来电咨询。
参考动态库的头文件
#ifndef __NWAY_COM_CN_LIB_LPCC_H
#define __NWAY_COM_CN_LIB_LPCC_H #define DllExport extern "C" __declspec(dllexport) #include "resource.h" // main symbols #ifdef __cplusplus extern "C" { #endif typedef void (__stdcall *CallBackEvent)(const char* call_event,const char* ext_id,const char* visitor_id, \ const char* from,const char* to ,const char* caller_id, int duration); typedef void (__stdcall *CallBackCdr)(int callid,const char* call_type ,int flag_id,const char* route, \ const char* time_start,const char* time_end,const char* cpn,const char* cdpn, int duration,const char* trunk_number, const char* record_file, const char* cdr_id); //连接到服务器
//返回值:0为成功
//ip 为ipv4的地址
//port 为端口 DllExport int __stdcall NWConnect(const char* ip, short port); //断开服务器连接 DllExport void __stdcall DisConnect(); //获取分机信息
//返回值:0为成功
//ext_number:传入的分机号
//staffid:返回的工号
//mobile:员工手机
//record:录音
//voicefile:语音文件
//call_direction:通话方向,in呼入,out呼出 /*state:
//号码的状态,activeReady: 分机空闲
//Active: 摘机、振铃或通话中
//Block: 分机挂起(suspend)
*/ //trunk_number:中继号码
//other_leg_number:通话号码
//call_state: //呼叫时的状态,Talk: 通话中 //Progress: 摘机或通话挂起 //Wait: 呼叫方处于分机等待队列中
//disturb :是否免打扰 DllExport int __stdcall GetExtInfo(const char* ext_number, char* staffid,char* mobile, \ char* record,char* voicefile,char* call_direction,char* state,char* trunk_number, \ char* other_leg_number,char* call_state, char* disturb); /*
呼叫号码
返回值:0为成功
call_type:要呼的类型,0表示分机呼分机,1表示由分机呼外线
ext_number:分机号码
call_to_number:对方号码,手机号或另一个分机号
//res_state:呼叫返回值 废弃
res_text:如果呼叫失败,返回的字符串
*/ DllExport int __stdcall CallDial(short call_type,const char* ext_number,const char* call_to_number, char* res_text); /*
获得当前通话
filename:由于多语音传输的问题,在这里就将一个外部文件名传入
返回值:0为成功
//文件内容,按行解析
from , to, ext_id,state, trunk, callid, direction
来源号码,被叫号码,分机号,状态,中继,内部呼叫id,方向
*/ DllExport int __stdcall GetCalls(const char* filename); /*
获得设备信息
返回值:0为成功
res_text:如果获取失败的返回字符串
model:由设备决定
filename:由于要传多组数据,同时多语言支持,就写入文件中
文件格式
string, string, string
分机信息
lineid, id, '1'
中继信息
lineid, id, '2'
组信息
id, ext_id, '3'
*/ DllExport int __stdcall GetDevice(char* res_text,char* model,const char* filename); /*
设置免打扰
返回值:0成功
ext_id:分机号
disturb:yes设置,no解除免打扰
lineid: 从设备获取到的lineid
res_text:当返回非0时返回的字符串
*/ DllExport int __stdcall SetDisturb(const char* ext_id,const char* disturb,const char* lineid, char* res_text); /*
设置事件回调
返回值:0成功
eventcb:事件回调的函数指针
回送的信息
string event =1;事件
string ext_id=2; // 分机
string visitor_id =3 ;//网关中的来电编号
string from = 4; 主叫
string to = 5; 被叫
string callerid = 6; //网关中的呼叫编号
int32 duration = 7; 方向
*/ DllExport int __stdcall SetEventCallBack(CallBackEvent eventcb); /*
设置CDR回调
返回值:0成功
cdrcb:CDR回调的函数指针
回送的信息
int32 callid = 1;
string type=2; //IN(打入)/OU(打出)/FI(呼叫转移入)/FW(呼叫转移出)/LO(内部通话)/CB(双向外呼)
int32 flag_id = 3;//来电标识号或者去电标识号,内部分机通话记录无此字段,标为0。
string route = 4;//IP(IP中继)/XO(模拟中继)/IC(内部)/OP(总机)
string timeStart = 5; 开始时间
string timeEnd = 6; 结束时间
string CPN = 7; 主叫
string CDPN = 8; 被叫
int32 duration = 9; 时长
string trunk_number = 10; //路由所经过的中继
string recordfile = 11; //录音文件路径
string cdr_id = 12;
*/ DllExport int __stdcall SetCdrCallBack(CallBackCdr cdrcb); #ifdef __cplusplus } #endif
#endif