freeswitch怎么配置mysql数据库 centos freeswitch框架
转载
使用modformatcdr模块传递json/xml进行HTTP服务接受话单
一、安装配置modformatcdr
1. 源码目录下打开vim modules.conf取消event_handlers/mod_format_cdr这一行的注释 ,如果没有,添加一行
2.源码目录下安装mod_format_cdr模块
make mod_format_cdr-install
3. 然后进入modules.conf.xml取消掉mod_format_cdr的注释即可自动加载
4. 加载模块load mod_format_cdr
5. 注意 安装好后建议从启freeswitch服务器,因为我使用load mod_format_cdr发现无用
二、配置接收地址和传输数据格式
1. 必须至少定义一个配置文件,配置接收地址,数据格式等:
vim autoload_configs/format_cdr.conf.xml
<configuration name="format_cdr.conf" description="Multi Format CDR CURL logger">
<profiles>
<profile name="default">
<settings>
<param name="format" value="json"/>
<param name="url" value="http://192.168.0.103:80/callCenter/cdr.php"/>
<param name="encode" value="true"/>
<param name="encode-values" value="false"/>
<param name="log-dir" value="/media/sf_share/log/cdr"/>
<param name="err-log-dir" value="/media/sf_share/log/cdr/error"/>
</settings>
</profile>
</profiles>
</configuration>
format参数以指示该特定配置文件的所需输出格式(JSON/XML)
url:发送的http的地址话单处理文件
encode:url是否要base64编码
log-dir日志本地保存目录
err-log-dir如果使用url提交CDR失败,则模块将使用每个err-log-dir回退到文件模式,保证话单不会丢失
三、cdr.php配置
1. 引入文件操作工具文件
require_once "include/common.php";
2. 获取fs传递得话单数据并格式化,有反斜杠
$data = trim($_POST["cdr"]);
$obj = json_decode(qsFun::stripslashes($data));
3. 逻辑处理,整理数据插入数据库
1.判断呼叫号码是否是分机号,判断接听号码是否是分机号
呼叫号码是,接听号码不是,呼出
呼叫号码是,接听号码是,内呼
呼叫号码不是,接听号码不是,呼入
呼叫号码不是,接听号码是,呼入
2.根据call_uuid判断是否是一个通话,然后合为一个
3.根据billsec是否大于0判断是否通话成功
4. 获取call_uuid查询数据库是否存在,存在更新,不存在插入,全部代码
require_once "include/common.php";
$data = trim($_POST["cdr"]);
$obj = json_decode(qsFun::stripslashes($data));
if (!empty($obj)) {
$isInsert = false;//判断是否是分机之间呼叫,不做记录
$sofia_profile_name = "I";//呼入为“I”呼出为“O”
$host='';//呼叫的地址
$rdnis='';//落地号
$call_uuid = $obj->variables->call_uuid; //统一的呼叫id
$lock = new QsLock($call_uuid); //添加锁工具,防止查询时候的同时查询,还没有查询就插入了
$i = 0;
//添加数据查询锁
while(1){
if(!$lock->lock()){
usleep(1000);
if($i++ <100) continue;
}
break;
}
var_dump($call_uuid);
$cdrs = $sqs_db->fetch_array($sqs_db->query("select * from fs_cdr WHERE call_id ='".$call_uuid."'"));
$billsec = $obj->variables->billsec; //计费的通话时长
$calltime = $obj->variables->start_stamp; //通话的开始时间
$duration = $obj->variables->duration; //通话的总时长
$caller_id_number = $obj->callflow[0]->caller_profile->caller_id_number; //呼出号码
$destination_number = $obj->callflow[0]->caller_profile->destination_number; //接听号码
$ringtime = $duration - $billsec; //响铃时长
$rdnis = $obj->callflow[0]->caller_profile->rdnis; //落地号
$originatee = $obj->callflow[0]->caller_profile->originatee; //
$originator = $obj->callflow[0]->caller_profile->originator;
var_dump($originator);
//查询呼叫号码和接听号码是否是分机号
$query1 = $sqs_db->fetch_array($sqs_db->query("select * from fs_user WHERE username=$caller_id_number"));
$query2 = $sqs_db->fetch_array($sqs_db->query("select * from fs_user WHERE username=$destination_number"));
/*
呼叫号码是,接听号码是,内呼
呼叫号码是,接听号码不是,呼出
呼叫号码不是,接听号码不是,呼入
呼叫号码不是,接听号码是,呼入*/
var_dump($query1);
if (!empty($query2) && !empty($query1)) {
$isInsert = false;
} else if (empty($query2) && !empty($query1)) {
$isInsert = true;
$sofia_profile_name = "O";
} else if (empty($query2) && empty($query1)) {
$isInsert = true;
$sofia_profile_name = "I";
} else if (!empty($query2) && empty($query1)) {
$isInsert = true;
$sofia_profile_name = "I";
}
var_dump($sofia_profile_name);
//呼入取originatee,呼出取originator,取不同的host地址
if ($sofia_profile_name == "I" && !empty($originatee)) {
$host = $obj->callflow[0]->caller_profile->network_addr;
}else if ($sofia_profile_name == "O" && !empty($originator)){
$host = $obj->callflow[0]->caller_profile->network_addr;
}
var_dump($host);
if ($isInsert) {//判断是否是内部呼叫
var_dump($isInsert);
if ($cdrs){ //判断数据是否是重复的合为一条
if (empty($host)){//判断host是否存在,如果没有就不更改
$sqs_db->query("update fs_cdr set rdnis='$rdnis'");
}else{
$sqs_db->query("update fs_cdr set host='$host',rdnis='$rdnis'");
}
}else {
$sqs_db->query("insert into fs_cdr(callname,destination_number,outlong,callstatus,calltime,ringtime,rdnis,host,call_id,out_group,call_group,contact)values('$caller_id_number','$destination_number','$billsec','$sofia_profile_name','$calltime','$ringtime','$rdnis','$host','$call_uuid','','','$data')");
}
}
$lock->unlock();//关锁
}
本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。