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

这是一个简单的针对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模块动态创建队列的能力。



你可能感兴趣的:(voip,freeswitch,mod_fifo)