FreeSWITCH 學習筆記(一)

【1】FreeSWITCH學習筆記linux

一、Windows安裝包下載地址:c++

http://files.freeswitch.org/windows/installer/git

二、源碼下載地址:web

http://files.freeswitch.org/freeswitch-1.2.10.tar.gz正則表達式

三、FreeSWITCH後臺模式啓動redis

命令:freeswitch -nc(即No Console)sql

後臺模式沒有控制檯數據庫

四、windows平臺默認密碼已修改成:liu1234express

五、windows平臺客戶端分別爲:X-Lite 和 EyeBeamjson

六、freeswitch默認使用UDP的5060端口。若是先啓動客戶端,會佔用這個端口,因此,建議先啓動freeswitch,再啓動客戶端。

七、若是運行freeswitch出現如下錯誤,是由於端口被佔用了。

Cannot lock pid file /usr/local/freeswitch/run/freeswitch.pid.

八、若是輸入fs_cli,提示以下相似錯誤:

[ERROR] fs_cli.c:1610 main() Error Connecting [Socket Connection Error]

說明FreeSWITCH沒有啓動 或 mod_event_socket沒有正確加載,請檢查TCP的8021端口是否處於監聽狀態或被其餘進程佔用。

九、freeswitch -nonat

freeSWITCH啓動時默認會啓用uPnP(或NAT_PMP)協議試圖查找你的路由器是否支持並在你的路由器上「打洞」,若是你的路由器不支持該協議,這一步可能耗時比較長,於是影響啓動速度。

因此,若是你只是在內網測試而且一天啓動不少次的話,建議關掉這個選項。

組合參數(後臺模式啓動),啓動命令:freeswitch -nc -nonat

十、修改配置XML文件後,必須先使用命令使之生效:reloadxml

十一、客戶端註冊錯誤:

(1)提示408:Request Timeout

通常都是因爲防火牆引發的。關閉防火牆(本地CentOS系統):

臨時關閉:service iptables stop

永久關閉:chkconfig iptables off

(2)提示408:forbidden

通常都是因爲帳號密碼配置錯誤,鑑權沒有經過而被禁止註冊。

十二、能夠在freeswitch中使用originate命令發起一次呼叫。假設1000已經註冊,那麼命令:

originate user/1000 &echo

originate是freeswitch內部的一個命令,它用於控制freeswitch發起一個呼叫。

1三、打印變量值。命令global_getvar 與 eval

global_getvar sound_prefix

eval ${sound_prefix}

global_getvar local_ip_v4

eval ${local_ip_v4}

1四、自動加載模塊的配置文件位置:

/usr/local/freeswitch/conf/autoload_configs/modules.conf.xml文件

1五、用戶目錄默認配置文件在conf/directory/下,系統自帶的配置文件爲default.xml.

dial-string 一個相當重要的參數。

1六、CentOS 系統讓全部用戶顯示行號

輸入命令:vim /etc/vimrc

在vimrc文件的最後添加:set nu

保存:wq

手動加載配置:source /etc/bashrc

這樣無論是哪一個用戶在vim下都顯示行號

1七、FreeSWITCH啓動後,在執行命令reloadxml時,錯誤提示:

+OK [[error near line 6290]: unexpected closing tag </condition>]

表示最近編輯過的xml文件格式有問題,標籤形式不完整缺個「/」

1八、reloadxml命令能夠直接用快捷鍵F6執行。

console loglevel 7命令能夠直接用快捷鍵F8執行

1九、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>

2一、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>

2二、xml dialplan支持很是豐富的功能。

但在測試或編寫程序時,常常用到一些臨時的或很簡單的dialplan,若是每次都須要修改xml,不只麻煩,並且執行效率低。

因此,一種短小、輕便的dialplan便所以而生了。

2三、App的參數中可能會有逗號,於是會與默認的App間的逗號分隔符相沖突,如下的m語法形式將默認的逗號改成^分隔。

originate user/1000 ‘m:^playback/tmp/beep.wav^bridge:{ignore_early_media=true,originate_caller_id_number=1000}user/1001’inline

2四、FreeSWITCH命令:show dialplan 命令?????系統默認支持的Dialplan

2五、通常來講,運營商都把應答時間做爲計費的開始時間。

