This script looks for the (channel)/(extension) match from the database. For an extension 100 using SIP and a followme number of 123-456-7890 database put 100 LOCAL SIP/100 database put 100 FOLLOW 1234567890 ${TRUNKLD} needs to be set to whatever your outgoing LD provider is [macro-stdexten] ; exten => ,,Macro(stdexten,,) exten => s,1,SetCallerID(${ARG2}) ; set CallerID Name and Number exten => s,2,DBGet(EXT=${ARG1}/LOCAL) ; retreive local channel/extension exten => s,3,NoOp(Local channel/extension for this call: ${EXT}) ; output the value from the database exten => s,4,DBGet(FOLLOW=${ARG1}/FOLLOW) ; retreive follow me number (possibly null) exten => s,5,NoOp(Follow me number (possibly NULL): ${FOLLOW}) ; see what the follow me number is exten => s,6,Dial(${EXT},15,t) ; attempt to call the channel/extension exten => s,7,GotoIf($[${DIALSTATUS} = BUSY]?s-BUSY) ; if busy, just go straight to voicemail ; (don't bother us, we're busy) exten => s,8,GotoIf($[foo${FOLLOW} = foo]?s-${DIALSTATUS}|1:followme|s|1) ; If ${FOLLOW} is NULL, Goto s-${DIALSTATUS} ; else Goto followme,s,1 (because we have a number ; that we can try before going to voicemail) exten => s-NOANSWER,1,Voicemail(u${ARG1}) ; if no answer, play voicemail unavail of extension exten => s-BUSY,1,Voicemail(b${ARG1}) ; if busy, play voicemail busy of extension [followme] ; used from the stdexten macro for follow me service. exten => s,1,ResponseTimeout(${DEFAULT_TIMEOUT}) ; response timeout of (DEFAULT) seconds exten => s,2,Wait(1) ; wait 1 second exten => s,3,Cut(EXT=EXT,/,2) ; Cut the EXT variable so that we just get the extension number exten => s,4,Background(hacklocalhost-vm-or-cell) ; *** Custom prompt *** "Press 1 for voicemail or 2 to try that ; this persons follow me line" (or something like that) exten => 1,1,Voicemail(u${EXT}) ; extension number as set in macro-stdexten exten => 2,1,Wait(1) ; wait 1 second exten => 2,2,Playback(pls-hold-while-try) ; please hold while we try that extension exten => 2,3,Dial(${TRUNKLD}/1${FOLLOW},15,t) ; call user via our LD trunk to our follow me number exten => 2,4,Voicemail(u${EXT}) exten => h,1,Hangup ; if user hangs up exten => t,1,Playback(goodbye) ; if we reach response timeout exten => t,2,Hangup ; hangup the line I call the macro like this: exten => _XXX,1,Macro(stdexten,100,${CALLERID})