Combining AND and ELSE in freeswitch conditions
Hello all, I'm a Freeswitch newbie struggling to get my head around the best way to do some TOD/BH routing. I've got a LUA script that will work out whether or not we're in a bank holiday, but I wanted to do the combinatorial logic within Freeswitch dial plan. Something like: if (Weekday AND (NOT BankHoliday) AND InWorkingHours) { Transfer to mainIVR } else { Transfer to voicemail } What is the most elegant way to achieve this? The Wiki pages don't appear to explain how one can do ANDs with ELSE, as the anti-action will only get executed if it's only the last condition that fails. Thanks!
Hi Alex, Welcome to FreeSWITCH! We're glad you are here. As to your question, this is common for new ones. Don't worry - once you get all the pieces together you will appreciate the power of the XML dialplan. The key to doing AND logic is to "stack" conditions. However, your situation is a bit more complex because you are checking 3 different values in addition to the destination phone number. In this case I would create a special dialplan extension whose job it is to determine if the bank is open or closed, and set a channel variable. Then, use that channel variable in a second extension: <!-- This extension sets the chan var ${bank_open} to "false" by default --> <extension name="Determine if bank is open" continue="true"> <condition> <!-- this is an "absolute" condition - it will always be true, so this action will always take place --> <action application="set" data="bank_open=false" inline="true"/> </condition> <condition field="wday" expression="2-5"/> <condition field="${bank_holiday}" expression="false"/> <condition field="hour" expression"x-y"> <!-- this action only gets set if all 3 conditions above evaluate to true --> <action application="set" data="bank_open=true" inline="true"/> </condition> </extension> Okay, so now you have ${bank_open} that will be true or false. It's just a matter of routing now: <extension name="Determine if bank is open" continue="true"> <condition field="destination_number" expression="^1?\d{10}$" break="never"/> <condition field="${bank_open}" expression="true"> <action application="transfer" data="ivr_destination"/> <anti-action application="transfer" data="vm_destination"/> </condition> </extension> There is one catch here: At some point you have to define the variable ${bank_holiday} for this to work. :) I hope this makes sense. Also, this topic is covered in detail in chapters 5 and 8 of the FreeSWITCH book that we wrote, so you may wish to acquire that. Let us know if you run into any trouble putting this into action. -MC On Tue, Jul 26, 2011 at 4:50 AM, Alex Lake <alex@digitalmail.com> wrote:
Hello all, I'm a Freeswitch newbie struggling to get my head around the best way to do some TOD/BH routing. I've got a LUA script that will work out whether or not we're in a bank holiday, but I wanted to do the combinatorial logic within Freeswitch dial plan.
Something like:
if (Weekday AND (NOT BankHoliday) AND InWorkingHours) { Transfer to mainIVR } else { Transfer to voicemail }
What is the most elegant way to achieve this? The Wiki pages don't appear to explain how one can do ANDs with ELSE, as the anti-action will only get executed if it's only the last condition that fails.
Thanks!
_______________________________________________ Join us at ClueCon 2011, Aug 9-11, Chicago http://www.cluecon.com 877-7-4ACLUE
FreeSWITCH-users mailing list FreeSWITCH-users@lists.freeswitch.org http://lists.freeswitch.org/mailman/listinfo/freeswitch-users UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users http://www.freeswitch.org
participants (2)
-
Alex Lake
-
Michael Collins