Freeswitch配置SIP网关拨打外部
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>