FreeSWITCH非权威指南 —— mod_curl
mod_curl
About
这个应用可以让你在dialplan中做HTTP请求并接收返回。返回可以是plain text或json对象
Setup & Configuration
为了使用mod_curl,你可以通过编辑modules.conf,去掉对应的注释来编译此模块
1 | #applications/mod_curl |
重新编译FreeSWITCH
1 | make |
HBSpy: 这里应该不需要这么麻烦,去掉注释后
make mod_curl-install
即可
编辑/usr/local/freeswitch/conf/autoload_configs/modules.conf使该模块在启动时加载
1 | <load module="mod_curl"/> |
此模块没有其它单独的配置文件
mod_curl提供了以下两个功能的API和dialplan APP
- curl - 可以用之向WEB服务器发起任意的请求
- curl_sendfile - 可以用之向WEB服务器/REST传输任意长数据,并接收可选返回
Application
curl APP的语法是这样的
1 | <action application="curl" data="url [headers|json] [get|head|post [url_encode_data]]"/> |
curl APP会设置curl_response_data和curl_response_code两个变量。如果需要,curl_response_data也可以是headers/body或者json的
1 | <action application="curl" data="http://www.google.com"/> |
curl_sendfile有如下两种语法
1 | <action application="curl_sendfile" data="<url> <filename_post_name=/path/to/filename [nopost|foo1=bar1&foo2=bar2&...fooN=barN [event|none [uuid|identifier]]]"/> |
或者像这样使用通道变量
1 | <action application="set" data="curl_sendfile_report=event"/> |
url, filename, extrapost这些通道变量需要urlencode,data="“字段也是。如果调用此APP时,在data=”"字段里提供了全部的请求参数,你必须指定’nopost’来继续使用data line中其它的参数。如果你指定’uuid’作为identifier,此APP会自动的使用此session的uuid作为这个值。
HBSpy: 'nopost’这里的意思是说要使用[event|none [uuid|identifier]]啥的就不能让前面这儿空着,如果没有请求参数就写nopost。感觉是个常识
CLI / API
在CLI中调用此API,语法是这样的
1 | curl url [headers|json|content-type <mime-type>|connect-timeout <seconds>|timeout <seconds>] [get|head|post|delete|put [data]] |
1 | [api/bgapi] curl_sendfile <url> <filenameParamName=filepath> [nopost|postparam1=foo&postparam2=bar... [event|stream|both|none [identifier ]]] |
HBSpy: 原文中的这些例子就忽略了,都比较简单
总结
如果你不喜欢ESL,或是需要与CTI交互的信息不多,那么mod_curl就是一个非常好的方式
把IVR与mod_curl相结合,就可以写出简单的自助信息查询等功能了
如果使用ESL,那么其实并不建议与ESL混用,在FS中想实现一个功能通常有许多种方式,在一个项目中使用统一的方式通常能够带来维护上的便利。