参考文档
mod_commands api文档:
https://developer.signalwire.com/freeswitch/FreeSWITCH-Explained/Modules/mod_commands_1966741/
mod_dptools app文档
https://developer.signalwire.com/freeswitch/FreeSWITCH-Explained/Modules/mod_dptools_1970333/
1.控制台与命令客户端
FreeSWITCH 是 Client-Server结构,不管 FreeSWITCH 运行在前台还是后台,你都可以使用客户端软件 fs_cli 连接 FreeSWITCH.
fs_cli 是一个类似 Telnet 的客户端(也类似于 Asterisk 中的 asterisk -r命令),它使用 FreeSWITCH 的 ESL(Event Socket Library)库与 FreeSWITCH 通信。
当然,需要加载模块 mod_event_socket。该模块是默认加载的。
正常情况下,直接输入 bin/fs_cli 即可连接上,并出现系统提示符。如果出现:
[ERROR] libs/esl/fs_cli.c:652 main() Error Connecting [Socket Connection Error]
这样的错误,说明 FreeSWITCH 没有启动或 mod_event_socket 没有正确加载,请检查TCP端口8021端口是否处于监听状态或被其它进程占用。
fs_cli 也支持很多命令行参数,值得一提的是 -x 参数,它允许执行一条命令后退出,这在编写脚本程序时非常有用
bin/fs_cli -x “version”
version – 显示当前版本
status – 显示当前状态
sofia status – 显示 sofia 状态
help – 显示帮助
以 “/” 开头的,这些命令并不直接发送到 FreeSWITCH,而是先由 fs_cli 处理。/quit、/bye、/exit、Ctrl + D 都可以退出 fs_cli;/help是帮助
其它一些 “/”开头的指令与 Event Socket 中相关的命令相同,如:
/event – 开启事件接收
/noevents – 关闭事件接收
/nixevent – 除了特定一种外,开启所有事件
/log – 设置 log 级别,如 /log info 或 /log debug 等
/nolog – 关闭 log
/filter – 过滤事件
2.API和APP
最本质的区别:
一个 APP 是一个程序(Application):它作为一个 Channel 一端与另一端的 UA 进行通信,相当于它工作在 Channel 内部;
一个 API 则是独立于一个 Channel 之外的,它只能通过 UUID 来控制一个 Channel(如果需要的话)。
我们在控制台上输入的命令都是 API;
在 拨号计划 中执行的程序都是 APP(拨号计划 中也能执行一些特殊的 API)。
大部分公用的 API 都是在 mod_commands 模块中加载的;
APP 则在 mod_dptools 中,因而 APP 又称为拨号计划工具(Dialplan Tools)。
某些 APP 有与其对应的 API,如上述的 bridge/uuid_bridge,还有 transfer/uuid_transfer、playback/uuid_playback等。
UUID 版本的 API 都是在一个 Channel 之外对 Channel 进行控制的,它们应用于不能参与到通话中却又想对正在通话的 Channel做点什么的场景中。
例如 alice 和 bob 正在畅聊,有个坏蛋使用 uuid_kill 将电话切断,或使用 uuid_broadcast 给他们广播恶作剧音频,或者使用 uuid_record 把他们谈话的内容录音等
3.conference 会议
加入会议
conference 3001 dial sofia/external/[email protected]
conference 3001 dial user/1013
列出所有会议:conference list
4.呼叫中心
查看Agent:callcenter_config agent list
查看队列:callcenter_config queue list
5.呼叫管理命令
尖括号(< >)括起来的表示要输入的参数,
方括号([ ])括起来的则表示可选项,该参数可以有也可以没有。
竖线(|)分开的参数列表表示“或”的关系,即只能选其一
create_uuid
创建新UUID并将其作为字符串返回
用法:create_uuid
originate
发起一个新的呼叫
用法:
originate <call_url> <exten>|&<application_name>(<app_args>) [<dialplan>] [<context>] [<cid_name>] [<cid_num>] [<timeout_sec>]
<call_url>:您正在呼叫的URL。有关sofia SIP URL语法的更多信息,请参阅:FreeSwitch Endpoint sofia
<exten>:要在拨号计划中搜索的目的地号码,用&bridge(user/xxxx)替代
&<application_name>:“&”表示后面是应用程序名称,而不是扩展名,(<app_args>)是可选的
注意:使用单引号传递带空格的参数,例如“&lua(test.lua arg1 arg2)”
注意:&和应用程序名称之间没有空格
<dialplan>:如果未指定,则默认为“XML”。
<context>:如果未指定,则默认为“default”。
<cid_name>:要发送的呼叫者ID名称。
<cid_num>:要发送的呼叫者ID号码。
<timeout_sec>:超时(秒);默认值=60秒。
例如:
1.可以用8600替代远程sip端点来连接:
originate sofia/example/[email protected] 8600
2.可以将远程SIP端点连接到另一个远程扩展:
originate sofia/example/[email protected] &bridge(sofia/example/[email protected])
3.可以运行Javascript应用程序test.js
originate sofia/example/[email protected] &javascript(test.js)
4.可以运行带有参数的javascript,必须用单引号将其括起来
originate sofia/example/[email protected] ‘&javascript(test.js myArg1 myArg2)’
5.可以发起多个扩展
originate user/1001,user/1002,user/1003 &park()
6.顺振:originate user/1006 &bridge(user/1011|user/1012)
7.同振:originate user/1006 &bridge(user/1011,user/1012)
8.添加通道变量:originate {origination_caller_id_number=8888,ignore_early_media=true,xugd-wavfile=notice.wav,absolute_codec_string=PCMA}user/1018 &lua(voiceNotify.lua)
echo
如果用户 alice已经注册,执行originate user/alice &echo
echo 是一个回音程序,即它会把任何它“听到”的声音(或视频)再返回(说)给对方。因此,如果这时候用户 alice 接了电话,无论说什么都能听到自己的声音。
user/alice 称为呼叫字符串,或呼叫 URL,是由用户目录中的 dial-string 参数决定的
执行sofia status profile internal reg,可以查看FreeSWITCH中的注册信息
Registrations:
==================================================================
Call-ID: ZTRkYjdjYzY0OWFhNDRhOGFkNDUxMTdhMWJhNjRmNmE.
User: [email protected]
Contact: "Alice" <sip:[email protected]:5090;rinstance=a86a656037ccfaba;transport=UDP>
Agent: Zoiper rev.5415
Status: Registered(UDP)(unknown) EXP(2010-05-02 18:10:53)
Host: du-sevens-mac-pro.local
IP: 192.168.4.4
Port: 5090
Auth-User: alice
Auth-Realm: 192.168.4.4
MWI-Account: [email protected]
FreeSWITCH 根据 Contact 字段知道 alice 的 SIP 地址 sip:[email protected]:5090。当使用 originate 呼叫 user/alice 这个地址时,FreeSWITCH 便查找本地数据库,向 alice 的地址 sip:[email protected]:5090 发送 INVITE 请求
park
执行originate us