Freeswitch常見問題解決辦法


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/1000@192.168.0.183,sofia/sip/1001@192.68.0.183"/>
                           </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@192.168.0.183|sofia/sip/1001@192.68.0.183"/>
                           </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)播放遠程服務器上的文件

                       <action application="playback" data="${http_get(http://myserver.yo/media/hello_world.wav)}"/>

 

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="$1@default"/> // 未設置主持人
        <action application="conference" data="$1@default+flags{moderator}"/> // 設置了主持人

 
       如何設置會議密碼?方法如下:

       <action application="conference" data="$1@default+1234"/> // 設置入會密碼為 1234



       如何既設置主持人,又設置會議密碼?方法如下:

      <action application="conference" data="$1@default+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 后,即可聽到你自己設置的保持音樂。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM