本文档主要介绍的是发送短信的场景。语音通讯后续补充。
业务场景:由于产品部署在视频网、或者公安网这种内部网络,无法使用互联网,发送短信提醒的实现方案有两种
一种是是使用短信猫设备,插入手机卡,调用短信猫服务发送短信
一种就是使用本文介绍这种方式使用FreeSwitch服务+语音网关设备(插入手机卡)

FreeSwitch是什么
FreeSwitch 是一个软交换,是一个SIP Server,是一个IP-PBX

SIP: 是一种源于互联网的IP,语音会话控制协议。
SIP Server: 可以提供一个SIP服务,供给IP电话之间会话
IP-PBX 基于IP的公司电话系统

常用的使用场景

  • 使用FreeSwitch当做SIP服务
  • 如果需要跟外部通讯,需要购买语音网关这个设备,设备需要接入电话线或者插电话卡
  • 如果有IP话机可以接入购买的网关,或者FreeSwitch服务
网关是什么

·····
网关是用来连接运营商的,使得FreeSwitch可以和实体电话或者手机卡通讯

  1. 网关上有FXO口可以用来连接运营商的线路
  2. 网关上有FXS口用来通过RJ11电话线连接实体电话
  3. 网关还会提供路由功能,可以让IP电话直接通过wifi或者LAN口相连。(但是我们的使用场景是直接连接 到FreeSwitch,网关只用了以上的两个用途)
    ···
FreeSwitch服务配置介绍

Conf目录下
····
freeswitch.xml 总配置文件,引入以下各个配置文件
vars.xml 配置FreeSwitch用到的变量
主要默认密码的配置:
default_password
outbound_call_id
outbound_call_name
external_rtp_ip
external_sip_ip
internal_sip_port
internal_tls_port
external_sip_port
external_tls_port

autoload_configs 目录
acl.conf.xml 配置
event_socket.conf.xml 配置fs_cli客户端的连接方式

chatplan 文字聊天配置
dialplan 拨号配置
directory SIP分机的默认配置文件,默认有20个。网络电话,或者实体电话都可以注册进来
ivr_menus 语音会话
jingle_profiles 连接google talk
sip_profiles sip的配置文件

FreeSwitch启动方式
  • Windows方式
    这个比较简单,直接Cmd执行FreeSwitchConsole
    出现这个标识,标识启动成功。可以测试或者修改配置。
  • Linux启动方式,由于都是内网环境,直接安装依赖很多还是用docker容器部署的时候比较方便
1. docker volume create --name freeswitch-sounds
// 上边这个主要是映射FreeSwitch里的语音文件,里边会有各种铃声和小段录音,打招呼的录音,挂断前的录音等。不关注语音提示的可以不用关心。我们也会自建一些报警的录音。
2. vi /etc/systemd/system/freeswitch-docker.service  创建一个Systemctl服务。但是实际这个服务启动的是docker容器
[Unit]
Description=freeswitch Container
After=docker.service network-online.target
Requires=docker.service


[Service]
Restart=always
TimeoutStartSec=0
#One ExecStart/ExecStop line to prevent hitting bugs in certain systemd versions
ExecStart=/bin/sh -c 'docker rm -f freeswitch; \
          docker run -t --network bridge --name freeswitch \
                 -p 5060:5060/udp -p 5060:5060 \
                 -e SOUND_RATES=8000 \
                 -e SOUND_TYPES=music:en-us-callie \
                 -v freeswitch-sounds:/usr/share/freeswitch/sounds \
                 -v /etc/freeswitch/:/etc/freeswitch \
                 safarov/freeswitch'

ExecStartPost=/bin/sh -c 'sleep 5; \
          IP_ADDR=$(docker inspect -f "{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}" freeswitch); \
          /sbin/iptables -A DOCKER -t nat -p udp ! -i docker0  --dport 17000:17999 -j DNAT --to $IP_ADDR:17000-17999; \
          /sbin/iptables -A DOCKER -p udp ! -i docker0 -o docker0 -d $IP_ADDR --dport 17000:17999 -j ACCEPT'

ExecStop=-/bin/sh -c 'IP_ADDR=$(docker inspect -f "{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}" freeswitch); \
          /sbin/iptables -D DOCKER -t nat -p udp ! -i docker0  --dport 17000:17999 -j DNAT --to $IP_ADDR:17000-17999; \
          /sbin/iptables -D DOCKER -p udp ! -i docker0 -o docker0 -d $IP_ADDR --dport 17000:17999 -j ACCEPT; \
          /usr/bin/docker stop freeswitch; \
          /usr/bin/docker rm -f freeswitch;'

[Install]
WantedBy=multi-user.target

把以上配置复制倒freeswitch-docker.service文件里。
可以自行修改docker启动的时候的目录映射名称等。
这个里边还开放了好多端口。

建议关闭防火墙 Systemctl stop firewalld

chmod +x /etc/systemd/system/freeswitch-docker.service
systemctl daemon-reload
systemctl start freeswitch-docker

// fs_cli是连接freeswitch的客户端,如果执行得倒容器里边执行,方便使用直接映射倒容器外边
vi ~/.bashrc
alias fs_cli='docker exec -i -t freeswitch /usr/bin/fs_cli'
source ~/.bashrc

以上服务就起来了

网关设备的配置

freeswitch 只用xml_rpc freeswitch应用场景_freeswitch


freeswitch 只用xml_rpc freeswitch应用场景_docker_02


freeswitch 只用xml_rpc freeswitch应用场景_xml_03


freeswitch 只用xml_rpc freeswitch应用场景_xml_04


freeswitch 只用xml_rpc freeswitch应用场景_xml_05


freeswitch 只用xml_rpc freeswitch应用场景_docker_06

配置freeswitch

配置网关
conf/sip_profiles/external/gateway.xml

<include>
	 <gateway name="gateway"> <!-- 网关的名字 --> 
	<param name="username" value="5"/> <!-- sip账号 --> 
	<param name="password" value="1234"/> <!-- sip密码 -->
	 <param name="realm" value="192.168.11.1" /> <!-- sip地址,购买的网关的默 认服务地址 --> 
	 </gateway> 
 </include>

如果这时已经启动了FreeSwitch可以重启也可以通过命令加载
命令

sofia profile internal restart
sofia status
拨通电话播放录音的命令
originate sofia/gateway/gw3/1852xx3053 &playback(D:/5.wav)

freeswitch 只用xml_rpc freeswitch应用场景_IP_07

发送短信的命令
chat sip|noreply@mydomain|external/sip:18522xx3053@192.168.11.1|测试短信

freeswitch 只用xml_rpc freeswitch应用场景_freeswitch_08

以上是windows环境,直接在freeswitcConsole里执行的。

可以用fs_cli执行
linux这样执行

fs_cli --execute="chat sip|noreply@mydomain|external/sip:1852xxx3053@192.168.1.107:5080|测试短信"

// 注意192.168.1.107是网关设备的地址

freeswitch 只用xml_rpc freeswitch应用场景_xml_09