FreeSwitch下配置DID的方法
首先介紹下什麼是DID? 翻譯為中文為“直接向內撥號”,該服務是由電話公司提供的,它使使用者能夠直接撥打PBX或VOIP系統中的分機號碼,而無需求助於總機或自動話務系統。
現在要實現這樣一個功能 - 通過手機或座機撥打一個號碼(例如:01088888888),可以直接聯絡到VOIP系統(FreeSwitch系統)的1008這個使用者。如下圖所示:
手機/座機 -------------------> 01088888888 ---------------> VOIP系統 ----------------> 1008
分兩步實現:
(1) 配置閘道器
在 \conf\sip_profiles\external 中新增一個XML檔案,名為:gw-DID.xml。內容如下: <include> <gateway name="gw-DID"> <param name="realm" value="27.54.226.74"/> // sip provider 提供的伺服器IP <param name="username" value="88888888"/>// sip provider 提供的DID賬號 <param name="password" value="12345678"/> // sip provider 提供的DID賬號密碼 <param name="proxy" value="27.54.226.74"/> // sip provider 提供的伺服器IP <param name="register" value="true"/> <param name="expire-seconds" value="600"/> <param name="ping" value="30"/> <param name="sip-trace" value="true"/> </gateway> </include>
(2)配置撥碼計劃
在 \conf\dialplan 中修改 public.xml,新增如下內容:
<extension name="sipprovider"> <condition field="destination_number" expression="^88888888$"> <action application="transfer" data="1008 XML default"/> </condition> </extension> 通過 FS_CLI 輸入 reloadxml 即可。
通過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/ [email protected],sofia/sip/[email protected]"/> </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/[email protected]|sofia/sip/[email protected]"/> </condition> </extension>
在 FS_CLI.exe 中執行 reloadxml 即可。
在FreeSwitch中修改主叫顯示名稱
如果你想通過你的IP話機呼叫其他使用者的時候,在對方話機顯示能標識你的名稱,在FreeSwitch中該怎麼配置?
需求:
1000 和 1001 分別是兩部話機,1000時張三的話機,1001是李四的話機。若1000發起呼叫,需要在對方話機上顯示“zhangsan”;若1001發起呼叫,需要在對方話機上顯示“lisi”.
配置:
進入 \conf\directory\default\*.xml
(1) 編輯 1000.xml ,找到 <variable name="effective_caller_id_name" value="1000"/>,修改為 <variable name="effective_caller_id_name" value="zhangsan"/>;
(2) 編輯 1000.xml ,找到 <variable name="effective_caller_id_name" value="1001"/>,修改為 <variable name="effective_caller_id_name" value="lisi"/>;
通過 FS_CLI.exe 執行 reloadxml 即可。
FreeSwitch中修改註冊使用者的密碼
在FreeSwitch系統中,所有使用者的密碼預設為 1234,該設定在 \conf\vars.xml 中,如下所示:<X-PRE-PROCESS cmd="set" data="default_password=1234"/>
若需要修改預設密碼的話,直接修改該處即可。
那使用者的密碼和預設密碼怎麼關聯起來?請看下面的配置檔案,以 使用者 1000 為例,開啟 \conf\directory\default\1000.xml ,找到如下設定:
<param name="password" value="$${default_password}"/>,即可找到他們之間的聯絡。若需要修改某使用者的密碼,直接修改 value 值即可。
修改配置完成後,通過 FS_CLI.exe 執行 reloadxml 即可。
FreeSwitch中使用者不經過認證即可註冊成功
一般來說,FreeSwitch中的SIP 使用者都需要通過使用者名稱和密碼進行認證後才能註冊成功,並進行通話。若有特殊需要,也可以設定為無認證即可使用,具體設定如下 :
開啟 \conf\sip_profiles\internal.xml ,將如下兩條設定去掉註釋即可,
即: <param name="accept-blind-auth" value="true"/> <param name="suppress-cng" value="true"/>
在 FS_CLI.exe 中執行 reloadxml 即可。
FreeSwitch中新增新組
FreeSwitch中預設有三個組,分別為:sales ,billing,support。 在 \conf\directory\default.xml 中可以查到。
注意: 在 FreeSwitch中,同一個使用者可以在不同的分組中存在。官方解釋如下 :
type="pointer" is a pointer so you can have the same user in multiple groups. It basically means to keep searching for the user in the directory.
若需要新增一個 名為 ZOO的新組,需要在 \conf\directory\default.xml 中,找到 <groups> 標籤,然後新增如下內容即可,
<group name="ZOO"> <users> <user id="1005" type="pointer"/> <user id="1006" type="pointer"/> <user id="1007" type="pointer"/> <user id="1008" type="pointer"/> <user id="1009" type="pointer"/> </users> </group>
在 FS_CLI.exe 中輸入 reloadxml,重新載入新的XML檔案即可。
FreeSwitch中新增新使用者
FreeSwitch 中預設配置了20個使用者,分別是: 1000 到 1019。在 \conf\directory\default 目錄下有每個使用者的XML配置檔案。
若想新新增一個使用者,可以通過如下步驟進行:
(1)在/conf/directory/default/增加一個使用者配置檔案.如下所示:
<include> <user id="1020"> <params> <param name="password" value="$${default_password}"/> <param name="vm-password" value="1020"/> </params> <variables> <variable name="toll_allow" value="domestic,international,local"/> <variable name="accountcode" value="1020"/> <variable name="user_context" value="default"/> <variable name="effective_caller_id_name" value="Extension 1020"/> <variable name="effective_caller_id_number" value="1020"/> <variable name="outbound_caller_id_name" value="$${outbound_caller_name}"/> <variable name="outbound_caller_id_number" value="$${outbound_caller_id}"/> <variable name="callgroup" value="techsupport"/> </variables> </user> </include>
(2) 修改撥號計劃,以使得其他使用者可以呼到他。如下所示:
在 \conf\dialplan\default.xml中,修改 如下 語句 -
<extension name="Local_Extension"> <condition field="destination_number" expression="^(10[01][0-9])$"> 為 -》 <extension name="Local_Extension"> <condition field="destination_number" expression="^(10[012][0-9])$">
(3) 在 FS_CLI.exe 中執行 reloadxml,即可生效。
FreeSwitch中配置閘道器的方法
在VOIP通訊系統中,經常要用到閘道器。那麼閘道器怎麼和FreeSwitch在一起配合使用?
有如下需求:
有一虛擬運營商(即:SIP PROVIDER ),提供撥打外線的功能。從該處購買一 SIP 賬號,具體配置資訊如下:
使用者名稱:user
密碼: pass
伺服器IP:100. 100.100.100
想通過和該SIP PROVIDER 對接實現撥打外線功能。即:0+要撥打的號碼,就送到該SIP PROVIER (說明:此時的 SIP PROVIDER 相當於一閘道器)。
解決方法:
1)新增一個閘道器
在 \conf\sip_profiles\external 中新增一個名為GW_TEST.xml 的檔案,內容如下: <gateway name="GW_TEST"> <param name="realm" value="100. 100.100.100"/> <param name="username" value="user"/> <param name="password" value="pass"/> </gateway>
(2) 新建一個撥碼計劃
在 \conf\dialplan\default 中新建一個名為 call_gw_test.xml 的檔案 ,內容如下: <include> <extension name="call out"> <condition field="destination_number" expression="^0(\d+)$"> <action application="bridge" data="sofia/gateway/GW_TEST/$1"/> </condition> </extension> </include>
(3) 通過 FS_CLI.exe 執行 reloadxml ,即可生效。
FreeSwitch中的錄影功能和播放錄影功能
FreeSwitch 系統中的錄影功能 和 播放錄影功能,系統都預設提供。
按預設配置,通過IP電話撥打9193,即可錄影;通過IP電話撥打9194即可播放錄影。
同時,我測試了一種有趣的用法,描述如下:
(1) 1000 呼叫 9193 並且傳送視訊; (2) 1001 呼叫 9194 ,可以看到 1000 上傳的視訊,但非實時; (3) 1002 呼叫 9194, 可以看到 1000 上傳的視訊,但非實時。
這樣看來,一個點播系統,FreeSwitch 預設就支援!稍加改造,就可以變為一套視訊直播系統。
實現上述功能的配置檔案在 \conf\dialplan\default.xml 中,如下所示:
[錄影] <extension name="video_record"> <condition field="destination_number" expression="^9193$"> <action application="answer"/> <action application="record_fsv" data="/tmp/testrecord.fsv"/> </condition> </extension> [播放錄影] <extension name="video_playback"> <condition field="destination_number" expression="^9194$"> <action application="answer"/> <action application="play_fsv" data="/tmp/testrecord.fsv"/> </condition> </extension>
FreeSwitch的錄音功能
一般電話系統都可以將本系統內的語音通話錄製下來,FreeSwitch 系統中也可以進行語音錄製。
需求: 錄製系統中的所有通話。
實現:
(1)建立一個資料夾 freeswitch/recordings/archive/ ,用來儲存錄音檔案;
(2)修改撥碼計劃,開啟 \conf\dialplan\default.xml
找到下面的語句:
<extension name="Local_Extension">
<condition field="destination_number" expression="^(10[01][0-8])$">
在其下,新增:
<action application="set" data="RECORD_TITLE=Recording ${destination_number} ${caller_id_number} ${strftime(%Y-%m-%d %H:%M)}"/> <action application="set" data="RECORD_COPYRIGHT=(c) 2011"/> <action application="set" data="RECORD_SOFTWARE=FreeSWITCH"/> <action application="set" data="RECORD_ARTIST=FreeSWITCH"/> <action application="set" data="RECORD_COMMENT=FreeSWITCH"/> <action application="set" data="RECORD_DATE=${strftime(%Y-%m-%d %H:%M)}"/> <action application="set" data="RECORD_STEREO=true"/> <action application="record_session" data="$${base_dir}/recordings/archive/${strftime(%Y-%m-%d-%H-%M-%S)}_${destination_number}_${caller_id_number}.wav"/>
(3)在 FS_CLI.EXE 中執行 reloadxml 或 按 F6 即可生效。
查詢 FreeSwitch 支援的音訊檔案格式,可以在 FS_CLI.exe 中執行 show file 命令。
FreeSwitch播放語音檔案
上一篇介紹了 FreeSwitch 的錄音功能,若想回放這些錄音,是否可以實現?或者說,通過 FreeSwitch ,是否可以直接播放語音檔案?
FreeSwitch 中有一個 playback 的 application ,可以播放語音檔案。
具體用法如下:
(1)播放本地檔案
<action application="set" data="playback_terminators=none"/> <action application="playback" data="sounds/soundfile.wav"/>
(2)播放遠端伺服器上的檔案
FreeSwitch中的會議功能(1)
FreeSwitch 預設支援會議功能,有如下特點:
(1) 不需要建立一個會議室的操作,只需要通過 conference 撥碼計劃就可以實現;
(2) 會議室不真正存在, 直到有人呼入為止;
(3) 會議功能很強大,能實現靈活控制。
這樣講太學術化,來點直觀的,步驟如下:
(1) 執行 FREESWITCH 伺服器程式; (2) 註冊 1000、1001、1002三部IP話機; (3) 通過 1000 呼叫 3000,通話建立後, 1000 將聽到一段保持音樂; (4) 通過 1001 呼叫 3000,通話建立後, 1001將能聽到1000的聲音,1000也能聽到1001的聲音; (5) 通過 1002 呼叫 3000,通話建立後, 1002將能聽到 1000 和 1001的聲音,1001能聽到1000和1002的聲音,1000也能聽到 1001 和 1002 的聲音。
那 3000 這個號碼是怎麼來的? 請看 \conf\dialplan\default.xml 中的內容,如下所示:
<extension name="nb_conferences"> <condition field="destination_number" expression="^(30\d{2})$"> <action application="answer"/> <action application="conference" data="$1-${domain_name}@default"/> </condition> </extension> ......
FreeSwitch中的會議功能(2)
FreeSwitch 提供了一些控制會議成員行為的方法,羅列如下:
(1)Talk volume: The volume of the audio the caller sends (that is, gain control).
與會成員講話的音量控制;
(2)Listen volume: The volume of the audio the caller hears.
與會成員收聽語音的音量控制;
(3)Energy threshold: The minimum energy level of the audio from the caller to be considered talking. Raising the energy level will cut down on background noise when a participant is in a noisy environment.
語音門限控制 。
具體用法,可以檢視:\conf\autoload_configs\console.conf.xml ,內容如下:
<caller-controls> <group name="default"> <control action="mute" digits="0"/> // 靜音 <control action="deaf mute" digits="*"/> // 解除靜音 <control action="energy up" digits="9"/> // 增加門限 <control action="energy equ" digits="8"/> // <control action="energy dn" digits="7"/> // 降低門限 <control action="vol talk up" digits="3"/> // 提高講話音量 <control action="vol talk zero" digits="2"/> // 講話音量設定為0 <control action="vol talk dn" digits="1"/> // 降低講話音量 <control action="vol listen up" digits="6"/> // 提高收聽音量 <control action="vol listen zero" digits="5"/> // 收聽音量設定為0 <control action="vol listen dn" digits="4"/> // 降低收聽音量 <control action="hangup" digits="#"/> // 退出會議 </group> </caller-controls>
FreeSwitch中的會議功能(3)
FreeSwitch中可以設定主持人以及會議密碼。設定了主持人後,可以影響會議的開展;設定了會議密碼後,與會成員必須輸入正確密碼才能入會。
主持人對會議的影響主要體現在以下兩個方面:
(1)直到主持人入會後,會議才開始; (2)主持人退出會議後,會議才結束。
那怎麼設定主持人?方法如下:
<action application="conference" data="[email protected]"/> // 未設定主持人 <action application="conference" data="[email protected]+flags{moderator}"/> // 設定了主持人 如何設定會議密碼?方法如下: <action application="conference" data="[email protected]+1234"/> // 設定入會密碼為 1234 如何既設定主持人,又設定會議密碼?方法如下: <action application="conference" data="[email protected]+1234+flags{moderator}"/>
FreeSwitch中的會議功能(4)
FreeSwitch 是否支援視訊會議?答案是 支援的!
FreeSwitch 預設只支援與會成員看到當前“嗓門最大”的那個人的視訊。
在實際應用中,當講話人改變時,視訊會切換,但切換的時候,視訊會有馬賽克現象。此問題期待高手解決!
場景描述如下:
三個使用者 1000、1001、1002 都註冊到同一臺伺服器。
(1)1000 呼叫 3000,進入會議,同時傳送自己的視訊,1000 可以看到自己;
(2)1001 呼叫 3000,進入會議,可以看到 1000 的視訊。若1001也傳送自己的視訊,雙方看到的視訊是當前講話聲音大的一方的視訊;
(3)1002 呼叫 3000,進入會議,可以看到當前講話一方的視訊。若 1002 也傳送自己的視訊,三方看到的視訊是當前講話聲音大的一方的視訊。
再擴充套件下思維,能否讓 FreeSwitch 實現融屏功能,實現與會各方都能彼此看到自己!那FreeSwitch就更強大了。以下是幾個相關的資源簡介:
(1)BigBluebutton 這個視訊會議專案中用到了 FreeSwitch, 專案主頁: http://www.bigbluebutton.org/ 。但對視訊的處理只是轉發各路視訊,沒有實現融屏合成一路視訊推送到各方顯示。
(2)openvcs 是一個開源的 SIP MCU 實現,專案主頁:http://code.google.com/p/openvcs/ 。 在 Windows 下實現了融屏的原型設計,但在效率以及併發處理方面,還有許多需要完善的地方。但提供了一個開發 SIP MCU 的思路,這個是很有價值的。
FreeSwitch中的會議功能(5)
邀請手機使用者或座機使用者入會: 在 FS_CLI.EXE 中執行 類似 conference <conf-id> dial Sofia/gateway/xyz/1234567890 即可。
FreeSwitch中的音樂保持功能
Music on hold(MOH) ,即:音樂保持,在一般電話系統中都存在。FreeSwitch也支援該功能,並且保持音樂可配置。 FreeSwitch預設的配置中,使用者通過某IP話機撥打 9664 ,呼叫建立後,就可以聽到保持音樂。 檢視當前系統中音樂檔案的路徑,可以通過 FS _CLI.EXE 執行 show_local_stream 來顯示。 如果你想修改預設的保持音樂,可以自己新增一些好聽的音樂進來,方法如下: (1)在 \sounds\music 新建一個資料夾 MOH_TEST,並拷貝音樂檔案進去(WAV檔案);
(2)在 \conf\autoload_configs\local_stream.conf.xml 中新增如下內容, <directory name="moh_test" path="$${sounds_dir}/music/MOH_TEST"> <param name="rate" value="8000"/> <param name="shuffle" value="true"/> <param name="channels" value="1"/> <param name="interval" value="20"/> <param name="timer-name" value="soft"/> </directory> (3) 在 \conf\vars.xml 中新增如下內容, <X-PRE-PROCESS cmd="set" data="moh_test=local_stream://MOH_TEST"/> (4) 在 \conf\dialplan\default 中新增一個名為 moh_test_call.xml 的檔案,內容如下: <include> <extension name="moh_test_call"> <condition field="destination_number" expression="^96646$"/> <action application"playback" data="${moh_test}"/> </condition> </extension> </include> (5)改變了預設的音樂檔案後,需要重新載入 mod_local_stream 模組,在 FS_CLI.exe 中執行 reload mod_local_stream 即可生效。 (6)在 FS_CLI.EXE 中執行 reloadxml 或 按F6,即可生效。
通過某一IP 話機撥打 96646 後,即可聽到你自己設定的保持音樂。