Freeswitch配置SIP網關撥打外部電話
為了實現freeswitch能夠往外面(也就是打到你的手機號上)打電話,我們需要再freeswitch服務器上配置一些參數,當然前提是需要有一個SIP網關(硬件),一般是向網關服務商(華為,奧科等)購買,也可以直接向電信運營商購買。
1. 添加網關
添加網關只需要在freeswitch服務器目錄下的conf/sip_profiles/external/中創建一個XML文件,名字可以隨便取,如gwl.xml,然后在這個文件里面輸入如下代碼:
(注:1.4版本也可能是在conf/sbc/sbc_profiles/external/或者conf/insideout/sip_profiles/external
里面)
<gateway name="gwl">
<param name="realm" value="SIP服務器地址,可以是IP或者IP:端口"/>
<param name="username" value="SIP用戶名"/>
<param name="password" value="密碼"/>
<param name="proxy" value="112.3.18.9:5060"/>
8 <param name="register" value="true" />
</gateway>
如果你的網關還需要其他參數,可以參閱同目錄下的"example.xml",但一般來說上述參數就夠了。你可以重啟freeswitch,或者執行以下命令使之生效:
freeswitch> sofia profile external rescan
顯示一下網關的注冊狀態:
freeswitch> sofia status
如果顯示gateway gwl的狀態時REGED,則表明以正確注冊到網關了,可以用命令試一下網關是否正常工作:
freeswitch> originate sofia/gateway/gwl/xxxxxxx &echo
以上命令回通過網關gwl呼叫號碼xxxxxx(手機號),被叫號碼接聽電話后,Freeswitch會執行echo程序,你就能聽到自己的回聲了。
2. 常用命令
- 啟動:freeswitch
- 啟動並后台運行:freeswitch -nc
- 進入客戶端:fs_cli -H 127.0.0.1 -P 8021 -p password
- 退出客戶端:/exit, /bye, /quit Ctrl+D
- 停止:freeswitch -stop
- 查詢網關狀態: sofia status profile local
- 重啟網關: sofia profile local restart
- 查看freeswitch的端口情況:netstat -anp|grep freeswitch
- 使用fs_cli進行呼叫:originate user/1003 &echo 其中&echo會把聽到的聲音返回給發出者
- 音頻編碼部分設備不支持可以使用這個bgapi originate {absolute_codec_string=PCMU}user/1009 018162330576 xml default
- reloadxml 重新加載xml文件
- 查看當前注冊的用戶數量:sofia status profile internal
- 查找文件夾:find / -name external -type d
- 復制文件到多個文件夾:echo a b c | xargs -n 1 cp -v ./gwl.xml
- 重新注冊網關:sofia profile external register gw
- ps -ef | grep freeswitch netstat -apn | grep 8021
- 開啟sip消息顯示 sofia global siptrace on
- 關閉sip消息顯示 sofia global siptrace off
3. 默認端口作用
8021: fs_cli客戶端連接freeswitch的時候用的端口
5060: SIP軟電話連接的端口
官方freeswitch.docker的端口說明
4. 錯誤解決
- 報錯內容:
[ERROR] fs_cli.c:1659 main() Error Connecting [Socket Connection Error]
這個報錯說明Freeswitch服務沒有開啟,或者mod_event_socket沒有正確加載
可以在/usr/local/freeswitch/conf/autoload_config/event_socket.conf.xml 文件修改監聽ip地址為0.0.0.0或者127.0.0.1
<configuration name="event_socket.conf" description="Socket Client">
<settings>
<param name="nat-map" value="false"/>
<param name="listen-ip" value="0.0.0.0"/>
<param name="listen-port" value="8021"/>
<param name="password" value="ClueCon"/>
<!--<param name="apply-inbound-acl" value="loopback.auto"/>-->
<!--<param name="stop-on-bind-error" value="true"/>-->
</settings>
</configuration>