2六、bridge操做是阻塞的,它會一直等到b-leg釋放後才繼續往下走。

2七、經常使用的Dialplan App: play_and_get_digits與read相似,但它比read更高級。

2八、在Dialplan中使用API命令。

<action application="set" data="api_result=${expr(1+1)}"/>

expr相似於UNIX中的expr命令,它計算一個表達式並輸出結果,如:

freeswitch> expr 1+1

2九、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"/>

3一、在實際應用中,能夠截取變量值的部分操做。使用格式:「${var:位置:長度}」。

3二、execute_extension與transfer相似,都須要Dialplan的「三要素」做爲參數,但不一樣的是:

前者是臨時執行一些Dialplan制定的App,它不會從新進入ROUTING階段。

3三、獲取SIP消息的方法:

在freeswitch命令上上執行:sofia global siptrace on

若是想關閉trace,可執行命令:sofia global siptrace off

3四、FreeSWITCH相關協議

SIP:會話發起協議

SDP:會話描述協議

RTP:實時傳輸協議 

RTCP:實時傳輸控制協議

3五、SIPProfile至關於一個SIPUA,經過各類不一樣的配置參數能夠配置一個UA的行爲。一個系統中能夠有多個SIPProfile,

每一個SIPProfile均可以監聽不一樣的IP地址和端口對。

3六、sofia的配置文件是conf/autoload_configs/sofia.conf.xml.

3七、freeswitch命令行:sofia status profile internal 查看profile的參數配置結果

3八、CentOS6.5查看tomcat版本信息:

命令1:cd /usr/local/tomcat/bin

命令2:./catalina.sh version

3九、啓動tomcat命令:

/usr/local/tomcat/bin ./startup.sh

40、web端訪問不到虛擬機的tomcat服務器:

關閉防火牆命令 :service iptables stop

4一、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 協議棧狀態

4二、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

4三、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

4四、配置從其它服務器經過fs_cli訪問FreeSWITCH(????)

4五、更改主叫號碼。主叫名稱和主叫號碼

命令1:originate user/1000 &echo XML default ‘Seven Du’ 7777

命令2:originate user/1000 &echo XML default 'Liu yong' 6666

4六、originate 命令最後一個參數超時秒數,是指對方收到咱們INVITE消息後 ,不回覆100 Trying消息的時間。

4七、防止命令阻塞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掛斷全部通話

4八、使用通道變量改變呼叫字符串。

命令: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

4九、主叫號碼

命令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地址,並返回真正的呼叫字符串。

5一、當FreeSWITCH呼叫的號碼爲錯誤字符串時,提示以下:

CHAN_NOT_IMPLEMENTED:表示這種Channel的類型沒有實現。

5二、

同振:originate命令能夠同時呼叫兩個用戶,兩個話機都會振鈴,哪一個先接聽則接通哪一個,另外一路會自動掛斷。

命令:originate user/1000,user/1001 &echo

順振:第一個呼叫失敗,則呼叫第二個。

命令:originate user/1000|user/1001 &echo

5三、三個等價命令:

