一.freeswitch常用的命令
1.当前通话RTP没有查询命令
a.查询通道UUID
show channels
b.查看调试输出
uuid_debug_media uuid both on
c.关闭调试输出
uuid_debug_media uuid both off
d.日志显示R与W(Read和Write)即收和发,说明已正确收发媒体流了
2.FreeSWITCH支持现场抓包
a.抓看internal上的包命令
sofia profile internal siptrace on
b.抓看external上的包命令
sofia profile externaal siptrace on
c.关闭命令
sofia profile internal siptrace off
sofia profile external siptrace off
3.打开所有Profile的抓包命令
a.开启
sofia global siptrace on
b.关闭
sofia global siptrace off
4.Sofia协议栈底层调试命令
a.开启
sofia loglevel all 9
b.关闭
sofia loglevel all 0
5.使用外部工具
a.tcpdump
1.直接输出
tcpdump -nq -s 0 -A -vvv -i eth0 port 5060
2.输出到文件
tcpdump -nq -s 0 -i eth0 -w /tmp/dump.pcap port 5060
3.抓rtp流包
tcpdump -nq -s 0 -i eth0 -w /tmp/dump.pcap udp
b.抓指定用的包
1.先找到用户的ip和端口号
sofia status profile internal reg 1002
2.开始抓包
tcpdump -i eth0 -s 0 -A host 192.168.0.165 and port 65237
c.抓取freeswitch所有的RTP默认端口范围为(16484-32768)
tcpdump -i eth0 -w /tmp/sip-rtp.pcap "udp and (port 5060 or port 5080 or portrange 16384-32768)"
6.originate命令使用
a.呼叫命令
originate user/1001 &echo
b.同时呼叫命令同振
originate user/1000,user/1001 &echo
c.同时呼叫命令顺振
originate user/1000|user/1001 &echo
d.originate命令是阻塞的用hupall挂断
hupall
e.originate与bridge桥接呼叫俩个用户
originate user/1000 &bridge(user/1001)
f.控制来电显示主叫号码
originate user/1000 &bridge({origination_caller_id_number=8888}user/1001)
originate {origination_caller_id_number=7777}user/1000 &bridge({origination_caller_id_number=8888}user/1001)
originate {origination_caller_id_number=7777}user/1000 &bridge({origination_caller_id_number=8888}user/1001)
二.freeswitch 图形化界面管理
1.通过提供图形界面,后台修改freeswitch的xml配置文件,并且调用reloadxml或其它重启命令使之生效(只适合单台)
2.通过使用freeswitch提供的xml_curl接口,提供一个http服务器动态向freeswitch提供xml(适合多台,大规模部署)
3.FusionPBX开源的GUI管理界面
a.FusionPBX是使用PHP开发的FreeSWITCH GUI (支持Linux,Windows,BSD Mac OS X等多种操作系统,支持数据 PostgreSQL,MySQL,SQLite等)
b.FusionPBX通过将数据存储到数据库,并修改本地的XML配置文件实现的.
c.FusionPBX支持无线分机,IVR,呼叫组,传真,会议,队列,呼叫前转移,点击播号,以及实时呼叫状态显示,使用起来比较方便
4.FreeSWITCH-Portal是作者发起的项目,适合学习用
a.命令加载模块
load mod_xml_rpc
b.随FreeSWITCH启动可以修改conf/autoload_configs/modules.xml中把注释去掉
c.访问地址:http://localhost:8080/portal
d.用户名密码在conf/autoload_configs/xml_rpc.conf.xml(默认用户名字为:freeswitch 密码为:works)
三.基本功能与实现
1.批量添加用户
a.在freeSWITCH源代码目录中的scripts/perl目录下有add_user脚本
b.创建单个用户./add_user 1020
c.批量创建用户 ./add_user --users=1020-1039
d.添加指定路径./add_user 1020 --domain=my_domain --confpath=/home/freeswitch-yxr/etc/freeswitch/
e.批量添加 ./add_user --users=1021-1039 --domain=my_domain --confpath=/home/freeswitch-yxr/etc/freeswitch/
f.修改dialplan 的路由
2.录音
a.命令方式单腿录音
originate user/1000 &record(/tmp/welcome.wav)
b.播放录音命令
originate user/1001 &playback(/tmp/123.wav)
c.配置录音
<extension name="record">
<condition field="destination_number" expression="^(100[0-9])$">
<action application="record_session" data="/tmp/record-$1.wav"/>
<action application="bridge" data="user/$1"/>
</condition>
</extension>
d.录制立体音
<extension name="record">
<condition field="destination_number" expression="^(100[0-9])$">
<action application="set" data="RECORD_STEREO=true"/>
<action application="record_session" data="/tmp/record-$1.wav"/>
</condition>
</extension>
四.呼叫转移(未设置成功过)
<extension name="call_forward_unconditional_unset">
<condition field="destination_number" expression="^#57#?$">
<action application="hash" data="delete/${domain_name}-cfwdu/${username}"/>
<action application="answer"/>
<action application="playback" data="/tmp/$1.wav"/>
</condition>
</extension>
<extension name="call_forward_unconditional_check" continue="true" >
<condition>
<action application="info" data=""/>
<action application="set" inline="true" data="cfwdu=${hash(select/${domain_name}-cfwdu/${destination_number})}"/>
</condition>
</extension>
<extension name="call_forward_unconditional_check2" continue="true">
<condition field="${cfwdu}" expression="^#10[01][0-9]?$">
<action application="bridge" data="user/${cfwdu}"/>
</condition>
</extension>
五.实现简单的呼叫队列(mod_fifo)
1.呼叫停泊与取回
停泊
取回
2.配置坐席
静态坐席
vim conf/autoload_configs/fifo.conf
user/1001
user/1000
配置路由
动态席位分配
fifo_music add user/1001
fifo_music add user/1000
删除
fifo_music del user/1000
话机签入签出