您的位置:首页 > 其它

FreeSWITCH - mod_fifo On-hook Agent模式配置示例

2014-09-27 11:47 232 查看
这是一个简单的针对mod_fifo模块的On-hook Agent模式的配置示例。配置内容取自https://wiki.freeswitch.org/wiki/Mod_fifo网页内的Simple
On-hook Agent Login/Logout Example一节。On-hook Agent的解释请参考上述网页的Terminology一节。

在FreeSWITCH安装目录的conf/dialplan/default目录下创建一个新的xml文件,例如01_fifo.xml。为此新建文件输入如下的内容:

<include>

<!-- Agent login extension: 6*[0-9] -->
<extension name="Agent Login">
<condition field="destination_number" expression="^6\*(\d)">
<action application="answer"/>
<action application="set" data="result=${fifo_member(add FIFO$1 {fifo_member_wait=nowait}user/${user_name} )"/>
<!-- use the following line instead if you want to have group_confirm for the agent
<action application="set" data="result=${fifo_member(add FIFO$1 {fifo_member_wait=nowait,group_confirm_file=ivr/ivr-accept_reject_voicemail.wav,group_confirm_key=1}user/${user_name} )"/>
-->

<action application="log" data="INFO Add FIFO agent result: ${result}"/>
<action application="log" data="INFO User Login: FIFO$1 User: ${user_name}"/>
<!-- No error checking, just assuming login went well... -->
<action application="playback" data="ivr/ivr-you_are_now_logged_in.wav"/>
</condition>
</extension>

<!-- Agent logout extension: 6#[0-9] -->
<extension name="Agent Logout">
<condition field="destination_number" expression="^6(#|\*\*)(\d)">
<action application="answer"/>
<action application="set" data="result=${fifo_member(del FIFO$1 {fifo_member_wait=nowait}user/${user_name})}"/>
<!-- Use this line instead if you are using group_group confirm
<action application="set" data="result=${fifo_member(del FIFO$2 {fifo_member_wait=nowait,group_confirm_file=ivr/ivr-accept_reject_voicemail.wav,group_confirm_key=1}user/${user_name} )"/>
-->

<action application="log" data="INFO Del FIFO agent result: ${result}"/>
<action application="log" data="INFO User Logout: FIFO$1 User: ${user_name}"/>
<!-- No error checking, just assuming logout went well... -->
<action application="playback" data="ivr/ivr-you_are_now_logged_out.wav"/>
</condition>
</extension>

<!-- Send a call to FIFO[0-9] -->
<extension name="send caller to FIFO">
<condition field="destination_number" expression="^610(\d)$">
<action application="answer"/>
<action application="set" data="fifo_music=$${hold_music}"/>
<action application="playback" data="ivr/ivr-hold_connect_call.wav"/>
<action application="fifo" data="FIFO$1 in"/>
</condition>
</extension>
</include>

然后在fs_cli控制台下输入reloadxml命令重新加载XML配置。配置生效后,在任何一个注册成功的SIP话机上(硬话机或者软电话),例如1000,拨打“6*1”这个号码,然后挂机。接着使用另一部话机,例如1001,拨打“6101",拨打完毕后1000和1001进入通话状态。

名为“Agent Login”的extension的作用是让分机登录在某一个具体的队列内。队列名称由“FIFO”字串,以及后接一个数字组成。因此当分机1000拨打“6*1”,解析此字串得到最后一个数字“1”,再与“fifo”字串合并,得到队列名:“FIFO1”。

${fifo_member(add FIFO$1 {fifo_member_wait=nowait}user/${user_name} )

这句是“Agent Login” extension中最重要的一句。它调用了fifo_member命令向名为“FIFO1”的队列增加一个座席,参数“add“说明这是一个增加操作。${user_name}会用“1000”替换。然后最后向座席播放语音:ivr-you_are_now_logged_in.wav,通知其已登录成功。注意,这个extension未包括任何异常保护措施。

名为“Agent Logout”的extension的作用是让分机从某一个具体的队列内退出。队列名称由“FIFO”字串,以及后接一个数字组成。因此当分机1000拨打“6**1”,解析此字串得到最后一个数字“1”,再与“fifo”字串合并,得到队列名:“FIFO1”。

${fifo_member(del FIFO$1 {fifo_member_wait=nowait}user/${user_name})}

这句是“Agent Logout” extension中最重要的一句。它调用了fifo_member命令从名为“FIFO1”的队列删除一个座席,参数“del“说明这是一个删除操作。${user_name}会用“1000”替换。然后最后向座席播放语音:ivr-you_are_now_logged_out.wav,通知其已退出成功。注意,这个extension未包括任何异常保护措施。

名为“send caller to FIFO”的extension的作用是让到达此extension的来电方进入到某一个队列内排队等待分配。队列名称由“FIFO”字串,以及后接一个数字组成。因此当分机1001拨打“6101”,解析此字串得到最后一个数字“1”,再与“FIFO”字串合并,得到队列名:“FIFO1”。

<action application="fifo" data="FIFO$1 in"/>


这句将调用fifo应用模块向队列内加入当前通话。在刚才那个实际应用场景下,队列名就是”FIFO1“。从这个extension的配置可以看出,实际创建了十个队列6100~6109。

结论

这个示例的优点是不用在fifo.conf.xml配置文件中写入任何内容,即可创建一个可供实际使用的队列。这应该使用了mod_fifo模块动态创建队列的能力。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: