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
再繼續執行編譯安裝
- ./configure(此過程出現衆多未知錯誤,一般是依賴包沒裝,百度一堆)
- make(make時 出現錯誤我遇到的處理方法在下下下面)
- 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: [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報錯:
[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 的擴充性非常強
參考連結:
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