Freeswitch修炼宝典(二)-----freeswitch的ESL开发

 一般来说,其他客户端都是通过ESL与fs进行连接的,如: Java是通过JAVA-ESL-CLIENT  朝FS进行连接的,连接方式分为内联:inbond 以及外联outbond 2种方式。

Inbound内联:简单说就是客户端主动通过socket的连接方式向FS进行连接,开启了一个“通道”,通过这个通道客户端不仅可以订阅监听一些时间,也可以通过这个通道进行命令的发送。fs_cli 其实就是一个fs的客户端。

 

Outbond外联:外联是FS主动朝外发送连接请求,每一个通话进入在拨号计划设置后都可以进行外联,这个外连接的存活周期就是这通通话的session存活周期,当然有时候FS状态推送慢,session挂断了,外联通道还没监听到这个事件,但是fs中有预留一个api进行这个的控制:linger,linger可以告诉freeswitch当一个通道挂机时不要关闭socket连接,直到收取相关通道的最后一个事件。这样就可以让我们去处理很多依赖状态的事件,比如状态推送,如果我们不是特别需要的话,就可以不增加这个参数。

 

在外部开发中,如JAVA 使用内联连接上后,都是运用的都是API进行开发,在API开发中,有2种命令发送方式朝FS发送命令。一种是api,一种是bgapi,两种api的区别就是一个是同步发送命令,一个是异步发送命令。使用api发送命令,是一个阻塞的状态,无论在fs_cli 还是在 其他工程中,使用这个命令进行发送,在执行成功前都收不到任何消息,多条命令也会被阻塞(阻塞模式),只会按顺序执行,所以我们再开发以及使用中都使用bgapi。当执行bgapi的时候,后台会产生一个Job-UUID,我们也可以通过订阅BACKGROUND_JOB来获取回调结果。

 

其他语言都是通过这些呼叫命令,来完成对fs中会话的控制以及呼叫的发起,我们这里来一个比较简单的语音通知的命令进行拆分解析一下:

bgapi  originate {origination_caller_id_number=123456,hangup_after_bridge=true,ignore_early_media=true}sofia/gateway/test/1565555555  &playback(cyddsb.wav)

 

这个命令是指定主叫号码123456  通过网关gateway 呼叫手机号:1565555555  ,接通成功后播放cyddsb.wav这个音,然后挂断。

 

拆分解析:

bgapi:这是一个异步命令

originate:表示创建一个session发起一通呼叫

{}:这里这个通话的session选项,几乎这通通话所有的参数都是在这里面完成设置的

origination_caller_id_number:设置通话的主叫号码

hangup_after_bridge:bridge成功后是否挂断不执行后续的拨号计划

ignore_early_media:是否忽略早起媒体。

并且我们可以通过这里直接设置很多的透明参数,比如我想为这通通话加上一个vccid,可以直接在{}里增加{vccid=1007},或者我还想增加一个servicekey,我也可以直接在{}增加{vccid=1007,.servicekey=900002},这样增加透明参数后,我们可以把这些事件以为通道变量的形式去取出,在事件中这些自定义参数,会被加上variable_  的头,即我们取出需要去 variable_vccid  variable_servicekey 这样既可取出对应的1007  900002 这些参数。

sofia/gateway/test/1565555555 :这1传就是使用 test网关去拨打1565555555 这个号码了,但是首先你需要自己配置好这个test的网关,具体的网关如何配置在后面也会详细说明。简单的外呼主要有2种方式。一种是通过配置好的网关进行呼叫,还有一种是可以直接通过prpfile和ip进行呼叫。这里使用的就是第一种方式,还有一种方式可以直接执行:sofia/external/1565555555 @172.16.xx.xx:5060进行呼叫,这里是选定的profile = external,这样就会根据external.xml的profile配置去完成呼叫。

&playback(cyddsb.wav) 这里&表示执行一个app,playback是放音,也可以执行bridge,conference等等 app命令。()里表示执行的data,也就是执行的参数,这里表示播放cyddsb.wav 这个录音,由于我这里将这个音放在了默认路径下,这里也可以填写录音的绝对路径,如:/usr/cyddsb.wav 也可以填写 httpd映射的远程录音服务器,比如 http://media:9999/cyddsb.wav ,这样都是可以的。

你可能感兴趣的:(freeswitch)