天天看點

FreeSWITCH的安裝與使用

FreeSWITCH

FreeSWITCH的是一個跨平台的開源電話交換平台
環境:

[root@cen ~]# cat /etc/redhat-release 

CentOS Linux release 7.7.1908 (Core)

安裝:

1.準備好FreeSWITCH安裝包(我用的1.6版本),

2.安裝環境以及依賴

---------------------------------------------------------------------

 1.源碼安裝 包:github擷取或FreeSWITCH官網下載下傳或本人藍奏雲并解壓

[root@king src]# pwd
/usr/local/src
[root@king src]# ll
-rw-r--r-- 1 root root 59842116 Dec 12 09:48 freeswitch-1.6.zip
drwxr-xr-x 24 root root 20480 Dec 12 12:25 freeswitch-1.6      

2.安裝依賴環境:

yum install -y http://files.freeswitch.org/freeswitch-release-1-6.noarch.rpm epel-release

yum install -y git alsa-lib-devel autoconf automake bison broadvoice-devel bzip2 curl-devel libdb4-devel e2fsprogs-devel erlang flite-devel g722_1-devel gcc-c++ gdbm-devel gnutls-devel ilbc2-devel ldns-devel libcodec2-devel libcurl-devel libedit-devel libidn-devel libjpeg-devel libmemcached-devel libogg-devel libsilk-devel libsndfile-devel libtheora-devel libtiff-devel libtool libuuid-devel libvorbis-devel libxml2-devel lua-devel lzo-devel mongo-c-driver-devel ncurses-devel net-snmp-devel openssl-devel opus-devel pcre-devel perl perl-ExtUtils-Embed pkgconfig portaudio-devel postgresql-devel python-devel python-devel soundtouch-devel speex-devel sqlite-devel unbound-devel unixODBC-devel wget which yasm zlib-devel libshout-devel libmpg123-devel lame-devel

編譯安裝:

進入解壓目錄

執行bootstrap.sh

再繼續執行編譯安裝

  1. ./configure(此過程出現衆多未知錯誤,一般是依賴包沒裝,百度一堆)
  2. make(make時 出現錯誤我遇到的處理方法在下下下面)
  3. make install

安裝結果部分截圖:

FreeSWITCH的安裝與使用

至此,FreeSWITCH就已經安裝完了。在CentOS系統上,其預設的安裝位置是/usr/local/freeswitch。兩個常用的指令是bin/freeswitch和bin/fs_cli,為了便于使用,建議将這兩個指令做符号連結放到你的搜尋路徑中,如:

ln -sf /usr/local/freeswitch/bin/freeswitch /usr/bin/
ln -sf /usr/local/freeswitch/bin/fs_cli /usr/bin/      

目錄結構:

bin 可執行程式
certs
conf** 配置檔案
db 系統sqlite資料庫.将呼叫資訊存放到資料庫,在查詢時無需對核心資料結構加鎖🔒
fonts
grammar 文法,适用于ASR
htdocs HTTP Web Server根目錄
images
include 頭檔案
lib 庫檔案
log 日志
mod 可加載子產品目錄
recordings 錄音
run pid
scripts 嵌入式語言寫入的腳本,
sounds 聲音檔案
storage 語音留言的錄音(Voicemail)

配置檔案:

由許多xml組成,

檔案夾 描述
autoload_configs 這些配置檔案會在系統啟動時自動加載到FreeSWITCH中,它們包含幾乎所有核心子產品的配置資訊。檔案一般以“子產品”.conf.xml稱
dialplan** 設定撥号計劃的地方。包括一些有關如何配置撥号計劃的示例。
directory** 該目錄包含所有可能注冊并将freeswitch用作其PBX的使用者。預設有1000-1019 20個使用者
jingle_profiles Jingle是FS用于處理XMPP的mod。配置檔案告訴FS如何使用該協定。每個配置檔案都有其自己的IP端口。
lang 語言
mrcp_profiles MRCP用于允許FreeSWITCH使用語音識别和TTS
sip_profiles 告訴FS如何交談。每個配置檔案都有其自己的端口。
ivr_menus 存放了一些預設的IVR
freeswitch.xml** 将所有的xml配置檔案“粘”在一起
vars.xml 定義全局變量

more

安裝聲音檔案

make cd-sounds-install

make cd-moh-install

FreeSWITCH 安裝後,預設配置了20個使用者(1000-1019),密碼 1234,同時包含了一個功能齊全的 IVR 示例,随便使用一個分機号登陸伺服器,撥5000,就可以聽到菜單提示了。

啟動

# 可以看到詳細啟動日志,啟動後進入控制台模式,退出使用shutdown

freeswitch -c -nonat -rp

# 預設背景運作

freeswitch -nc ***

# 生成環境背景運作

freeswitch -rp -nc -nonat

# 關閉

freeswitch -stop ***

#進入背景:

fs_cli(直接執行,如果你建立軟連結,沒有建立需要到bin目錄找到fs_cli執行)

FreeSWITCH的安裝與使用

檢視編碼:

