本文档主要介绍的是发送短信的场景。语音通讯后续补充。
业务场景:由于产品部署在视频网、或者公安网这种内部网络,无法使用互联网,发送短信提醒的实现方案有两种
一种是是使用短信猫设备,插入手机卡,调用短信猫服务发送短信
一种就是使用本文介绍这种方式使用FreeSwitch服务+语音网关设备(插入手机卡)
FreeSwitch是什么
FreeSwitch 是一个软交换,是一个SIP Server,是一个IP-PBX
SIP: 是一种源于互联网的IP,语音会话控制协议。
SIP Server: 可以提供一个SIP服务,供给IP电话之间会话
IP-PBX 基于IP的公司电话系统
常用的使用场景
- 使用FreeSwitch当做SIP服务
- 如果需要跟外部通讯,需要购买语音网关这个设备,设备需要接入电话线或者插电话卡
- 如果有IP话机可以接入购买的网关,或者FreeSwitch服务
网关是什么
·····
网关是用来连接运营商的,使得FreeSwitch可以和实体电话或者手机卡通讯
- 网关上有FXO口可以用来连接运营商的线路
- 网关上有FXS口用来通过RJ11电话线连接实体电话
- 网关还会提供路由功能,可以让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
配置网关
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)
发送短信的命令
chat sip|noreply@mydomain|external/sip:18522xx3053@192.168.11.1|测试短信
以上是windows环境,直接在freeswitcConsole里执行的。
可以用fs_cli执行
linux这样执行
fs_cli --execute="chat sip|noreply@mydomain|external/sip:1852xxx3053@192.168.1.107:5080|测试短信"
// 注意192.168.1.107是网关设备的地址