FreeSwitch常用命令

1.通话相关

  • //先打客户,再转坐席,没有录音
EslMessage elme = client.sendSyncApiCommand("originate", " sofia/gateway/huawei/015011275853 &bridge(user/1011)");
  • //先打客户,再通过拨号计划转坐席,拨号计划中配置了录音
EslMessage elme = client.sendSyncApiCommand("originate", " sofia/gateway/huawei/015011275853 &transfer(01011 XML default);
  • //先打坐席,再转客户,没有录音
EslMessage elme = client.sendSyncApiCommand("originate", " user/1011 &transfer(015011275853 XML default);
  • //先打坐席,再通过拨号计划转客户,拨号计划中配置了录音
    EslMessage elme = client.sendSyncApiCommand(“originate”, " user/1011 &bridge(sofia/gateway/huawei/015011275853);
EslMessage elme = client.sendSyncApiCommand("originate", " user/1011 &bridge(sofia/gateway/huawei/015011275853);
  • 为两个用户建立通话 < 配置来电显示用户名以及号码 >
originate  {origination_caller_id_number=95522,origination_caller_id_name=fanpc}user/1000 {origination_caller_id_number=95522,origination_caller_id_name=wangyong}&bridge(user/1002)
  • 挂机
EslMessage response = client.sendApiCommand("fsctl hupall normal_clearing dialed_ext "+callNo, "");

2.api命令和bgapi命令

  • esl命令 api和bgapi
client.sendApiCommand("originate", " sofia/gateway/huawei/"+calleeno+" &bridge"
          + "(user/"+callno+")");   //api命令
client.sendBackgroundApiCommand("originate", " sofia/gateway/huawei/"+calleeno+" &bridge"
              + "(user/"+callno+")");  //bgapi命令
  • FS api命令和bgapi命令区别及阻塞原因
freeswitch> originate sofia/gateway/gw1/Bob &echo

其中,gw1为呼叫Bob使用的网关的名字。上述命令是阻塞的,因而在Bob对应的网关没有任何反应的时候(不
回任何SIP消息),可能会阻塞较长时间。当FreeSWITCH控制台被阻塞时,将不能输入任何命令。如果要解决这个问题,可以打开另一个终端,用fs_cli连接FreeSWITCH,然后使用show channels找到对应的Channel,并且用
uuid_kill将该Channel释放。当然,为了避免产生这种阻塞的情况,可以提前使用bgapi,如:

freeswitch> bgapi originate sofia/gateway/gw1/Bob &echo

bgapi可以使originate在后台(新的线程中)执行,因而不会阻塞控制台。

3.日志跟踪

  • 打开internale日志跟踪
sofia profile internal siptrace on
  • 关闭external日志跟踪
sofia profile internal siptrace off

3. 彩铃

 originate {instant_ringback=true}{transfer_ringback=local_stream://moh}user/1000 &bridge(user/1001)
 originate {transfer_ringback=local_stream://moh}user/1000 &bridge(user/1001)

4.查看通道信息

  • 查看通道信息
 freeswitch> show channels
  • 查看调试输出
freeswitch> uuid_debug_media b4fae306-3f78-4d91-bcde-a2e95b0f9c1d both on

​ uuid_debug_media命令查看调试输出。其中,该命令的第一个参数是Channel的UUID,接下来是欲
调试的方向。方向有read和write两种(即读和写,也即收和发,都是相对于FreeSWITCH而言的,下同),也可以使用both参数表示双向都调试。最后一个参数是on或off,分别表示打开或关闭调试

5.录音

  • 回拨命令录音
freeswitch> originate user/1002 &record(/tmp/test.wav)
  • 拨打电话后播放录音
originate user/1000 &playback(/usr/local/freeswitch/sounds/test.wav)
  • 对执行uuid的channel录音
freeswitch>	uuid_record  start /tmp/record.wav
  • 对指定uuid的channel停止录音
freeswitch> uuid_record  stop /tmp/record.wav
  • linux系统播放音乐
$ play /tmp/record.wav
  • 停止所有录音
freeswitch>	uuid_record  stop all

6.查询注册用户

  • 查询已注册用户
sofia status profile internal reg

7.查看fs是否运行

  • 进程是否存在
ps aux | grep freeswitch
  • 端口是否被占用
netstat -an | grep 5060

8.查看日志

“警告”(WARNING)和“错误”(ERROR)是级别比较高的日志,“调试”(DEBUG)是级别比较低的日志,但其能显示更多的细节

9.日志抓包

  • 抓取internal和external的sip日志消息
freeswitch> sofia profile internal siptrace on
freeswitch> sofia profile external siptrace on
  • 抓取所有包
freeswitch> sofia global siptrace on   //打开
freeswitch> sofia global siptrace off   //关闭
  • 开启Sofia协议栈底层的调试器
freeswitch> sofia loglevel all 9    //打开
freeswitch> sofia loglevel all 0     //关闭
sofia loglevel    [0-9]    //sofia日志级别格式
freeswitch> sofia loglevel nua 9    //打开nua日志抓包

10. originate呼叫命令

  • 命令格式
freeswitch> originate
-USAGE: |&()
 [] [] [] [] []
  1. call url 外呼呼叫字符串

    freeswitch> originate user/1000 &echo
    
  • 同时拨打不同电话
freeswitch> originate user/1000,user/1001 &echo

通过逗号(,)或竖线符号(|)将多个呼叫字符串隔开,以达到同振或顺振的目的。如下面命令可同时呼叫1000和1001,两个话机都会振铃,哪个先接听则接通哪个,另一路会自动挂断

  • bridge 同时拨打两个电话
freeswitch> originate user/1000 &bridge(user/1001)
  • 挨个拨打不同电话
freeswitch> originate user/1000|user/1001 &echo
  • 超时挨个呼叫
freeswitch> originate {var1=1}[leg_timeout=10]user/1000|
 [leg_timeout=20]sofia/gateway/gw1/1380000000|
 [leg_timeout=20]sofia/gateway/gw2/1380000000

leg_timeout只应用于靠近它的那一条腿上,它用于定义呼叫超时,即等待对方返回媒体(如183或200)的超时时间。而var1=1是全局的,每条腿都会有这个变量

  • 呼叫指定语音编码格式
freeswitch> originate {absolute_codec_string=G729\,PCMU}user/1000 &echo
  • 设置主叫号7777
freeswitch> originate {origination_caller_id_number=7777}user/1000 &echo
  • 设置主叫号7777,转换主叫号为1000(隐藏电话号),并转接1001
freeswitch> originate {originattion_caller_id_number=7777}user/1000 &bridge(user/1001)
  • 来电显示
freeswitch> originate {originatioin_caller_id_number=7777}user/1000
 &bridge({origination_caller_id_number=8888}user/1001)
或者
freeswitch> originate {originatioin_caller_id_number=7777}
{effective_caller_id_number=8888}user/1000
 &bridge(user/1001)

11.彩铃 early media

  • 主动外呼如电话自动催费,用户真正接听后放音乐,或进入IVR
freeswitch> originate {ignore_early_media=true}sofia/gateway/gw/13800000000
 &playback(/tmp/test.wav)
  • 同时给两个用户播放相同彩铃
freeswitch> originate {instant_ringback=true}transfer_ringback=local_stream://moh}user/1000
&bridge(user/1001)

12.批量创建用户配置文件

**注意:**以下命令都在linux的shell命令行中执行

  • 以1000.xml为模板,创建1020.xml

在UNIX系统上的Shell中使用下列命令完成

sed -e "s/1000/1020/" 1000.xml > 1020.xml

sed是UNIX系统上经典的流文件编辑器,上面我们使用sed的“s”命令将1000.xml文件中所有出现1000的
地方都替换成1020,然后将命令的输出重定向(大于号是Shell中的重定向操作符)到1020.xml文件中

  • 批量创建1020~1039 xml文件
for i in `seq 1020 1039`; do sed -e "s/1000/$i/" 1000.xml > $i.xml ; done
  • Perl脚本添加配置文件

源代码目录中的scripts/perl目录下也有一个add_user脚本

 ./add_user 1020

指定生成配置文件路径

./add_user 1020 --domain=my_domain --confpath=/opt/freeswitch/conf

指定批量创建用户范围

./add_user --users=1020-1039

在指定文件夹中生成配置文件

# mkdir -p /tmp/directory/my_domain
# ./add_user 1111 --users=1020-1039 --domain=my_domain --confpath=/tmp

注意: 修改拨号计划配置文件之后别忘记修改拨号计划正则匹配规则



重新加载配置文件

freeswitch>reloadxml

13.fs的ivr语言菜单

IVR系统默认的配置文件为

conf/autoload_configs/ivr.conf.xml

ivr按钮配置目录

conf/ivr_menus/

conf/ivr_menus/welcome.xml


 
 
 
 
 
 

·greet-long   该语音文件默认的位置应该是在/usr/local/freeswitch/sounds目录下   开始欢迎音乐
·greet-short  //按键提示音  如果长时间没有输入 提示
·invalid-sound    //按错键 提示音
·exit-sound       //退出菜单提示音
·timeout          //按键输入超时提示音
.max-failures         //容许用户最大输入错误次数
.max-timeouts        //最大超时次数
·inter-digit-timeout    //按键时间间隔
·digit-len        //输入号最大长度
  • 呼叫1001,接听后进入ivr菜单
freeswitch> originate user/1001 &ivr(welcome)

14.Inbound和Outbound

​ Outbound模式相较于嵌入式语言相比更强大,适合控制单腿的呼叫,实现复杂的IVR应用;而Inbound更适合接收所有的事件,与多条腿进行交互,进行更复杂的呼叫控制。其中,在Outbound模式中,又分为同步模式和异步模式,同步模式控制比较简单,但自由度较小;异步模式需要更多的编程技巧,但会更强大。

​ Outbound模式的Socket是由FreeSWITCH建立的,它是建立在Channel的基础上的,每一个Channel均会为外部的TCP Server建立一个连接,在Channel挂机时释放,因此,Outbound的连接要考虑Channel的生命周期(即Socket的生命周期)。而Inbound的连接由客户端主动向FreeSWITCH发起连接,极需要考虑断线重连等问题。

你可能感兴趣的:(FreeSwitch常用命令)