按时间进行路由
有时候,在一些企业应用中,可能需要按时间段进行路由。例如,在上班时间路由到一个IVR,该IVR在报完
欢迎语后,可以引导转到人工总机接电话;而在下班后,来电就转到另外一个IVR,工作全部由电脑自动处理。
我们可以构造如下Dialplan:
<extension name="time_based_ivr">
<condition wday="2-6" hour="8:30-17:30">
<action application="ivr" data="ivr_day"/>
<anti-action application="ivr" data="ivr_night"/>
</condition>
</extension>
其中,我们可以看到,这里的测试条件(Condition)与以前的不同。以前我们大部分以destination_number
为测试条件,而在这里,我们有两个测试条件,一个是wday,一个是hour,这两个测试条件是逻辑“与”的关
系。其中,wday表示星期(星期日的值为“0”),一般上班的时间都是周一至周五,因而这里wday的值用“2~
6”表示;同时,这里的hour表示小时,即工作日的8:30至17:30为上班时间。
在有呼叫到达后,如果系统时间在该条件定义的范围内,则执行在后续的action中定义的App。这里,我们只
有一个action,它只是使用ivr App将呼叫转入白天应该播放的IVR(即ivr_day)。如果定义的条件不在这个范围
内,FreeSWITCH就会执行anti-action指定的App,它也是执行ivr,不过这次它的参数是另一个IVR——
ivr_night。
上面的例子没有测试被叫号码,会不会有什么副作用?这种担心不是多
余的。这里由于没有限制被叫号码,相当于任何被叫号码都会转到IVR,而实际上,我们只希望有人打我们的DID
号码时才转入IVR,所以我们的配置一般会比上面的更复杂一些。
首先,写一个extension,它会根据不同的时间执行不同的动作,如:
<extension name="time_based_ivr" continue="true">
<condition wday="2-6" hour="8:30-17:30">
<action application="set" data="ivr=ivr_day" inline="true"/>
<anti-action application="set" data="ivr=ivr_night" inline="true/>
</condition>
</extension>
与前面的extension不同的是,此处的extension中使用了“continue=true”属性。保证在Dialplan解析的时
候解析完此处会继续往下进行。如果当前的时间可以匹配这里的测试条件(工作日上班时间),便会执行set,设
置ivr变量的值为ivr_day;否则,则将ivr变量的值设为ivr_night。