Hi,
  
 I have recently run into the problem with macro implementation in AEL in 
Asterisk 1.6. I have some older AEL dialplan which runs on 1.4 but it does not 
on 1.6 and I'm not sure how to solve this correctly. Let me explain...
  
 For example, in Asterisk 1.4 I have a macro like this:
  
 macro read_digits(digits) {
     Set(playlist=${SHELL(${PYTHON} ${SCRIPTS}/read_digits.py ${digits})});
     if ("${playlist}"!="") {
         Background(${playlist});
     }
 }
  
 This macro calls a python script which generates a list of sound files which 
are then played back by Background application. So whenever in my Dialplan I 
need to read some digits, I simply do:
  
 &read_digits(20);
  
 In 1.4 macro is implemented as macro and this is quite nice because I can use 
it as follows:
  
 context test {
     s => {
         &read_digits(20);
     }
     h => {
         // do something
     }
 }
  
 Macro is executed in the original context and ordinary as well as special 
extensions are handled by this context. As AEL is not much of a real 
programming language and there aren't many possibilities how to make some parts 
of code abstract, this was at least something.
  
 But in 1.6 AEL macro has been reimplemented thru GoSub and it is translated 
into context. So when the "macro" is performing it's work there is a need to 
catch special extensions and so. The code above won't work because hangup in 
read_digits macro is not catched. New macro should look like this:
  
 macro read_digits(digits) {
     Set(playlist=${SHELL(${PYTHON} ${SCRIPTS}/read_digits.py ${digits})});
     if ("${playlist}"!="") {
         Background(${playlist});
     }
     catch h {
         // do something
     }
 }
  
 But catching the "h" extension in the macro doesn't solve my problem as I need 
to do different things in the "h" extension in different contexts. Only 
possible "workaround" that comes to my mind is a copy&paste of the code which 
practically ruins any advantage of using a macro.
  
 Any thoughts on how to do this in a nice way? Maybe I'm missing something...
  
 Thanks,
  
 Jiri Pokorny

--
_____________________________________________________________________
-- Bandwidth and Colocation Provided by http://www.api-digital.com --
New to Asterisk? Join us for a live introductory webinar every Thurs:
               http://www.asterisk.org/hello

asterisk-users mailing list
To UNSUBSCRIBE or update options visit:
   http://lists.digium.com/mailman/listinfo/asterisk-users

Reply via email to