I can dial from 601 to a public number. The public number rings. I pickup and hear nothing, while on 601 it keeps ringing. (BTW, is it right to say "ringing" on the active phone?) The *CLI> doesn't show me anything useful: Executing Macro("SIP/601-8238", "dial-pstn|88097880|") in new stack Executing SetGlobalVar("SIP/601-8238", "FOUNDME=ANSWER") in new stack Setting global variable 'FOUNDME' to 'ANSWER' Executing Dial(SIP/601-8238", "ZAP/4/w88097880|") in new stack Called 4/w88097880 Zap/4-1 is ringing Zap/4-1 is ringing Zap/4-1 is ringing Hungup 'Zap/4-1' Spawn extension (macro-dial-pstn, s, 2) exited non-zero on 'SIP/601-8238' in macro 'dial-pstn' Spawn extension (default, 988097880, 1) exited non-zero on 'SIP/601-8238' Executing Hangup("SIP/601-8238", "") in new stack Spawn extension (default, h, 1) exited non-zero on 'SIP/601-8238' Below is my extension.conf including the macro. exten => s,1,DigitTimeout,2 ; give them 2 seconds between digits exten => s,2,ResponseTimeout,30 ; give them 30 seconds to make a choice ; ; all numbers starting with '9' are not on our system ; ; handle outbound local calls - force ZAP trunk exten => _9N.,1,Macro(dial-pstn,${EXTEN:1},${LONGTIMEOUT}) ; ; handle outbound local emergency numbers (three digits, starting with '1') exten => _91NN,1,Macro(dial-pstn,${EXTEN:1},${LONGTIMEOUT}) ; ; handle domnastic long distance calls (starting with a '0') exten => _90X.,1,Macro(dial-pstn,${EXTEN:1},${LONGTIMEOUT}) ; ; handle domnastic toll free calls (starting with a '008') exten => _9008X.,1,Macro(dial-pstn,${EXTEN:1},${LONGTIMEOUT}) ; ; handle domnastic primary rate calls (starting with a '0204') exten => _90204X.,1,Congestion ; exten => i,1,Background(invalid) ; "That's not valid, try again" exten => i,2,Background(silence/1) exten => i,3,Goto(s,1) [macro-dial-pstn]; ; ; This macro will dial out on PSTN line 1 first ; will use PSTN line 2 if line 1 is in use ; ; Enter with these ; ARG1 = <number to dial> ; ARG2 = <timeout value> ; ; Returns with FOUNDME = DIALSTATUS ; ; the 9w dials 9 then waits 0.5 seconds for outside dialtone, needed for dial 9 system only ; ; exten => s,1,SetGlobalVar(FOUNDME=ANSWER) exten => s,2,Dial(${PSTN}/w${ARG1},${ARG2}) exten => s,3,NoOp(${DIALSTATUS}) exten => s,4,Goto(s-${DIALSTATUS},1) ; ; Return here if busy ; exten => s,103,NoOp(${DIALSTATUS}) exten => s,104,Goto(s-${DIALSTATUS},1) ; ; exten => s-BUSY,1,BackGround(the-party-you-are-calling) exten => s-BUSY,2,BackGround(is-curntly-busy) exten => s-BUSY,3,SetGlobalVar(FOUNDME=BUSY) exten => s-BUSY,4,Goto(s-CLEANEXIT,1) ; ; exten => s-CANCEL,1,BackGround(canceled) exten => s-CANCEL,2,SetGlobalVar(FOUNDME=CANCEL) exten => s-BUSY,3,Goto(s-CLEANEXIT,1) ; ; exten => s-CHANUNAVAIL,1,BackGround(channel) exten => s-CHANUNAVAIL,2,BackGround(is-curntly-unavail) exten => s-CHANUNAVAIL,3,SetGlobalVar(FOUNDME=CHANUNAVAIL) exten => s-CHANUNAVAIL,4,Goto(s-CLEANEXIT,1) ; ; exten => s-CONGESTION,1,BackGround(channel) exten => s-CONGESTION,2,BackGround(is-curntly-unavail) exten => s-CONGESTION,3,SetGlobalVar(FOUNDME=CHANUNAVAIL) exten => s-CONGESTION,4,Goto(s-CLEANEXIT,1) ; ; exten => s-NOANSWER,1,BackGround(nbdy-avail-to-take-call) exten => s-NOANSWER,2,SetGlobalVar(FOUNDME=NOANSWER) exten => s-NOANSWER,3,Goto(s-CLEANEXIT,1) ; ; exten => s-ANSWER,1,SetGloabalVar(FOUNDME=ANSWER) exten => s-ANSWER,2,Goto(s-CLEANEXIT,3) ; ; exten => s-.,1,BackGround(something-terrible-wrong) exten => s-.,2,NoOp(${DIALSTATUS) exten => s-.,3,SetGlobalVar(FOUNDME=ERROR) exten => s-.,4,Goto(s-CLEANEXIT,1) ; ; exten => s-CLEANEXIT,1,NoOp exten => s-CLEANEXIT,2,Hangup exten => s-CLEANEXIT,3,NoOp