作為軟交換平臺(tái),很多時(shí)候管理員平臺(tái)需要對(duì)呼叫進(jìn)行實(shí)時(shí)監(jiān)控,或者對(duì)某些正在進(jìn)行的呼叫進(jìn)行統(tǒng)計(jì),以便方便系統(tǒng)管理。在本期的講座中,我們使用開(kāi)源軟交換的dialog 模塊對(duì)已經(jīng)接聽(tīng)的呼叫和正在進(jìn)行的呼叫做一個(gè)實(shí)時(shí)輸出。通過(guò)系統(tǒng)輸出日志,我們可以看到呼叫的狀態(tài)信息,對(duì)呼叫進(jìn)行計(jì)數(shù)處理。
1、在本講座中,我們會(huì)使用dialog 模塊推廣不同的參數(shù)配置支持不同的呼叫狀態(tài)打印。用戶(hù)需要配置和加載dialog 模塊,使用分機(jī)對(duì)其其他分機(jī)進(jìn)行呼叫測(cè)試。
2、配置此示例,用戶(hù)需要修改幾個(gè)配置文件的內(nèi)容。首先需要加載dialog模塊:
loadmodule "dialog.so"
modparam("dialog", "profiles_with_value", "caller ; domain")
modparam("dialog", "profiles_no_value", "progress ; active")
modparam("dialog", "db_mode", 2)
modparam("dialog", "db_url",
"mysql://opensips:opensipsrw@localhost/opensips") // 注意修改到客戶(hù)自己的IP 地址。
然后創(chuàng)建一個(gè)dialog 會(huì)話(huà)處理流程,并且啟動(dòng)計(jì)數(shù)器設(shè)置
create_dialog();
# 設(shè)置 profile
if($DLG_status!=NULL && is_method("INVITE")) {
set_dlg_profile("caller","$fU@$fd");
set_dlg_profile("domain","$fd");
}
#啟動(dòng)呼叫方計(jì)數(shù)
$var(ccaller)=0;
#啟動(dòng)從此 domain 計(jì)數(shù)
$var(cdomain)=0;
$var(ccaller)=get_profile_size("caller","$fU@$fd","$var(ccaller)");
$var(cdomain)=get_profile_size("caller","$fd","$var(cdomain)");
# 打印輸出信息
xlog("L_INFO", "Number of calls from user $fU@$fd is $var(ccaller)");
xlog("L_INFO", "Number of calls from domain $fd is $var(cdomain)");
對(duì)處理reply 的流程進(jìn)行處理,并且對(duì)已接通呼叫和正在進(jìn)行的呼叫進(jìn)行計(jì)數(shù)處理:
onreply_route[handle_nat] {
if($DLG_status!=NULL) {
if($rs=~"18[0-9]") {
set_dlg_profile("progress");
} else {
if(is_in_profile("progress")) unset_dlg_profile("progress");
}
if($rs=~"2[0-9][0-9]") {
set_dlg_profile("active");
} else {
if(is_in_profile("active")) unset_dlg_profile("active");
}
}
if(is_method("INVITE")) {
#激活已呼叫的計(jì)數(shù)器
$var(cactive)=0;
#處理正在呼叫的計(jì)數(shù)
$var(cprogress)=0;
get_profile_size("active","$var(cactive)");
get_profile_size("progress","$var(inprogress)");
# 進(jìn)行l(wèi)og打印
xlog("L_INFO","There are $var(cactive) active calls and $var(inprogress) calls in progress");
}
3、保存以上配置文件,重新加載cfg文件。用戶(hù)可以分別通過(guò)兩種方式進(jìn)行呼叫測(cè)試:
- 通過(guò)軟電話(huà)A對(duì)另外一個(gè)分機(jī)B進(jìn)行呼叫,B接聽(tīng), 然后置于等待狀態(tài)
- 通過(guò)另外一個(gè)軟電話(huà)對(duì)B進(jìn)行呼叫
4、在本章節(jié)中,我們提供dialog模塊對(duì)系統(tǒng)呼叫進(jìn)行計(jì)數(shù)處理。這里,用戶(hù)需要根據(jù)dialog加載所需參數(shù),在cfg文件中需要?jiǎng)?chuàng)建dialog,然后啟動(dòng)對(duì)已接聽(tīng)呼叫和正在進(jìn)行的呼叫進(jìn)行計(jì)數(shù),最后通過(guò)xlog輸出呼叫日志信息。另外,還要對(duì)reply進(jìn)行計(jì)數(shù)處理。此示例可以幫助用戶(hù)實(shí)時(shí)監(jiān)控呼叫狀態(tài),它提供了非常方便的監(jiān)控排查方式,用戶(hù)可以在實(shí)際測(cè)試環(huán)境中進(jìn)行排查測(cè)試。
關(guān)注微信公眾號(hào):asterisk-cn,獲得有價(jià)值的行業(yè)分享
freepbx 技術(shù)論壇:www.ippbx.org.cn
Asterisk, freepbx技術(shù)文檔: www.freepbx.org.cn
歐米(Omni)智能客服解決方案
融合通信商業(yè)解決方案,協(xié)同解決方案首選產(chǎn)品:www.hiastar.com