Page 187 - Asterisk™: The Future of Telephony
P. 187

As we explained earlier, the way we initially defined our macro was hardcoded for John,
               instead of being generic. Let’s change our macro to use ${MACRO_EXTEN} instead of 101
               for the mailbox number. That way, if we call the macro from extension 101 the voice-
               mail messages will go to mailbox 101, and if we call the macro from extension 102
               messages will go to mailbox 102, and so on:
                   [macro-voicemail]
                   exten => s,1,Dial(${JOHN},10)
                   exten => s,n,GotoIf($["${DIALSTATUS}" = "BUSY"]?busy:unavail)
                   exten => s,n(unavail),Voicemail(${MACRO_EXTEN}@default,u)
                   exten => s,n,Hangup()
                   exten => s,n(busy),VoiceMail(${MACRO_EXTEN}@default,b)
                   exten => s,n,Hangup()

               Using Arguments in Macros

               Okay, now we’re getting closer to having the macro the way we want it, but we still
               have one thing left to change; we need to pass in the channel to dial, as it’s currently
               still hardcoded for ${JOHN} (remember that we defined the variable JOHN as the channel
               to call when we want to reach John). Let’s pass in the channel as an argument, and
               then our first macro will be complete:
                   [macro-voicemail]
                   exten => s,1,Dial(${ARG1},10)
                   exten => s,n,GotoIf($["${DIALSTATUS}" = "BUSY"]?busy:unavail)
                   exten => s,n(unavail),Voicemail(${MCARO_EXTEN}@default,u)
                   exten => s,n,Hangup()
                   exten => s,n(busy),VoiceMail(${MCARO_EXTEN}@default,b)
                   exten => s,n,Hangup()
               Now that our macro is done, we can use it in our dialplan. Here’s how we can call our
               macro to provide voicemail to John, Jane, and Jack:
                   exten => 101,1,Macro(voicemail,${JOHN})
                   exten => 102,1,Macro(voicemail,${JANE})
                   exten => 103,1,Macro(voicemail,${JACK})
               With 50 or more users, this dialplan will still look neat and organized; we’ll simply
               have one line per user, referencing a macro that can be as complicated as required. We
               could even have a few different macros for various user types, such as executives,
               courtesy_phones, call_center_agents, analog_sets, sales_department, and so on.
               A more advanced version of the macro might look something like this:
                   [macro-voicemail]
                   exten => s,1,Dial(${ARG1},20)
                   exten => s,n,Goto(s-${DIALSTATUS},1)
                   exten => s-NOANSWER,1,Voicemail(${MACRO_EXTEN},u)
                   exten => s-NOANSWER,n,Goto(incoming,s,1)
                   exten => s-BUSY,1,Voicemail(${MACRO_EXTEN},b)
                   exten => s-BUSY,n,Goto(incoming,s,1)
                   exten => _s-.,1,Goto(s-NOANSWER,1)



                                                                              Macros | 159
   182   183   184   185   186   187   188   189   190   191   192