On Wed, Apr 22, 2009 at 12:19 PM, Chris Fowler <chris@fowler.cc> wrote:
I have the following defined:

   <!-- Billing Open? -->
   <extension name="billing_open" continue="true">
     <!-- man strftime - M-F, 9AM to 5PM -->
     <condition field="${strftime(%w)}" expression="^([1-5])$"/>
     <condition field="${strftime(%H%M)}" expression="^((09|1[0-6])[0-5][0-9]|1700)$">
       <action application="set" data="billingopen=true"/>
     </condition>
   </extension>


   <!-- billing line -->
   <extension name="billing">
     <condition field="destination_number" expression="^billing$|^2001$"/>
     <condition field="billingopen" expression="^true$">
     <...>


But despite the "Billing Open" ext firing correctly:
       Action set(billingopen=true)

The Billing extenstion fails to get the data:
       Regex (FAIL) [billing] billingopen() =~ /^true$/ break=on-false

Please could someone point me in the right direction for using variables correctly in a dialplan?  I must be missing something simple...

Thanks, Chris.

This is a classic case of "dialplan is parsed all at once." The reason that it is failing is because ${billingopen} is not defined when the extension named "billing" is parsed. You need another pass through the dialplan, for example by adding a transfer app to your "billing_open" extension:

<!-- Billing Open? -->
  <extension name="billing_open" continue="true">
  <!-- man strftime - M-F, 9AM to 5PM -->
     <condition field="${strftime(%w)}" expression="^([1-5])$"/>
     <condition field="${strftime(%H%M)}" expression="^((09|1[0-6])[0-5]
       <action application="set" data="billingopen=true"/>
       <action application="transfer" data="billing"/>
     </condition>
   </extension>

This will send the call back through the dialplan and into the "billing" extension, this time with the value of ${billing_open} == "true" so you can now work with it. The originally dialed number is now available in the ${rdnis} channel variable in case you need it.

Have fun and let us know how it goes.
-MC