freeswitch@FreeSWITCH> show codec
type,name,ikey
codec,ADPCM (IMA),mod_spandsp
codec,AMR,mod_amr
codec,B64 (STANDARD),mod_b64
codec,G.722,mod_spandsp
codec,G.723.1 6.3k,mod_g723_1
codec,G.726 16k,mod_spandsp
codec,G.726 16k (AAL2),mod_spandsp
codec,G.726 24k,mod_spandsp
codec,G.726 24k (AAL2),mod_spandsp
codec,G.726 32k,mod_spandsp
codec,G.726 32k (AAL2),mod_spandsp
codec,G.726 40k,mod_spandsp
codec,G.726 40k (AAL2),mod_spandsp
codec,G.729,mod_g729
codec,GSM,mod_spandsp
codec,LPC-10,mod_spandsp
codec,OPUS (STANDARD),mod_opus
 
17 total.       

freeswitch@FreeSWITCH>

檢視系統的運作狀态:

freeswitch@FreeSWITCH> status
UP 0 years, 0 days, 0 hours, 3 minutes, 21 seconds, 118 milliseconds, 975 microseconds
FreeSWITCH (Version 1.6.20 64bit) is ready
3 session(s) since startup
0 session(s) - peak 1, last 5min 1
0 session(s) per Sec out of max 30, peak 1, last 5min 1
1000 session(s) max
min idle cpu 0.00/97.47
Current Stack Size/Max 240K/8192K
 
freeswitch@king>      

檢視注冊:

freeswitch@FreeSWITCH> sofia status profile internal reg
 
Registrations:
 
Call-ID: 101919ZDFhZDNhNDZmMTUwZTc5NTUzNjM2ZWIxNjI3NWQ1NGQ
User: [email protected]
Contact: "1001" <sip:[email protected]:61514;rinstance=147853e260e28850>
Agent: X-Lite release 5.8.0 stamp 101919
Status: Registered(UDP)(unknown) EXP(2019-12-12 16:39:07) EXPSECS(3572)
Ping-Status: Reachable
Ping-Time: 0.00
Host: king
IP: 60.177.98.xx
Port: 61514
Auth-User: 1001
Auth-Realm: 172.17.0.8
MWI-Account: [email protected]
 
Total items returned: 1      

# 檢視使用者是否注冊

sofia status profile internal reg 1000

# 呼叫電話,接通後park

originate user/1000 &park

# 切斷電話

fsctl hupall normal_clearing dialed_ext 1000

# 呼叫電話,接通後播放音樂

originate user/1000 &playback(/tmp/music.wav)

# 檢視目前通話數

show calls

freeswitch@FreeSWITCH> show calls

uuid,direction,created,created_epoch,name,state,cid_name,cid_num,ip_addr,dest,presence_id,presence_data,accountcode,callstate,callee_name,callee_num,callee_direction,call_uuid,hostname,sent_callee_name,sent_callee_num,b_uuid,b_direction,b_created,b_created_epoch,b_name,b_state,b_cid_name,b_cid_num,b_ip_addr,b_dest,b_presence_id,b_presence_data,b_accountcode,b_callstate,b_callee_name,b_callee_num,b_callee_direction,b_sent_callee_name,b_sent_callee_num,call_created_epoch

313cad28-e1eb-4ea6-910a-90d112e19655,inbound,2019-12-12 15:45:32,1576136732,sofia/internal/[email protected]:5060,CS_EXECUTE,1003,1003,60.177.xx.241,1001,[email protected],,1003,ACTIVE,,,,313cad28-e1eb-4ea6-910a-90d112e19655,king,,,e9caa3c1-ba32-4d79-b1e1-4f62b2bc2e44,outbound,2019-12-12 15:45:42,1576136742,sofia/internal/[email protected]:61514,CS_EXCHANGE_MEDIA,Extension 1003,1003,60.xxx.98.241,1001,[email protected],,,ACTIVE,Outbound Call,1001,,,,1576136747

1 total.

------------

# 檢視目前通道數

show channels

配置Freeswitch新增使用者

1.添加使用者

預設使用者在/usr/local/freeswitch/conf/directory/default/下

2.修改撥号計劃(Dialplan)使其他使用者可以呼叫它(預設隻能打不能接)

/usr/local/freeswitch/conf/dialplan/ default.xml

<extension name="Local_Extension">

<condition field="destination_number" expression="^(10[01][0-9]|1020|1021)$">

3.在背景重新加載配置檔案

freeswitch@FreeSWITCH> reloadxml

# 可以檢視到詳細的日志資訊

freeswitch -nc

#####

軟體電話
X-Lite
Zoiper
子產品的安裝

源碼目錄下make mod_xxx-install指令,這樣就編譯相應子產品,并把編譯後的動态庫安裝的/usr/local/freeswitch/mod目錄下了。

給1000打電話

originate user/1000 &echo

報錯:

正常情況下,直接輸入 bin/fs_cli 即可連接配接上,并出現系統提示符。如果出現:

