【1】FreeSWITCH學習筆記
1、Windows安裝包下載地址:
http://files.freeswitch.org/windows/installer/
2、源碼下載地址:
http://files.freeswitch.org/freeswitch-1.2.10.tar.gz
3、FreeSWITCH后台模式啟動
命令:freeswitch -nc(即No Console)
后台模式沒有控制台
4、windows平台默認密碼已修改為:liu1234
5、windows平台客戶端分別為:X-Lite 和 EyeBeam
6、freeswitch默認使用UDP的5060端口。如果先啟動客戶端,會占用這個端口,所以,建議先啟動freeswitch,再啟動客戶端。
7、如果運行freeswitch出現以下錯誤,是因為端口被占用了。
Cannot lock pid file /usr/local/freeswitch/run/freeswitch.pid.
8、如果輸入fs_cli,提示如下類似錯誤:
[ERROR] fs_cli.c:1610 main() Error Connecting [Socket Connection Error]
說明FreeSWITCH沒有啟動 或 mod_event_socket沒有正確加載,請檢查TCP的8021端口是否處於監聽狀態或被其他進程占用。
9、freeswitch -nonat
freeSWITCH啟動時默認會啟用uPnP(或NAT_PMP)協議試圖查找你的路由器是否支持並在你的路由器上“打洞”,如果你的路由器不支持該協議,這一步可能耗時比較長,因而影響啟動速度。
所以,如果你只是在內網測試並且一天啟動很多次的話,建議關掉這個選項。
組合參數(后台模式啟動),啟動命令:freeswitch -nc -nonat
10、修改配置XML文件后,必須先使用命令使之生效:reloadxml
11、客戶端注冊錯誤:
(1)提示408:Request Timeout
一般都是由於防火牆引起的。關閉防火牆(本地CentOS系統):
臨時關閉:service iptables stop
永久關閉:chkconfig iptables off
(2)提示408:forbidden
一般都是由於賬號密碼配置錯誤,鑒權沒有通過而被禁止注冊。
12、可以在freeswitch中使用originate命令發起一次呼叫。假設1000已經注冊,那么命令:
originate user/1000 &echo
originate是freeswitch內部的一個命令,它用於控制freeswitch發起一個呼叫。
13、打印變量值。命令global_getvar 與 eval
global_getvar sound_prefix
eval ${sound_prefix}
global_getvar local_ip_v4
eval ${local_ip_v4}
14、自動加載模塊的配置文件位置:
/usr/local/freeswitch/conf/autoload_configs/modules.conf.xml文件
15、用戶目錄默認配置文件在conf/directory/下,系統自帶的配置文件為default.xml.
dial-string 一個至關重要的參數。
16、CentOS 系統讓所有用戶顯示行號
輸入命令:vim /etc/vimrc
在vimrc文件的最后添加:set nu
保存:wq
手動加載配置:source /etc/bashrc
這樣不管是哪個用戶在vim下都顯示行號
17、FreeSWITCH啟動后,在執行命令reloadxml時,錯誤提示:
+OK [[error near line 6290]: unexpected closing tag </condition>]
表示最近編輯過的xml文件格式有問題,標簽形式不完整缺個“/”
18、reloadxml命令可以直接用快捷鍵F6執行。
console loglevel 7命令可以直接用快捷鍵F8執行
19、FreeSWITCH命令:查詢已注冊用戶
sofia status profile internal (REGISTRATIONS值:顯示多少用戶已注冊)
具體誰是否注冊?可以使用如下命令:
sofia status profile internal reg XXXX
20、默認快捷鍵集
<cli-keybindings>
<key name="1" value="help"/>
<key name="2" value="status"/>
<key name="3" value="show channels"/>
<key name="4" value="show calls"/>
<key name="5" value="sofia status"/>
<key name="6" value="reloadxml"/>
<key name="7" value="console loglevel 0"/>
<key name="8" value="console loglevel 7"/>
<key name="9" value="sofia status profile internal"/>
<key name="10" value="sofia profile internal siptrace on"/>
<key name="11" value="sofia profile internal siptrace off"/>
<key name="12" value="version"/>
</cli-keybindings>
21、dialplan中的測試條件可以迭加,但是不可以嵌套。
eg: 如下無效條件
<extension name="***">
<condition field="***" expression="***">
<condition field="***" expression="***">
<action application="***"/>
</condition>
</condition>
</extension>
正確:
<extension name="***">
<condition field="***" expression="***"/>
<condition field="***" expression="***">
<action application="***"/>
</condition>
</extension>
22、xml dialplan支持非常豐富的功能。
但在測試或編寫程序時,經常用到一些臨時的或很簡單的dialplan,如果每次都需要修改xml,不僅麻煩,而且執行效率低。
所以,一種短小、輕便的dialplan便因此而生了。
23、App的參數中可能會有逗號,因而會與默認的App間的逗號分隔符相沖突,以下的m語法形式將默認的逗號改為^分隔。
originate user/1000 ‘m:^playback/tmp/beep.wav^bridge:{ignore_early_media=true,originate_caller_id_number=1000}user/1001’inline
24、FreeSWITCH命令:show dialplan 命令?????系統默認支持的Dialplan
25、一般來說,運營商都把應答時間作為計費的開始時間。
26、bridge操作是阻塞的,它會一直等到b-leg釋放后才繼續往下走。
27、常用的Dialplan App: play_and_get_digits與read類似,但它比read更高級。
28、在Dialplan中使用API命令。
<action application="set" data="api_result=${expr(1+1)}"/>
expr類似於UNIX中的expr命令,它計算一個表達式並輸出結果,如:
freeswitch> expr 1+1
29、set 與 export的區別:
set程序僅僅會作用於當前的Channel(a-leg)
export程序可以將變量設置到兩個Channel(a-leg和b-leg)上, 如果當時b-leg還沒有創建,則會在創建時進行設置。
另外,export也可以通過nolocal參數將變量值限制僅僅設置到b-leg上:
<action application="export" data="nolocal:my_var=my_value">
更重要的是set也具有能往b-leg上賦值的能力:
<action application="set" data="export_vars=var1, var2, var3"/>
30、取消某些通道變量的定義。對它賦一個特殊的值(_undef_)或使用unset App,代碼如下:
<action application="set" data="var1=_undef_"/>
<action application="unset" data="var1"/>
31、在實際應用中,可以截取變量值的部分操作。使用格式:“${var:位置:長度}”。
32、execute_extension與transfer類似,都需要Dialplan的“三要素”作為參數,但不同的是:
前者是臨時執行一些Dialplan制定的App,它不會重新進入ROUTING階段。
33、獲取SIP消息的方法:
在freeswitch命令上上執行:sofia global siptrace on
如果想關閉trace,可執行命令:sofia global siptrace off
34、FreeSWITCH相關協議
SIP:會話發起協議
SDP:會話描述協議
RTP:實時傳輸協議
RTCP:實時傳輸控制協議
35、SIPProfile相當於一個SIPUA,通過各種不同的配置參數可以配置一個UA的行為。一個系統中可以有多個SIPProfile,
每個SIPProfile都可以監聽不同的IP地址和端口對。
36、sofia的配置文件是conf/autoload_configs/sofia.conf.xml.
37、freeswitch命令行:sofia status profile internal 查看profile的參數配置結果
38、CentOS6.5查看tomcat版本信息:
命令1:cd /usr/local/tomcat/bin
命令2:./catalina.sh version
39、啟動tomcat命令:
/usr/local/tomcat/bin ./startup.sh
40、web端訪問不到虛擬機的tomcat服務器:
關閉防火牆命令 :service iptables stop
41、FS常用API和命令:
(1)命令:... 退出FS 或者 fs_cli
(2)命令:shutdown 退出FS 和 fs_cli
(3)命令:sofia status profile internal reg 查詢分機注冊信息
(4)命令:sofia profile internal siptrace on/off 顯示SIP調試信息
(5)命令:/event all # 打開所有事件的調試開關
(6)命令:/event MESSAGE 打開即時消息的調試開關
(7)命令:sofia global debug presence 狀態呈現調試信息
(8)命令:sofia status SIP 協議棧狀態
42、FS 常用APP
(1)set/export set用來設置通道變量
(2)answer 發送200 OK
(3)bridge
(4)sleep
(5)transfer
(6)bind_meta_app
(7)bind_digit_action
(8)conference
43、FS_CLI
FS默認是以控制台方式運行:
啟動:./freeswitch
關閉:fsctl shutdown
停止:freeswitch -stop
若想要在后台運行,在命令行提供參數-nc,即命令:
freeswitch -nc
當FS在后台運行時,可通過運行fs_cli啟動一個控制台並連接到FS。
FS_CLI命令行啟動:fs_cli -H 127.0.0.1 -P 8021 -p ClueCon -d 7
44、配置從其它服務器通過fs_cli訪問FreeSWITCH(????)
45、更改主叫號碼。主叫名稱和主叫號碼
命令1:originate user/1000 &echo XML default ‘Seven Du’ 7777
命令2:originate user/1000 &echo XML default 'Liu yong' 6666
46、originate 命令最后一個參數超時秒數,是指對方收到我們INVITE消息后 ,不回復100 Trying消息的時間。
47、防止命令阻塞bgapi。originate命令是阻塞的,因此如果執行上述命令,則無法輸入其他命令或取消該呼叫。
解決這個問題有三種辦法:
(1)使用bgapi 如:bgapi originate user/1000 &echo XML default 'Liu yong' 7777
向freeswitch發送bgapi命令,后台執行,非阻塞執行。
再具體一點說,即使用bgapi的命令執行以后,敲回車鍵,控制台還可以再執行其他命令。
不使用bgapi的命令執行以后,敲回車鍵,控制台不再可以輸入其他命令。
(2)若不使用bgapi 如:originate user/1000 &echo XML default 'Liu yong' 7777
該命令執行以后,再敲回車鍵,控制台不可再輸入其他命令,即阻塞執行。
這時想要輸入其他命令或取消該呼叫,必須開啟另外一個fs_cli客戶端。有兩種處理方法:
2.1 使用show channels 找到該呼叫的UUID,然后執行uuid_kill
2.2 直接執行hupall掛斷所有通話
48、使用通道變量改變呼叫字符串。
命令:originate {origination_caller_id_name='Liu yong',origination_caller_id_number=6666}user/1000 &echo
特別備注:大括號與user之間沒有空格(反正我踩雷了!特此提醒)
也支持每個通道變量分別用大括號包起來,如下等價:
命令:originate {origination_caller_id_name='Liu yong'}{origination_caller_id_number=6666}user/1000 &echo
49、主叫號碼
命令1:originate {origination_caller_id_number=6666}user/1000 &bridge(user/1001)
由於freeswitch發現a-leg是一個回呼,當a-leg接聽后,再作為主叫去呼叫b-leg時,會進行主叫號碼翻轉。
命令2:originate {origination_caller_id_number=6666}user/1000 &bridge({origination_caller_id_number=8888}user/1001)
改變1000這個主叫號碼為8888
命令3:originate {effective_caller_id_number=6666}user/1000 &bridge(user/1001)
effective_caller_id_number變量設置在a-leg上,但影響b-leg的主叫號碼顯示(來電顯示)
命令4:originate {origination_caller_id_number=7777}user/1000 &bridge({origination_caller_id_number=8888}user/1001)
命令5:originate {origination_caller_id_number=7777}{effective_caller_id_number=8888}user/1000 &bridge(user/1001)
命令4與命令5等價,請結合前三個命令自行分析。
50、API: sofia_contact 作用查找數據庫,找到實際注冊1001的Contact地址,並返回真正的呼叫字符串。
51、當FreeSWITCH呼叫的號碼為錯誤字符串時,提示如下:
CHAN_NOT_IMPLEMENTED:表示這種Channel的類型沒有實現。
52、
同振:originate命令可以同時呼叫兩個用戶,兩個話機都會振鈴,哪個先接聽則接通哪個,另一路會自動掛斷。
命令:originate user/1000,user/1001 &echo
順振:第一個呼叫失敗,則呼叫第二個。
命令:originate user/1000|user/1001 &echo
53、三個等價命令:
(1)originate user/1000 9196 :: 在1000接聽后進入Dialplan,找到9196這個exten,然后再執行echo
(2)originate user/1000 &echo :: 向外發起一個呼叫,建立一個Channel,對方接聽后在本端執行一個App,此App即為echo
(3)originate user/1000 inline :: 內聯Dialplan
54、更改主叫號碼的命令:
originate user/1000 &echo XML default ‘Seven Du’ 777
注意:
(1)FreeSAWITCH發起呼叫默認使用的主叫號碼是000000000
(2)參數中有空格,需要用單引號引起來。
55、編譯安裝mod_xtgssd4fs
(1)文件放置位置:/usr/src/freeswitch/src/mod/xml_int
(2)如果編譯不過,照這個:
2.1:在文件configure.ac[位置:/usr/src/freeswitch]中
添加src/mod/xml_int/mod_xtgssd4fs/Makefile
2.2:依次分別執行如下四個命令:
aclocal
autoconf
automake --add-missing
./configure操作
(3)完成以上后。再編譯源文件,命令:make install
56、測試TTS的Dialplan:
<extension name="TTS">
<condition field="destination_number" expression="^1234$">
<action application="answer"/>
<action application="speak" data="fliter|rms|hello, Welcome to FreeSWITCH"/>
</condition>
</extension>
57、以“phrase:”開頭的文件參數表示這里要播放一個Phrase Macro,冒號后面跟的是參數。
58、編譯最新的master版本到默認位置:
git clone git://git.freeswitch.org/freeswitch.git freeswitch-master
cd freeswitch-master
./bootstrap.sh && ./configure && make && make install
59、編譯1.2版本並安裝到/usr/local/freeswitch-1.2
git clone git://git.freeswitch.org/freeswitch.git freeswitch-1.2
cd freeswitch-1.2
git checkout v1.2.stable
./bootstrap.sh && ./configure --prefix=/usr/local/freeswitch-1.2
make && make install
60、編譯模塊。編譯mod_callcenter為例:
(1)到FreeSWITCH源代碼目錄下使用以下命令編譯安裝:
#make mod_callcenter-install
(2)再到FreeSWITCH控制台上加載該模塊:
#load mod_callcenter
(3)如果需要FreeSWITCH啟動時自動加載該模塊,可以編輯
conf/autoload_configs/modules.conf.xml文件,去掉與該模塊相關的行注釋,即如下:
<load module="mod_callcenter"/>
61、坐席類型:
(1)onhook坐席。如果有電話分配到該坐席時,FreeSWITCH將會呼叫坐席。
(2)offhook坐席。坐席需要先撥入FreeSWITCH建立一個呼叫,當有來話時則可以立即與坐席橋接起來。
62、呼叫路由注意點:
(1)通過FreeSWITCH控制台撥號進行呼叫,不執行路由過程。
(2)通過客戶端X-Lite或EyeBeam撥號,執行撥號路由過程。
63、呼叫中心模塊
(1)mod_callcenter模塊並不是默認就編譯安裝的。因而我們首先要編譯安裝它。
切換到FreeSWITCH源代碼目錄(/usr/src/freeswitch)下,使用以下命令編譯安裝:
# make mod_callcenter-install
(2)編譯安裝完成后,需要到控制台加載該模塊:
freeswitch> load mod_callcenter
(3)如果需要FreeSWITCH啟動時自動加載該模塊,可以編輯
conf/autoload_configs/modules.conf.xml,去掉與該模塊相關的行注釋,即如下:
<load module="mod_callcenter"/>
(4)進行靜態坐席的配置。mod_callcenter默認的配置文件是
conf/autoload_configs/callcenter.conf.xml,其中默認已經配置了一個support@default隊列。
其中strategy參數指定了隊列的分配方式,它的值longest-idle-agent說明要優先選擇等待時間最長的坐席分配。
(5)接着,來配置一個坐席,坐席的名字是1005@default,配置如下:
<agents>
<!--<agent name="1000@default" type="callback" contact="[call_timeout=10]user/1000@default" status="Available" max-no-answer="3" wrap-up-time="10" reject-delay-time="10" busy-delay-time="60" />-->
<agent name="1005@default" type="callback" contact="[call_time_out=10]user/1005"
status="Avalable" max-no-answer="3" wrap-up-time="10"
reject-delay-time="10" busy-delay-time="60"/>
</agents>
(6)同理,再配置其他坐席,如下1006@default、1007@default等,如下:
<agents>
<!--<agent name="1000@default" type="callback" contact="[call_timeout=10]user/1000@default" status="Available" max-no-answer="3" wrap-up-time="10" reject-delay-time="10" busy-delay-time="60" />-->
<agent name="1005@default" type="callback" contact="[call_time_out=10]user/1005"
status="Avalable" max-no-answer="3" wrap-up-time="10"
reject-delay-time="10" busy-delay-time="60"/>
<agent name="1006@default" type="callback" contact="[call_time_out=10]user/1006"
status="Avalable" max-no-answer="3" wrap-up-time="10"
reject-delay-time="10" busy-delay-time="60"/>
<agent name="1007@default" type="callback" contact="[call_time_out=10]user/1007"
status="Avalable" max-no-answer="3" wrap-up-time="10"
reject-delay-time="10" busy-delay-time="60"/>
</agents>
(7)然后,還需要配置tier,以將坐席與隊列關聯起來。
如下面的配置將三個坐席與隊列support@default關聯起來。
<tiers>
<!-- If no level or position is provided, they will default to 1. You should do this to keep db value on restart. -->
<!-- <tier agent="1000@default" queue="support@default" level="1" position="1"/> -->
<tier agent="1005@default" queue="support@default" level="1" position="1"/>
<tier agent="1006@default" queue="support@default" level="1" position="1"/>
<tier agent="1007@default" queue="support@default" level="1" position="1"/>
</tiers>
(8)OK,以上完成之后,最后再需要配置呼叫路由。
即當有電話呼叫support時,可以使用如下Dialplan將電話轉到該callcenter隊列中,如下:
<!--Cellcenter Example-->
<extension name="Callcenter Example">
<condition filed="destination_number" expression="^support$">
<action application="answer"/>
<action application="callcenter" data="support@default"/>
</condition>
</extension>
(9)以上設置均完成后,就重新加載模塊使之生效。
freeswitch> reloadxml
freeswitch> reload mod_callcenter
(10)現在可以動態管理隊列和坐席。
mod_callcenter提供了一個callcenter_config的API命令,用於管理與該模塊相關的各種資源。
比如,可以使用如下命令手工將坐席簽入:
freeswitch> callcenter_config agent set status 1005@default 'Available'
(11)將坐席的狀態置為Logged Out,就不會再有電話分配到該坐席了。
freeswitch> callcenter_config agent set status 1005@default 'Logged Out'
(12)當想知道當前有所有的坐席時,可以使用如下命令:
freeswitch> callcenter_config agent list
(13)當然,如果坐席沒有在配置文件中進行配置,可以使用命令添加,如下:
freeswitch> callcenter_config agent add 1007@default callback
注意,還需要使用下列命令給它的設置相關的參數,如下contact:
freeswitch> callcenter_config agent set contact 1007@default user/1007
(14)也可以使用以下命令列出當前隊列:
freeswitch> callcenter_config queue list
(15)列出當前梯隊:
freeswitch callcenter_config tier list
64、數據庫。命令行退出sqlite3數據庫兩種方式:
(1).quit
(2)ctrl + D
65、編解碼與修改全局變量。修改配置文件中的全局變量,一般需要重啟FreeSWITCH才能使之生效。
而實際應用中,不允許隨便重啟服務器。為了不重啟FreeSWITCH服務器,有兩種解決方法:
(1)修改完畢,給FreeSWITCH進程發送一個SIGHUP信號,讓它重新解析全局變量:
# kill -HUP <FreeSWITCH的進程號>
但是,此命令只是保證FreeSWITCH正確解析了這些全局變量,而實際上,這些變量值是在sofia profile中引用的,
因而還需要在FreeSWITCH控制台執行以下命令重讀sofia的配置,如下:
freeswitch> sofia profile internal rescan
freeswitch> sofia profile external rescan
當然,也可以不執行以上兩個重讀命令。一步到位,重新加載一次該模塊:
freeswitch> reload mod_sofia
(2)可以不修改全局變量,畢竟使用它的地方是在兩個profile的配置中。
可以把視頻編碼附加到變量引用的后面,具體如下:
<param name="inbound-codec-prefs" value=“$${global_codec_prefs}, H264, VP8”/>
<param name="outbound-codec-prefs" value=“$${global_codec_prefs}, H264, VP8”/>
或者
<param name="inbound-codec-prefs" value=“PCMA, PCMU, H264, VP8”/>
<param name="outbound-codec-prefs" value=“PCMA, PCMU, H264, VP8”/>
最后,不論選擇方式(1)或方式(2)為了驗證是否生效。可以如下命令:
freeswitch> sofia status profile internal
66、話單寫入失敗備份目錄。
如果由於某種原因引起寫入話單失敗,服務器返回非“200 OK”的消息,
則FreeSWITCH就會將這張話單存入一個本地的XML文件中(默認位置在log/xml——cdr目錄中),以免丟失話單。
67、新建一個FreeSWITCH實例,僅配置不同,實際操作步驟如下:
(1)復制一份新環境
mkdir /usr/local/freeswitch2; // 新建freeswitch2目錄
cp -R /usr/local/freeswitch/conf /usr/local/freeswitch2/; // 拷貝一份舊的配置文件
mkdir /usr/local/freeswitch2/log; // 給新建的目錄創建一個日志目錄
mkdir /usr/local/freeswitch2/db; // 給新建的目錄創建一份數據庫目錄
ln -sf /usr/local/freeswitch/sounds /usr/local/freeswitch2/sounds // 給新建的目錄超鏈接一份舊的聲音文件
(2)修改新配置中的一些配置參數以防止端口沖突。修改Event Socket的端口號。
文件位置:conf/autoload_configs/event_socket.conf.xml
修改內容:8021為9021
(3)修改全局變量conf/vars.xml,把其中的5060、5080也改成其他的值,如7060和7080。
68、CentOS系統修改網卡配置
(1)vi /etc/sysconfig/network-scripts/ifcfg-eth0 進入網卡配置
(2)重啟網卡 service network restart
(3)設置虛擬機的網卡連接方式:橋接網卡
69、CentOS系統不支持rz、sz導入導出文件命令。
安裝命令:yum install lrzsz
70、FreeSWITCH與FreeSWITCH互連,撥打電話命令:
bgapi originate user/1001 &bridge(sofia/external/sip:1006@10.10.17.23:5080)
71、IP地址鑒權方式。
在匯接局上關閉5080端口,而讓所有來話都送到5060端口,5060端口上的來話是需要先鑒權才能路由的。
在這種匯接模式中,一般會使用IP地址鑒權的方式,而IP地址鑒權就會用到ACL(即訪問控制列表)。
72、匯接。
<!--
D 作為匯接局,A、B、C分別為端局。
-->
<!--
A欲呼叫B上的用戶B1000,A端的default.xml配置文件,其diaplan如下:
-->
<extension name="D">
<condition field="destination_number" expression="^([B-Z]. *)$">
<action application="bridge" data="sofia/external/sip:$1@10.10.17.26:5080"/>
</condition>
</extension>
<!--
在D端上,收到5080端口的呼叫請求后,查找public dialplan對來話進行路由。其dialplan設置如下:
-->
<!--
當被叫號碼首位是D時,表示是一個本地用戶,那么“吃掉”首位的“D”,然后把路由轉transfer到default dialplan進行處理
-->
<extension name="D">
<condition field="destination_number" expression="^D(. *)$">
<action application="transfer" data="$1 XML default"/>
</condition>
</extension>
<!--
對於被叫號碼不在本地的用戶,使用下面的dialplan,其配置如下:
正則表達式匹配所有除D以外的A到Z開頭的被叫號碼。
以有人撥打B1000為例,匹配成功后,$1值為B,$2的值為1000,所以,bridge的參數即為:
sofia/external/sip:1000@10.10.17.B:5080,相當於在匯接局D上“吃掉”了被叫號碼的最首位B。
-->
<extension>
<condition field="destination_number" expression="^([A-CE-Z])(.*)$">
<action application="set" data="bypass_media=true"/>
<action application="bridge" data="sofia/external/sip:$2@10.10.17.$1:5080"/>
</condition>
</extension>
73、添加網關。添加網關步驟:將下面內容存放到conf/sip-profiles/external/gw_a
(1)將網關設置內容配置存放到conf/sip-profiles/external/gw_a.xml文件中,
(2)在FreeSWITCH控制台使用命令sofia profile external rescan命令使之生效。
74、電話號碼透傳。
當端局A作為PBX時,一般來說,端局A不允許主叫號碼透傳,即不管是F上的哪個分機往外打電話,都會在對方的話機上顯示1000這個主叫號碼。
當然,我們也可以設置允許1000往外打電話時進行主叫號碼透傳。操作步驟:
在FreeSWITCH_A上找到1000這個用戶的配置文件(1000.xml),將下面的行注釋掉:
<variable name="effective_caller_id_number" value="1000"/>
其中,effective_caller_id_number就表示1000這個用戶如果發起呼叫時對外顯示的號碼,默認的設置就是1000。
注釋掉該項后,就會根據來電號碼對外進行發送。
75、DID(Dial In Directly):對內直接呼叫。
76、CentOS 更換源。CentOS 6.x 安裝阿里源
命令:wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
下載成功后執行命令:
(1)yum clean all
(2)yum makecache
77、CentOS源錯誤apt.sw.be。
錯誤提示:http://apt.sw.be/redhat/el6/en/x86_64/dag/repodata/repomd.xml: [Errno 14] PYCURL ERROR 6 - "Couldn't resolve host 'apt.sw.be'"
解決方案:/etc/yum.repos.d文件夾中,找到包含apt.sw.be的URL文件,然后將其改名。
比如本地CentOS6.5,發現為dag.repo文件。
解決命令(比如本地CentOS6.5):mv dag.repo dag.repo.bak
78、找不到“hiredis.h”文件。從redis安裝源代碼中拷貝一份hiredis目錄到/usr/local/include目錄下。
79、xtaud配置錯誤:
[root@CentOSLy debug]# cmake -DBUILD_STATIC_LIBS=ON -DBUILD_SHARED_LIBS=OFF -DARCHIVE_INSTALL_DIR=. -DJSONCPP_WITH_CMAKE_PACKAGE=ON -DJSONCPP_WITH_TESTS=ON ../..
bash: cmake: command not found
安裝cmake。使用命令:yum -y install cmake
安裝cmake依賴gcc-c++ 需要先安裝gcc-c++,默認的gcc版本不支持C++11,所以需要手動安裝。
80、CentOS安裝包查詢。
查詢路徑:cd /etc/yum.repos.d
查詢命令:yum search 軟件名
eg: yum search cmake
如果源不支持,需要手動安裝(1、源碼 2、命令:./configure 3、make 4、make install)。
81、find查找命令。
命令格式:find / -name ×××查找文件目錄位置
82、redis設置密碼
[root@CentOSLy bin]# redis-cli
127.0.0.1:6379> config set requirepass ****
OK
127.0.0.1:6379> config get requirepass
(error) NOAUTH Authentication required.
127.0.0.1:6379> auth ****
OK
127.0.0.1:6379> config get requirepass
1) "requirepass"
2) "****"
127.0.0.1:6379>
83、ESL,Event_Socket Library,事件套接字庫
84、SIP(會話初始協議)處於會話層,RTP是基於UDP的,處於傳輸層。
85、event。event用於訂閱事件。讓FreeSWITCH把相關的事件發送過來。
其中,type有三種plain(純文本)、json、xml三種。默認是plain類型。
86、SIP協議不同於http協議的客戶端服務端模式,而是對等的點對點通信模式。
(1)代理服務器
(2)重定向服務器
(3)注冊服務器
(4)背靠背用戶代理(B2BUA)
在SIP的世界中,所有UA都是平等的。這個特性也是sip協議與http協議區別。
87、邊界會話控制器Session Border Controller, SBC
它主要位於一堆SIP服務器的邊界,用於隱藏內部服務器的拓撲結構、抵御外來攻擊等。SBC可能是一個代理服務器,也可能是一個B2BUA。
88、打開或關閉sip詳細日志
sofia profile internal siptrace on
sofia profile internal siptrace off
89、在管理控制台上設置日志級別
console loglevel (0~7)數值越大級別越大
啟動設置日志級別,修改vars.xml文件:
<X-PRE-PROCESS cmd="set" data="console_loglevel=4"/>
90、目前線上FS版本號V1.4.14
91、編譯Gssd4FS參考:
(1)在文件configure.ac添加src/mod/xml_int/mod_xtgssd4fs/Makefile
autoreconf -ivf
(2)執行如下四個命令
aclocal
autoconf
automake --add-missing
./configure
svn://svn.union400.com:3691/project/03_源碼/05_通信平台/05_gssdFS版/v.1.1.0 Spc005
92、
在Linux平台上,能直接得到FreeSWITCH的進程號(需要root權限):netstat -anp | grep 5060
看進程是否存在:
ps aux | grep freeswitch
93、抓包工具
(1)tcpdump -i eth0 port 5060 and ip src 10.10.17.37
(2)tcpdump -i eth0 port 5060 and host 10.10.17.37
94、VS2017編譯FreeSWITCH遇到的問題集
(1)us_text.c文件
Error:C2001 常用中含有換行符問題
解決方法:修改為utf-8 BOM編碼
(2)libx264
找不到windows sdk版本8.1,切換為本地windows sdk版本
(3)C2220 警告被視為錯誤,沒有生成“object”文件
項目zlib
項目libpng
解決方法:點擊項目,右擊選擇屬性->配置屬性->c/c++->常規,將“警告視為錯誤”的選項改為“否”。就可以
(4)error MSB6006: “cmd.exe”已退出 代碼為 1
項目libV8
解決方法:移除這個項目
95、Windows系統安裝FreeSWITCH
默認安裝路徑:C:\Program Files\FreeSWITCH
配置文件路徑:C:\Program Files\FreeSWITCH\conf
編譯輸出目錄:F:\Git_FreeSWITCH\freeswitch\Win32\Debug\FreeSwitchConsole.exe
96、linux CentOS系統安裝
yum install -y autoconf automake libtool gcc- c++ ncurses- devel make zlib- devel libjpeg- devel yum install –y openssl- devel e2fsprogs- devel curl- devel pcre- devel speex- devel sqlite- devel
97、freeswitch 查詢版本號
# freeswitch -verison
98、FreeSWITCH運行參數
(1)-nf 不允許Fork新進程
(2)-u [user] 啟動后以非root用戶user身份運行
(3)-g [group] 啟動后以非root組group身份運行
(4)-version 顯示版本信息
(5)-waste 允許浪費內存地址空間,FreeSWITCH僅需240KB的棧空間,你可以使用ulimit -s 240限制棧空間使用,或使用該選項忽略警告信息
(6)-core 出錯時進行內核轉儲
(7)-rp 開啟高優先級(實時)設置
(8)-lp 開啟低優先級設置
(9)-np 普通優先級
(10)-vg 在valgrind下運行,調試內存泄漏時使用
(11)-nosql 不使用SQL,show channels類的命令將不能顯示結果
(12)-heavy-timer 更精確的時鍾,可能會更精確,但對系統要求更高
(13)-nonat 如果路由器支持uPnP或NAT-PMP,則FreeSWITCH可以自動解決NAT穿越問題。如果路由器不支持,則該選項可以使啟動更快。
(14)-nocal 關閉時鍾核准。FreeSWITCH理想的運行環境是1000Hz的內核時鍾。如果你在內核時鍾小於1000Hz或在虛擬機上,可以嘗試關閉該選項
(15)-nort 關閉實時時鍾
(16)-stop 關閉FreeSWITCH,它會在run目錄中查找PID文件
(17)-nc 啟動到后台模式,沒有控制台
(18)-ncwait 后台模式,等待系統完全初始化完畢之后再退出父進程,隱含“-nc”選項
(19)-c 啟動到控制台,默認Options to control location of files
(20)-base [confdir] 指定其他的基准目錄,在配置文件中使用$${base}
(21)-conf [confdir] 指定其他的配置文件所在目錄,需與-log、-db合用
(22)-log [logdir] 指定其他的日志目錄
(23)-run [rundir] 指定其他存放PID文件的運行目錄
(24)-db [dbdir] 指定其他數據庫的目錄
(25)-mod [moddir] 指定其他模塊目錄
(26)-htdocs [htdocsdir] 指定其他HTTP根目錄
(27)-scripts [scriptsdir] 指定其他腳本目錄
(28)-temp [directory] 指定其他臨時文件目錄
(29)-grammar [directory] 指定其他語法目錄
(30)-certs [directory] 指定其他SSL證書路徑
(31)-recordings [directory] 指定其他錄音目錄
(32)-storage [directory] 指定其他存儲目錄(語音信箱等)
(33)-sounds [directory] 指定其他聲音文件目錄
99、FreeSWITCH中修改注冊用戶的密碼
(1)在FreeSWITCH系統中,所有用戶的密碼默認為1234,該設置在 \conf\vars.xml 中,如下所示:
<X-PRE-PROCESS cmd="set" data="default_password=1234"/>
若需要修改默認密碼的話,直接修改該處即可。
(2)但用戶的密碼和默認密碼怎么關聯起來?
請看下面的配置文件,以用戶1000為例,打開 \conf\directory\default\1000.xml,找到如下設置:
<param name="password" value="$${default_password}"/>,即可找到他們之間的聯系。
若需要修改某用戶的密碼,直接修改 value 值即可。
(3)修改以上配置完成后,通過FS_CLI.exe運行reloadxml即可。
100、FreeSWITCH配置同振和順振
通過FreeSwitch可以對多個終端進行呼叫,依據振鈴順序不同,可以分為:同振和順振。
同振是指多個終端同時振鈴;順振是指多個終端順序振鈴。
下面是同振的配置:某用戶撥叫2000這個接入號碼,希望1000和1001同時振鈴,其中任一個接聽來話,另一個停止振鈴。
(1)在 \conf\dialplan\default.xml中添加如下內容:
<extension name="group_dial_sim">
<condition field="destination_number" expression="^2000$">
<action application="bridge" data="sofia/internal/1000@127.0.0.1,sofia/sip/1001@127.0.0.1"/>
</condition>
</extension>
在FS_CLI.exe中運行reloadxml即可。
下面是順振的配置,某用戶撥叫2000這個接入號碼,希望1000和1001順序振鈴,其中任一個接聽來話,另一個停止振鈴。
(2)在 \conf\dialplan\default.xml中添加如下內容:
<extension name="group_dial_seq">
<condition field="destination_number" expression="^2000$">
<action application="bridge" data="sofia/internal/1000@127.0.0.1|sofia/sip/1001@127.0.0.1"/>
</condition>
</extension>
在 FS_CLI.exe中運行reloadxml即可。
Good Good Study, Day Day Up.
順序 選擇 循環 總結