(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

5四、更改主叫號碼的命令:

originate user/1000 &echo XML default ‘Seven Du’ 777

注意:

(1)FreeSAWITCH發起呼叫默認使用的主叫號碼是000000000

(2)參數中有空格,須要用單引號引發來。

5五、編譯安裝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

5六、測試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>

5七、以「phrase:」開頭的文件參數表示這裏要播放一個Phrase Macro,冒號後面跟的是參數。

5八、編譯最新的master版本到默認位置:

git clone git://git.freeswitch.org/freeswitch.git freeswitch-master

cd freeswitch-master

./bootstrap.sh && ./configure && make && make install

5九、編譯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"/>

6一、坐席類型:

(1)onhook坐席。若是有電話分配到該坐席時,FreeSWITCH將會呼叫坐席。

(2)offhook坐席。坐席須要先撥入FreeSWITCH創建一個呼叫,當有來話時則能夠當即與坐席橋接起來。

6二、呼叫路由注意點:

(1)經過FreeSWITCH控制檯撥號進行呼叫,不執行路由過程。

(2)經過客戶端X-Lite或EyeBeam撥號,執行撥號路由過程。

6三、呼叫中心模塊

(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

6四、數據庫。命令行退出sqlite3數據庫兩種方式:

(1).quit

(2)ctrl + D

6五、編解碼與修改全局變量。修改配置文件中的全局變量,通常須要重啓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

6六、話單寫入失敗備份目錄。

若是因爲某種緣由引發寫入話單失敗,服務器返回非「200 OK」的消息,

則FreeSWITCH就會將這張話單存入一個本地的XML文件中(默認位置在log/xml——cdr目錄中),以避免丟失話單。

6七、新建一個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。

6八、CentOS系統修改網卡配置

(1)vi /etc/sysconfig/network-scripts/ifcfg-eth0 進入網卡配置

(2)重啓網卡 service network restart

(3)設置虛擬機的網卡鏈接方式:橋接網卡

6九、CentOS系統不支持rz、sz導入導出文件命令。

安裝命令:yum install lrzsz

70、FreeSWITCH與FreeSWITCH互連,撥打電話命令:

bgapi originate user/1001 &bridge(sofia/external/sip:1006@10.10.17.23:5080)

7一、IP地址鑑權方式。

在匯接局上關閉5080端口,而讓全部來話都送到5060端口,5060端口上的來話是須要先鑑權才能路由的。

在這種匯接模式中,通常會使用IP地址鑑權的方式,而IP地址鑑權就會用到ACL(即訪問控制列表)。

7二、匯接。

<!--

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>

7三、添加網關。添加網關步驟:將下面內容存放到conf/sip-profiles/external/gw_a

(1)將網關設置內容配置存放到conf/sip-profiles/external/gw_a.xml文件中,

(2)在FreeSWITCH控制檯使用命令sofia profile external rescan命令使之生效。

7四、電話號碼透傳。

當端局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。

註釋掉該項後,就會根據來電號碼對外進行發送。

7五、DID(Dial In Directly):對內直接呼叫。

7六、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

7七、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

7八、找不到「hiredis.h」文件。從redis安裝源代碼中拷貝一份hiredis目錄到/usr/local/include目錄下。

7九、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

若是源不支持,須要手動安裝(一、源碼 二、命令:./configure 三、make 四、make install)。

8一、find查找命令。

命令格式:find / -name ×××查找文件目錄位置

8二、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>

8三、ESL,Event_Socket Library,事件套接字庫

8四、SIP(會話初始協議)處於會話層,RTP是基於UDP的,處於傳輸層。

8五、event。event用於訂閱事件。讓FreeSWITCH把相關的事件發送過來。

其中,type有三種plain(純文本)、json、xml三種。默認是plain類型。

8六、SIP協議不一樣於http協議的客戶端服務端模式,而是對等的點對點通訊模式。

(1)代理服務器

(2)重定向服務器

(3)註冊服務器

(4)背靠背用戶代理(B2BUA)

在SIP的世界中,全部UA都是平等的。這個特性也是sip協議與http協議區別。

8七、邊界會話控制器Session Border Controller, SBC

它主要位於一堆SIP服務器的邊界,用於隱藏內部服務器的拓撲結構、抵禦外來攻擊等。SBC多是一個代理服務器,也多是一個B2BUA。

8八、打開或關閉sip詳細日誌

sofia profile internal siptrace on

sofia profile internal siptrace off

8九、在管理控制檯上設置日誌級別

console loglevel (0~7)數值越大級別越大

啓動設置日誌級別,修改vars.xml文件:

<X-PRE-PROCESS cmd="set" data="console_loglevel=4"/>

90、目前線上FS版本號V1.4.14

9一、編譯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

9二、

在Linux平臺上,能直接獲得FreeSWITCH的進程號(須要root權限):netstat -anp | grep 5060

看進程是否存在:

ps aux | grep freeswitch

9三、抓包工具

(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

9四、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

解決方法:移除這個項目

9五、Windows系統安裝FreeSWITCH

默認安裝路徑:C:\Program Files\FreeSWITCH

配置文件路徑:C:\Program Files\FreeSWITCH\conf

編譯輸出目錄:F:\Git_FreeSWITCH\freeswitch\Win32\Debug\FreeSwitchConsole.exe

9六、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

9七、freeswitch 查詢版本號

# freeswitch -verison

9八、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] 指定其餘聲音文件目錄

9九、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.順序 選擇 循環 總結

相關文章
相關標籤/搜索