相对比较新的一个模块mod_httapi 可以支持用户更加动态控制IVR和其他的应用程序。配合这个模块,通过用户输入的不同可以生成自定义的IVR。FreeSWITCH的mod_httapi采用了一个简单的HTTP POST操作对页面应用程序发送各种信息,通过RESTful的实现方式来控制FreeSWITCH 呼叫流程。在中国章节,我们将讨论以下内容:
· HTTAPI 标记语法
· HTTAPI 配置
· 基本HTTAPI 操作,包括httapi 拨号规则应用
· 一个PHP样本库,使得HTTAPI 应用开发更加简单
当用户阅读这个章节时,必须牢记mod_httapi 使用了一个循环呼叫处理的流程;一个单个的呼叫,对于web服务器来说,有多个重复的HTTP POST请求。
这样给了应用开发人员更大的灵活性来设计他们的应用模块。没有必要在单个响应中生成所有可能的呼叫逻辑。一个被httapi应用控制的呼叫将执行在HTTP中指定的响应命令,然后对web服务器发送另外一个HTTP POST请求。实际上,这个httapi 应用获得从web 服务器端来的指令,处理这些指令,然后对web 服务器端说,"我已经完成了那些指令,下一个指令是什么?"。这个循环会一直进行,直到呼叫结束或这个呼叫被转接到其他流程,超出了httapi 拨号规则应用的控制。
HTTAPI语法
HTTAPI标志符和原始的XML语法没有什么不同。大部分情况下,HTTAPI的语法构成类似于这样的:
<document type="text/freeswitch-httapi">
<variables/>
<params/>
<work/>
</document>
Document是从web 服务器HTTP POST请求响应中返回的。
一个HTTAPI 响应必须有text/xml的content type。所有HTTAPI 响应必须包括document 标签,这个标签的类型属性是text/freeswitch-httapi。在响应的对端,指定的响应中,用户可以使用任意一个或者所有的子标签。支持的子标签如下:
· params: FreeSWITCH对每个web服务器请求发送的POST params(那是,"parameters") 。用户可以使用<params> 标签通知FreeSWITCH传递自定义的POST params。
· variables: 这些变量是正在呼叫 httapi拨号规则应用的通道变量。<variables> 标签支持用户通道变量,这些变量可以在FreeSWITCH 拨号规则中使用或读回到httapi 下一个请求中。(本章后续将详细讨论。)
· work: 很多有兴趣的事情在这里发生。有很多不同的action标签可以作为<work>标签的子标签使用,通过这些标签来控制FreeSWITCH正在进行的呼叫:在后台进行发送日志信息,播放语音文件,启动自动语音识别,采集用户输入的DTMF按键数据,和其他的控制。支持的action标签和属性响应的每一个action将在下一个部分进行详细讨论。
以下许多的actions 可以对用户的程序添加绑定,通过这样的方式来获得FreeSWITCH采集的信息,然后传递这些信息到用户的应用程序中。这样的处理方式非常类似于页面的HTML格式。每一个元素都有一个名称,任何相对这个元素采集的数据将作为同名称的POST param 返回到用户的页面程序中。这个绑定将支持一个正则表达式来匹配返回的结果,然后通过可选的数据前缀从输入的值中来提取出最后的结果。
Work actions
HTTAPI work actions 在这个部分进行了描述。在以下的定义中,*DATA* 是标签tag 的content (格式为, <tag>*DATA*</tag>)。
所有的work actions 至少支持两个two标签:
· action: 修改新默认目标URL。
· temp-action: 修改URL提交下一个请求。后续的请求将使用默认的URL或者使用在action标签指定的URL。
以下是一个work actions列表和他们的描述:
playback
Playback 播放一个文件,标签支持可选采集用户输入。它具有以下属性:
· file: 播放语音文件的路径
· name: 指定的Param名称来保存结果
· error-file: 无效输入时,播放错误提示文件
· digit-timeout: 播放文件完成后的等待输入的时间 (输入绑定时)
· input-timeout: 多数字输入时,等待更多数字时间设置
· loops: 播放语音文件的最多次数 (输入绑定时)
· asr-engine: 启用自动语音识别(ASR)引擎
· asr-grammar: 使用的自动语音识别语法(ASR)
· terminators: 输入结束键,一旦系统收到这个按键消息,立即停止采集,马上处理采集的结果数据。
未完待续······