首页 > 技术文章 > Freeswitch配置SIP网关拨打外部

pyweb 2020-08-14 10:03 原文

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. 常用命令

  1. 启动:freeswitch
  2. 启动并后台运行:freeswitch -nc
  3. 进入客户端:fs_cli -H 127.0.0.1 -P 8021 -p password
  4. 退出客户端:/exit, /bye, /quit Ctrl+D
  5. 停止:freeswitch -stop
  6. 查询网关状态: sofia status profile local
  7. 重启网关: sofia profile local restart
  8. 查看freeswitch的端口情况:netstat -anp|grep freeswitch
  9. 使用fs_cli进行呼叫:originate user/1003 &echo 其中&echo会把听到的声音返回给发出者
  10. 音频编码部分设备不支持可以使用这个bgapi originate {absolute_codec_string=PCMU}user/1009 018162330576 xml default
  11. reloadxml 重新加载xml文件
  12. 查看当前注册的用户数量:sofia status profile internal
  13. 查找文件夹:find / -name external -type d
  14. 复制文件到多个文件夹:echo a b c | xargs -n 1 cp -v ./gwl.xml
  15. 重新注册网关:sofia profile external register gw
  16. ps -ef | grep freeswitch netstat -apn | grep 8021
  17. 开启sip消息显示 sofia global siptrace on
  18. 关闭sip消息显示 sofia global siptrace off

3. 默认端口作用

8021: fs_cli客户端连接freeswitch的时候用的端口
5060: SIP软电话连接的端口

官方freeswitch.docker的端口说明
Alt text

4. 错误解决

  1. 报错内容:
    [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>

推荐阅读