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 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就已經安裝完了。在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> 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: 1001@172.17.0.8
Contact: "1001" <sip:1001@60.177.98.xx: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: 1001@172.17.0.8
 
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/1003@118.89.69.x:5060,CS_EXECUTE,1003,1003,60.177.xx.241,1001,1003@118.89.69.xx,,1003,ACTIVE,,,,313cad28-e1eb-4ea6-910a-90d112e19655,king,,,e9caa3c1-ba32-4d79-b1e1-4f62b2bc2e44,outbound,2019-12-12 15:45:42,1576136742,sofia/internal/1001@60.177.98.xxx:61514,CS_EXCHANGE_MEDIA,Extension 1003,1003,60.xxx.98.241,1001,1001@172.17.0.8,,,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 -c -nonat -rp
 
# 默認后台運行
freeswitch -nc
 
# 生成環境后台運行
freeswitch -rp -nc -nonat
#####
軟件電話
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
tar vzxf cmake-3.14.0.tar.gz
cd cmake-3.14.0
./configure
make
make install
ln -s /usr/local/bin/cmake /usr/bin #軟連接
安裝libks
cd /usr/local/src
yum install libatomic
cd libks
cmake .
make
make install
安裝signalwire-c
cd /usr/local/src
cd signalwire-c/
cmake .
make
make install
 
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報錯
[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
禁用方式,在主目錄執行
 
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]

 編輯 

vim /usr/local/freeswitch/conf/autoload_configs/event_socket.conf.xml

重啟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 的擴展性非常強
 參考鏈接:
 


免責聲明!

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



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