[ERROR] libs/esl/fs_cli.c:652 main() Error Connecting [Socket Connection Error]

這樣的錯誤,說明 FreeSWITCH 沒有啟動或 mod_event_socket 沒有正确加載,請檢查TCP端口8021端口是否處于監聽狀态或被其它程序占用。(重新開機報錯消失)

fs_cli 連接配接不了本機的 freeswitch 檢查配置檔案下的 autoload_config/event_socket.conf.xml 中的 ip,密碼等資訊,以及檢視預設 的 8021 端口是否啟動 機 檢視本機 freeswitch 的運作狀态

=======================================================================================

錯誤合集

make時出現的錯誤: making all mod_signalwire make[4]: Entering directory /usr/local/src/freeswitch/src/mod/applications/mod_signalwire' Makefile:916: *** You must install libks to build mod_signalwire. Stop. make[4]: Leaving directory/usr/local/src/freeswitch/src/mod/applications/mod_signalwire' make[3]: *** [mod_signalwire-all] Error 1 根據報錯可以看出需要安裝需要安裝 libks 和 signalwire-c,安裝libks前需要先安裝cmake。

安裝cmake

yum remove cmake #解除安裝yum安裝的版本,若無安裝則忽略

cd /usr/local/src

wget https://cmake.org/files/v3.14/cmake-3.14.0.tar.gz

tar vzxf cmake-3.14.0.tar.gz

cd cmake-3.14.0

./configure

make

ln -s /usr/local/bin/cmake /usr/bin #軟連接配接

安裝libks

yum install libatomic

git clone https://github.com/signalwire/libks.git

cd libks

cmake .

安裝signalwire-c

git clone https://github.com/signalwire/signalwire-c.git

cd signalwire-c/

ln -sf /usr/local/lib64/pkgconfig/signalwire_client.pc /usr/lib64/pkgconfig/signalwire_client.pc

最後再次安裝FreeSWITCH

make && make install

-------------------------------------------------------------------

Freeswitch 的日志上就會出現相關的 debug,notice 等資訊。 如遇到紅色的報警,并提示要 sleep 10 秒的,則是由于我們使用了預設密碼,可以修改 Conf/vars.xml 中的 <X-PRE-PROCESS cmd="set" data="default_password=1234"/> 或修改 conf/dialplan/default.xml 中 <condition field="${default_password}" expression="^1234$" break="never"> <action application="log" data="CRIT WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING "/> <action application="log" data="CRIT Open $${conf_dir}/vars.xml and change the default_password."/> <action application="log" data="CRIT Once changed type 'reloadxml' at the console."/> <action application="log" data="CRIT WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING "/> <action application="sleep" data="10000"/> </condition>

 ----------------------------------------------------------------------------------------------------------------------

啟動freeswitch報錯:

FreeSWITCH的安裝與使用

[ERR] sofia.c:3146 Error Creating SIP UA for profile: external-ipv6 

[ERR] sofia.c:3146 Error Creating SIP UA for profile: internal-ipv6

處理:禁用ipv6,如果系統不支援,可能會刷如上錯誤資訊,禁用即可 。。查找來自https://www.cnblogs.com/lmsthoughts/p/9322816.html

禁用方式,在主目錄執行

FreeSWITCH的安裝與使用
mv conf/sip_profiles/internal-ipv6.xml conf/sip_profiles/internal-ipv6.xml.bk
mv conf/sip_profiles/external-ipv6.xml conf/sip_profiles/external-ipv6.xml.bk      

重新啟動就沒有了呵呵

----------------------------------------------------------------------------------

使用fs_cli啟動報錯

處理報錯:[ERROR] fs_cli.c:1659 main() Error Connecting [Socket Connection Error]

FreeSWITCH的安裝與使用

 編輯 

vim /usr/local/freeswitch/conf/autoload_configs/event_socket.conf.xml
      
FreeSWITCH的安裝與使用

重新開機FreeSWITCH

 fs_cli -H IP -P 8021 -p ****(密碼)

++====================================================================

配置錄音功能:

1.建立錄音存儲檔案夾

2.修改配置檔案

3.使配置檔案生效

4.測試結果

    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中使用F6或執行reloadxml使配置檔案生效;

4.随便呼叫産生錄音檔案

FreeSWITCH 架構

FreeSWITCH 的擴充性非常強

 參考連結:

https://freeswitch.com/

https://www.cnblogs.com/5444de/p/12446992.html

https://freeswitch.org/confluence/display/FREESWITCH/Installation

http://www.freeswitch.org.cn/2010/05/08/di-wu-zhang-freeswitch-jia-gou.html

https://www.kancloud.cn/ichenpeng/blog/1352178

https://cotin.tech/AI/FreeswitchSetting/

https://www.jianshu.com/p/61ce097c9026

http://www.360doc.com/content/17/0307/11/40894077_634670060.shtml

https://www.cnblogs.com/Braveliu/p/10943511.html

https://blog.csdn.net/zhuimeng11_/article/details/92819658

https://www.cnblogs.com/Lewis302/p/10466936.html