Asterisk variables

Hi guys, I am tryng to “play” with dialplain and setting up a variable but it’s happening something that I cannot understand ( due to my lack on asterrisk knowladge :frowning: )

As you can see on CLI log a setted up a $ vm_owner but it seems to be lost going through the executiong of a call.

== Using UDPTL TOS bits 184
== Using UDPTL CoS mark 5
== Using SIP RTP TOS bits 184
== Using SIP RTP CoS mark 5
– Executing [3950@from-trunk-sip-TG_SIP_LW:1] Set(“SIP/TG_SIP_LW-0000008c”, “GROUP()=OUT_2”) in new stack
– Executing [3950@from-trunk-sip-TG_SIP_LW:2] Goto(“SIP/TG_SIP_LW-0000008c”, “from-trunk,3950,1”) in new stack
– Goto (from-trunk,3950,1)
– Executing [3950@from-trunk:1] Set(“SIP/TG_SIP_LW-0000008c”, “__FROM_DID=3950”) in new stack
– Executing [3950@from-trunk:2] Gosub(“SIP/TG_SIP_LW-0000008c”, “app-blacklist-check,s,1”) in new stack
– Executing [s@app-blacklist-check:1] GotoIf(“SIP/TG_SIP_LW-0000008c”, “0?blacklisted”) in new stack
– Executing [s@app-blacklist-check:2] Set(“SIP/TG_SIP_LW-0000008c”, “CALLED_BLACKLIST=1”) in new stack
– Executing [s@app-blacklist-check:3] Return(“SIP/TG_SIP_LW-0000008c”, “”) in new stack
– Executing [3950@from-trunk:3] ExecIf(“SIP/TG_SIP_LW-0000008c”, “0 ?Set(CALLERID(name)=2542)”) in new stack
– Executing [3950@from-trunk:4] Set(“SIP/TG_SIP_LW-0000008c”, “__CALLINGPRES_SV=allowed_not_screened”) in new stack
– Executing [3950@from-trunk:5] Set(“SIP/TG_SIP_LW-0000008c”, “CALLERPRES()=allowed_not_screened”) in new stack
– Executing [3950@from-trunk:6] Set(“SIP/TG_SIP_LW-0000008c”, “FAX_DEST=ext-fax^3950^1”) in new stack
– Executing [3950@from-trunk:7] Set(“SIP/TG_SIP_LW-0000008c”, “vm_owner=sip:3950@172.16.52.123;user=phone”) in new stack
– Executing [3950@from-trunk:8] Set(“SIP/TG_SIP_LW-0000008c”, “vm_owner=<sip:3950”) in new stack
– Executing [3950@from-trunk:9] Set(“SIP/TG_SIP_LW-0000008c”, “vm_owner=3950”) in new stack
– Executing [3950@from-trunk:10] Answer(“SIP/TG_SIP_LW-0000008c”, “”) in new stack
– Executing [3950@from-trunk:11] Wait(“SIP/TG_SIP_LW-0000008c”, “4”) in new stack
– Executing [3950@from-trunk:12] Goto(“SIP/TG_SIP_LW-0000008c”, “from-did-direct,3950,1”) in new stack
– Goto (from-did-direct,3950,1)
– Executing [3950@from-did-direct:1] GotoIf(“SIP/TG_SIP_LW-0000008c”, “0?ext-local,3950,1”) in new stack
– Executing [3950@from-did-direct:2] Macro(“SIP/TG_SIP_LW-0000008c”, “user-callerid,”) in new stack
– Executing [s@macro-user-callerid:1] Set(“SIP/TG_SIP_LW-0000008c”, “AMPUSER=2542”) in new stack
– Executing [s@macro-user-callerid:2] GotoIf(“SIP/TG_SIP_LW-0000008c”, “0?report”) in new stack
– Executing [s@macro-user-callerid:3] ExecIf(“SIP/TG_SIP_LW-0000008c”, “1?Set(REALCALLERIDNUM=2542)”) in new stack
– Executing [s@macro-user-callerid:4] Set(“SIP/TG_SIP_LW-0000008c”, “AMPUSER=”) in new stack
– Executing [s@macro-user-callerid:5] Set(“SIP/TG_SIP_LW-0000008c”, “AMPUSERCIDNAME=”) in new stack
– Executing [s@macro-user-callerid:6] GotoIf(“SIP/TG_SIP_LW-0000008c”, “1?report”) in new stack
– Goto (macro-user-callerid,s,13)
– Executing [s@macro-user-callerid:13] GotoIf(“SIP/TG_SIP_LW-0000008c”, “0?continue”) in new stack
– Executing [s@macro-user-callerid:14] Set(“SIP/TG_SIP_LW-0000008c”, “__TTL=64”) in new stack
– Executing [s@macro-user-callerid:15] GotoIf(“SIP/TG_SIP_LW-0000008c”, “1?continue”) in new stack
– Goto (macro-user-callerid,s,26)
– Executing [s@macro-user-callerid:26] Set(“SIP/TG_SIP_LW-0000008c”, “CALLERID(number)=2542”) in new stack
– Executing [s@macro-user-callerid:27] Set(“SIP/TG_SIP_LW-0000008c”, “CALLERID(name)=Spirandelli Anto”) in new stack
– Executing [s@macro-user-callerid:28] Set(“SIP/TG_SIP_LW-0000008c”, “CHANNEL(language)=en”) in new stack
– Executing [3950@from-did-direct:3] Set(“SIP/TG_SIP_LW-0000008c”, “__EXTTOCALL=3950”) in new stack
– Executing [3950@from-did-direct:4] Set(“SIP/TG_SIP_LW-0000008c”, “__PICKUPMARK=3950”) in new stack
– Executing [3950@from-did-direct:5] Macro(“SIP/TG_SIP_LW-0000008c”, “blkvm-setifempty,”) in new stack
– Executing [s@macro-blkvm-setifempty:1] GotoIf(“SIP/TG_SIP_LW-0000008c”, “1?init”) in new stack
– Goto (macro-blkvm-setifempty,s,4)
– Executing [s@macro-blkvm-setifempty:4] Set(“SIP/TG_SIP_LW-0000008c”, “__BLKVM_CHANNEL=SIP/TG_SIP_LW-0000008c”) in new stack
– Executing [s@macro-blkvm-setifempty:5] Set(“SIP/TG_SIP_LW-0000008c”, “SHARED(BLKVM,SIP/TG_SIP_LW-0000008c)=TRUE”) in new stack
– Executing [s@macro-blkvm-setifempty:6] Set(“SIP/TG_SIP_LW-0000008c”, “GOSUB_RETVAL=TRUE”) in new stack
– Executing [s@macro-blkvm-setifempty:7] MacroExit(“SIP/TG_SIP_LW-0000008c”, “”) in new stack
– Executing [3950@from-did-direct:6] GotoIf(“SIP/TG_SIP_LW-0000008c”, “1?skipov”) in new stack
– Goto (from-did-direct,3950,9)
– Executing [3950@from-did-direct:9] Set(“SIP/TG_SIP_LW-0000008c”, “RRNODEST=”) in new stack
– Executing [3950@from-did-direct:10] Set(“SIP/TG_SIP_LW-0000008c”, “__NODEST=3950”) in new stack
– Executing [3950@from-did-direct:11] GosubIf(“SIP/TG_SIP_LW-0000008c”, “0?sub-fmsetcid,s,1”) in new stack
– Executing [3950@from-did-direct:12] Set(“SIP/TG_SIP_LW-0000008c”, “RecordMethod=Group”) in new stack
– Executing [3950@from-did-direct:13] Macro(“SIP/TG_SIP_LW-0000008c”, “record-enable,3950-3950,Group”) in new stack
– Executing [s@macro-record-enable:1] GotoIf(“SIP/TG_SIP_LW-0000008c”, “1?check”) in new stack
– Goto (macro-record-enable,s,4)
– Executing [s@macro-record-enable:4] ExecIf(“SIP/TG_SIP_LW-0000008c”, “0?MacroExit()”) in new stack
– Executing [s@macro-record-enable:5] GotoIf(“SIP/TG_SIP_LW-0000008c”, “1?Group:OUT”) in new stack
– Goto (macro-record-enable,s,6)
– Executing [s@macro-record-enable:6] Set(“SIP/TG_SIP_LW-0000008c”, “LOOPCNT=2”) in new stack
– Executing [s@macro-record-enable:7] Set(“SIP/TG_SIP_LW-0000008c”, “ITER=1”) in new stack
– Executing [s@macro-record-enable:8] GotoIf(“SIP/TG_SIP_LW-0000008c”, “1?continue”) in new stack
– Goto (macro-record-enable,s,12)
– Executing [s@macro-record-enable:12] Set(“SIP/TG_SIP_LW-0000008c”, “ITER=2”) in new stack
– Executing [s@macro-record-enable:13] GotoIf(“SIP/TG_SIP_LW-0000008c”, “1?begin”) in new stack
– Goto (macro-record-enable,s,8)
– Executing [s@macro-record-enable:8] GotoIf(“SIP/TG_SIP_LW-0000008c”, “1?continue”) in new stack
– Goto (macro-record-enable,s,12)
– Executing [s@macro-record-enable:12] Set(“SIP/TG_SIP_LW-0000008c”, “ITER=3”) in new stack
– Executing [s@macro-record-enable:13] GotoIf(“SIP/TG_SIP_LW-0000008c”, “0?begin”) in new stack
– Executing [s@macro-record-enable:14] GotoIf(“SIP/TG_SIP_LW-0000008c”, “0?IN”) in new stack
– Executing [s@macro-record-enable:15] ExecIf(“SIP/TG_SIP_LW-0000008c”, “1?MacroExit()”) in new stack
– Executing [3950@from-did-direct:14] Set(“SIP/TG_SIP_LW-0000008c”, “RingGroupMethod=ringallv2”) in new stack
– Executing [3950@from-did-direct:15] Set(“SIP/TG_SIP_LW-0000008c”, “_FMGRP=3950”) in new stack
– Executing [3950@from-did-direct:16] GotoIf(“SIP/TG_SIP_LW-0000008c”, “0?doconfirm”) in new stack
– Executing [3950@from-did-direct:17] Macro(“SIP/TG_SIP_LW-0000008c”, “dial,24,tr,3950”) in new stack
– Executing [s@macro-dial:1] GotoIf(“SIP/TG_SIP_LW-0000008c”, “1?dial”) in new stack
– Goto (macro-dial,s,3)
– Executing [s@macro-dial:3] AGI(“SIP/TG_SIP_LW-0000008c”, “dialparties.agi”) in new stack
– Launched AGI Script /var/lib/asterisk/agi-bin/dialparties.agi
dialparties.agi: Starting New Dialparties.agi
dialparties.agi: Caller ID name is ‘Spirandelli Anto’ number is ‘2542’
> dialparties.agi: USE_CONFIRMATION: ‘FALSE’
> dialparties.agi: RINGGROUP_INDEX: ''
dialparties.agi: Methodology of ring is ‘ringallv2’
– dialparties.agi: Added extension 3950 to extension map
> dialparties.agi: got fmgrp_prering: 4, fmgrp_grptime: 20
> dialparties.agi: fmgrp_totalprering: 24
> dialparties.agi: found extension in pre-ring and array
> dialparties.agi: ringallv2 ring times: REALPRERING: 24, PRERING: 4
> dialparties.agi: Extension 3950 has call screening off
dialparties.agi: Extension 3950 has call forward set to 3999
> dialparties.agi: Primary ext is CF so disabling mastermode if it was set
> dialparties.agi: extnum 3999# has: cw: 0; hascfb: 0 [] hascfu: 0 []
> dialparties.agi: Built External dialstring component for 3999: Local/3999@from-internal/n
– dialparties.agi: Filtered ARG3: 3999
> dialparties.agi: NODEST: 3950 adding M(auto-blkvm) to dialopts: trM(auto-blkvm)
> dialparties.agi: NODEST: 3950 blkvm enabled macro already in dialopts: trM(auto-blkvm)
– <SIP/TG_SIP_LW-0000008c>AGI Script dialparties.agi completed, returning 0
– Executing [s@macro-dial:7] Dial(“SIP/TG_SIP_LW-0000008c”, “Local/3999@from-internal/n,24,trM(auto-blkvm)”) in new stack
– Called 3999@from-internal/n
– Executing [3999@from-internal:1] Macro(“Local/3999@from-internal-2596;2”, “user-callerid,LIMIT,”) in new stack
– Executing [s@macro-user-callerid:1] Set(“Local/3999@from-internal-2596;2”, “AMPUSER=2542”) in new stack
– Executing [s@macro-user-callerid:2] GotoIf(“Local/3999@from-internal-2596;2”, “1?report”) in new stack
– Goto (macro-user-callerid,s,13)
– Executing [s@macro-user-callerid:13] GotoIf(“Local/3999@from-internal-2596;2”, “1?continue”) in new stack
– Goto (macro-user-callerid,s,26)
– Executing [s@macro-user-callerid:26] Set(“Local/3999@from-internal-2596;2”, “CALLERID(number)=2542”) in new stack
– Executing [s@macro-user-callerid:27] Set(“Local/3999@from-internal-2596;2”, “CALLERID(name)=Spirandelli Anto”) in new stack
– Executing [s@macro-user-callerid:28] Set(“Local/3999@from-internal-2596;2”, “CHANNEL(language)=en”) in new stack
– Executing [3999@from-internal:2] Set(“Local/3999@from-internal-2596;2”, “INTRACOMPANYROUTE=YES”) in new stack
– Executing [3999@from-internal:3] Set(“Local/3999@from-internal-2596;2”, “MOHCLASS=default”) in new stack
– Executing [3999@from-internal:4] Set(“Local/3999@from-internal-2596;2”, “_NODEST=”) in new stack
– Executing [3999@from-internal:5] Macro(“Local/3999@from-internal-2596;2”, “record-enable,2542,OUT,”) in new stack
– Executing [s@macro-record-enable:1] GotoIf(“Local/3999@from-internal-2596;2”, “1?check”) in new stack
– Goto (macro-record-enable,s,4)
– Executing [s@macro-record-enable:4] ExecIf(“Local/3999@from-internal-2596;2”, “0?MacroExit()”) in new stack
– Executing [s@macro-record-enable:5] GotoIf(“Local/3999@from-internal-2596;2”, “0?Group:OUT”) in new stack
– Goto (macro-record-enable,s,14)
– Executing [s@macro-record-enable:14] GotoIf(“Local/3999@from-internal-2596;2”, “0?IN”) in new stack
– Executing [s@macro-record-enable:15] ExecIf(“Local/3999@from-internal-2596;2”, “1?MacroExit()”) in new stack
– Executing [3999@from-internal:6] Macro(“Local/3999@from-internal-2596;2”, “dialout-trunk,1,3999,”) in new stack
– Executing [s@macro-dialout-trunk:1] Set(“Local/3999@from-internal-2596;2”, “DIAL_TRUNK=1”) in new stack
– Executing [s@macro-dialout-trunk:2] GosubIf(“Local/3999@from-internal-2596;2”, “0?sub-pincheck,s,1”) in new stack
– Executing [s@macro-dialout-trunk:3] GotoIf(“Local/3999@from-internal-2596;2”, “0?disabletrunk,1”) in new stack
– Executing [s@macro-dialout-trunk:4] Set(“Local/3999@from-internal-2596;2”, “DIAL_NUMBER=3999”) in new stack
– Executing [s@macro-dialout-trunk:5] Set(“Local/3999@from-internal-2596;2”, “DIAL_TRUNK_OPTIONS=tr”) in new stack
– Executing [s@macro-dialout-trunk:6] Set(“Local/3999@from-internal-2596;2”, “OUTBOUND_GROUP=OUT_1”) in new stack
– Executing [s@macro-dialout-trunk:7] GotoIf(“Local/3999@from-internal-2596;2”, “1?nomax”) in new stack
– Goto (macro-dialout-trunk,s,9)
– Executing [s@macro-dialout-trunk:9] GotoIf(“Local/3999@from-internal-2596;2”, “1?skipoutcid”) in new stack
– Goto (macro-dialout-trunk,s,12)
– Executing [s@macro-dialout-trunk:12] GosubIf(“Local/3999@from-internal-2596;2”, “0?sub-flp-1,s,1”) in new stack
– Executing [s@macro-dialout-trunk:13] Set(“Local/3999@from-internal-2596;2”, “OUTNUM=3999”) in new stack
– Executing [s@macro-dialout-trunk:14] Set(“Local/3999@from-internal-2596;2”, “custom=SIP/Exchange”) in new stack
– Executing [s@macro-dialout-trunk:15] ExecIf(“Local/3999@from-internal-2596;2”, “0?Set(DIAL_TRUNK_OPTIONS=M(setmusic^default)tr)”) in new stack
– Executing [s@macro-dialout-trunk:16] ExecIf(“Local/3999@from-internal-2596;2”, “0?Set(DIAL_TRUNK_OPTIONS=trM(confirm))”) in new stack
– Executing [s@macro-dialout-trunk:17] Macro(“Local/3999@from-internal-2596;2”, “dialout-trunk-predial-hook,”) in new stack
– Executing [s@macro-dialout-trunk-predial-hook:1] MacroExit(“Local/3999@from-internal-2596;2”, “”) in new stack
– Executing [s@macro-dialout-trunk:18] GotoIf(“Local/3999@from-internal-2596;2”, “0?bypass,1”) in new stack
– Executing [s@macro-dialout-trunk:19] GotoIf(“Local/3999@from-internal-2596;2”, “0?customtrunk”) in new stack
– Executing [s@macro-dialout-trunk:20] SIPAddHeader(“Local/3999@from-internal-2596;2”, “Diversion:tel:;reason=no-answer;screen=no;privacy=off”) in new stack
– Executing [s@macro-dialout-trunk:21] Dial(“Local/3999@from-internal-2596;2”, “SIP/Exchange/3999,300,tr”) in new stack
== Using UDPTL TOS bits 184
== Using UDPTL CoS mark 5
== Using SIP RTP TOS bits 184
== Using SIP RTP CoS mark 5
– Called Exchange/3999

I need to pass that variable on " SIPAddHeader(“Local/3999@from-internal-2596;2”, “Diversion:tel:;reason=no-answer;screen=no;privacy=off”)" at the end of log.

Maybe is not passed because it jumps through different channels? ( as I know a variable is trashed after channel is closed, Am i wrong?

Please help me.
Thanks

After setting up several Asterisk 1.8 systems to integrate hundreds of users with Exchange Unified Messaging, there are a few “gotchas” to note:

[ul]* Exchange chokes on SIP headers it doesn’t know about, like Alert-Info. Try in your dialplan: SIPRemoveHeader(Alert-Info:)[/ul]
[ul]* Clean the header you need before setting it, just in case it was set elsewhere: SIPRemoveHeader(Diversion:)[/ul]
[ul]* Drop the slashes and stick the extension number in the diversion header. Try: SipAddHeader(Diversion: tel:${EXTEN};reason=no-answer;screen=no;privacy=off)[/ul]

Hi penguinpbx and thanks for reply.
My integration is a bit complicated. Let me explain you:
If I do an immediate diversion on asterisk’s set to a exchange voice mail I get two scenario:
1- If some users belonging to asterisk server calls asterisk set diverted, call goes to exchange VM and give me the choice to leave a message to diverted set inbox.
2- If someone from external world ( in my case a user belonging to an Alcate PBX ) calls a diverted asterisk set, exchange voice mail answer but is not recognized the inbox of asterisk diverted user.

So because case “2” I have to modify dialplain.
I am using a freePbx edition, with asterisk 1.8.4.4; I post you what I put on “extension_overidefreepbx.conf” :

[macro-vm] ( THIS IS TO CALL EXCHANGE VOICE MAIL)
include => macro-vm-custom
exten => s,1,Macro(user-callerid,SKIPTTL)
exten => s,n,Set(VMGAIN=${IF($[“foo${VM_GAIN}”!=“foo”]?“g(${VM_GAIN})”:"")})
exten => s,n,Set(EXTTOCALL=${ARG1})
exten => s,n,Macro(blkvm-check,)
exten => s,n,GotoIf($["${GOSUB_RETVAL}" != “TRUE”]?vmx,1)
exten => s,n,Hangup
exten => vmx,1,Set(MEXTEN=${ARG1})
exten => vmx,n,Set(MMODE=${ARG2})
exten => vmx,n,Set(RETVM=${ARG3})
exten => vmx,n,Set(MODE=${IF($["${MMODE}"=“BUSY”]?busy:unavail)})
exten => vmx,n,GotoIf($["${DB(AMPUSER/${MEXTEN}/vmx/${MODE}/state)}" != “enabled”]?chknomsg)
exten => vmx,n,GotoIf($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/vmxopts/timeout)}" = “0”]?chknomsg)
exten => vmx,n,Set(VM_OPTS=${DB_RESULT})
exten => vmx,n(chknomsg),GotoIf($["${MMODE}"=“NOMESSAGE”]?s-${MMODE},1)
exten => vmx,n,GotoIf($["${MMODE}" != “DIRECTDIAL”]?notdirect)
exten => vmx,n,Set(MODE=${IF($["${REGEX("[b]" ${VM_DDTYPE})}" = “1”]?busy:${MODE})})
exten => vmx,n(notdirect),Noop(Checking if ext ${MEXTEN} is enabled: ${DB(AMPUSER/${MEXTEN}/vmx/${MODE}/state)})
exten => vmx,n,GotoIf($["${DB(AMPUSER/${MEXTEN}/vmx/${MODE}/state)}" != “enabled”]?s-${MMODE},1)
exten => vmx,n,Macro(get-vmcontext,${MEXTEN})
exten => vmx,n,GotoIf($[(${STAT(f,${ASTSPOOLDIR}/voicemail/${VMCONTEXT}/${MEXTEN}/temp.wav)} = 1) || (${STAT(f,${ASTSPOOLDIR}/voicemail/${VMCONTEXT}/${MEXTEN}/temp.WAV)} = 1)]?tmpgreet)
exten => vmx,n,GotoIf($[(${STAT(f,${ASTSPOOLDIR}/voicemail/${VMCONTEXT}/${MEXTEN}/${MODE}.wav)} = 0) && (${STAT(f,${ASTSPOOLDIR}/voicemail/${VMCONTEXT}/${MEXTEN}/${MODE}.WAV)} = 0)]?nofile)
exten => vmx,n,Set(LOOPCOUNT=0)
exten => vmx,n,GotoIf($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/repeat)}" = “0”]?vmxtime)
exten => vmx,n,Set(VMX_REPEAT=${DB_RESULT})
exten => vmx,n(vmxtime),GotoIf($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/timeout)}" = “0”]?vmxloops)
exten => vmx,n,Set(VMX_TIMEOUT=${DB_RESULT})
exten => vmx,n(vmxloops),GotoIf($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/loops)}" = “0”]?vmxanswer)
exten => vmx,n,Set(VMX_LOOPS=${DB_RESULT})
exten => vmx,n(vmxanswer),Answer
exten => vmx,n(loopstart),Read(ACTION,${ASTSPOOLDIR}/voicemail/${VMCONTEXT}/${MEXTEN}/${MODE},1,skip,${VMX_REPEAT},${VMX_TIMEOUT})
exten => vmx,n,GotoIf($["${EXISTS(${ACTION})}" = “1”]?checkopt)
exten => vmx,n(noopt),Noop(Timeout: going to timeout dest)
exten => vmx,n,Set(VMX_OPTS=${VMX_OPTS_TIMEOUT})
exten => vmx,n,GotoIf($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/vmxopts/timeout)}" = “0”]?chktime)
exten => vmx,n,Set(VMX_OPTS=${DB_RESULT})
exten => vmx,n(chktime),GotoIf($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/timedest/ext)}" = “0”]?dotime)
exten => vmx,n,Set(VMX_TIMEDEST_EXT=${DB_RESULT})
exten => vmx,n,GotoIf($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/timedest/context)}" = “0”]?timepri)
exten => vmx,n,Set(VMX_TIMEDEST_CONTEXT=${DB_RESULT})
exten => vmx,n(timepri),GotoIf($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/timedest/pri)}" = “0”]?dotime)
exten => vmx,n,Set(VMX_TIMEDEST_PRI=${DB_RESULT})
exten => vmx,n(dotime),Goto(${VMX_TIMEDEST_CONTEXT},${VMX_TIMEDEST_EXT},${VMX_TIMEDEST_PRI})
exten => vmx,n(checkopt),GotoIf($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/${ACTION}/ext)}" = “1”]?doopt)
exten => vmx,n,GotoIf($["${ACTION}" = “0”]?o,1)
exten => vmx,n,GotoIf($["${ACTION}" = “"]?adef,1)
exten => vmx,n,Set(LOOPCOUNT=$[${LOOPCOUNT} + 1])
exten => vmx,n,GotoIf($[${LOOPCOUNT} > ${VMX_LOOPS}]?toomany)
exten => vmx,n,Playback(pm-invalid-option&please-try-again)
exten => vmx,n,Goto(loopstart)
exten => vmx,n(toomany),Noop(Too Many invalid entries, got to invalid dest)
exten => vmx,n,Set(VMX_OPTS=${VMX_OPTS_LOOPS})
exten => vmx,n,GotoIf($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/vmxopts/loops)}" = “0”]?chkloop)
exten => vmx,n,Set(VMX_OPTS=${DB_RESULT})
exten => vmx,n(chkloop),GotoIf($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/loopdest/ext)}" = “0”]?doloop)
exten => vmx,n,Set(VMX_LOOPDEST_EXT=${DB_RESULT})
exten => vmx,n,GotoIf($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/loopdest/context)}" = “0”]?looppri)
exten => vmx,n,Set(VMX_LOOPDEST_CONTEXT=${DB_RESULT})
exten => vmx,n(looppri),GotoIf($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/loopdest/pri)}" = “0”]?doloop)
exten => vmx,n,Set(VMX_LOOPDEST_PRI=${DB_RESULT})
exten => vmx,n(doloop),Goto(${VMX_LOOPDEST_CONTEXT},${VMX_LOOPDEST_EXT},${VMX_LOOPDEST_PRI})
exten => vmx,n(doopt),Noop(Got a valid option: ${DB_RESULT})
exten => vmx,n,Set(VMX_EXT=${DB_RESULT})
exten => vmx,n,GotoIf($["${VMX_EXT}" != “dovm”]?getdest)
exten => vmx,n(vmxopts),Set(VMX_OPTS=${VMX_OPTS_DOVM})
exten => vmx,n,GotoIf($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/vmxopts/dovm)}" = “0”]?vmxdovm)
exten => vmx,n(vmxopts),Set(VMX_OPTS=${DB_RESULT})
exten => vmx,n(vmxdovm),Goto(dovm,1)
exten => vmx,n(getdest),GotoIf($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/${ACTION}/context)}" = “0”]?vmxpri)
exten => vmx,n,Set(VMX_CONTEXT=${DB_RESULT})
exten => vmx,n(vmxpri),GotoIf($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/${ACTION}/pri)}" = “0”]?vmxgoto)
exten => vmx,n,Set(VMX_PRI=${DB_RESULT})
exten => vmx,n(vmxgoto),Goto(${VMX_CONTEXT},${VMX_EXT},${VMX_PRI})
exten => vmx,n(nofile),Noop(File for mode: ${MODE} does not exist, SYSTEMSTATUS: ${SYSTEMSTATUS}, going to normal voicemail)
exten => vmx,n,Goto(s-${MMODE},1)
exten => vmx,n(tmpgreet),Noop(Temporary Greeting Detected, going to normal voicemail)
exten => vmx,n,Goto(s-${MMODE},1)
exten => dovm,1,Noop(VMX Timeout - go to voicemail)
exten => dovm,n,VoiceMail(${MEXTEN}@${VMCONTEXT},${VMX_OPTS}${VMGAIN})
exten => dovm,n,Goto(exit-${VMSTATUS},1)
exten => s-BUSY,1,Noop(BUSY voicemail)
exten => s-BUSY,n,Macro(get-vmcontext,${MEXTEN})
;exten => s-BUSY,n,VoiceMail(${MEXTEN}@${VMCONTEXT},${VM_OPTS}b${VMGAIN})
exten => s-BUSY,n,SIPAddHeader(Diversion:tel:${EXTTOCALL};reason=no-answer;screen=no;privacy=off)
exten => s-BUSY,n,Dial(SIP/Exchange/3999)
exten => s-BUSY,n,Hangup
exten => s-BUSY,n,Goto(exit-${VMSTATUS},1)
exten => s-NOANSWER,1,Noop(NOMESSAGE (beeb only) voicemail)
exten => s-NOANSWER,n,Macro(get-vmcontext,${MEXTEN})
;exten => s-NOANSWER,n,VoiceMail(${MEXTEN}@${VMCONTEXT},s${VM_OPTS}${VMGAIN})
exten => s-NOANSWER,n,SIPAddHeader(Diversion:tel:${EXTTOCALL};reason=no-answer;screen=no;privacy=off)
exten => s-NOANSWER,n,Dial(SIP/Exchange/3999)
exten => s-NOANSWER,n,Hangup
exten => s-NOANSWER,n,Goto(exit-${VMSTATUS},1)
exten => s-DIRECTDIAL,1,Noop(DIRECTDIAL voicemail)
exten => s-DIRECTDIAL,n,Macro(get-vmcontext,${MEXTEN})
;exten => s-DIRECTDIAL,n,VoiceMail(${MEXTEN}@${VMCONTEXT},${VM_OPTS}${VM_DDTYPE}${VMGAIN})
exten => s-DIRECTDIAL,n,SIPAddHeader(Diversion:tel:${EXTTOCALL};reason=no-answer;screen=no;privacy=off)
exten => s-DIRECTDIAL,n,Dial(SIP/Exchange/3999)
exten => s-DIRECTDIAL,n,Hangup
exten => s-DIRECTDIAL,n,Goto(exit-${VMSTATUS},1)
exten => _s-.,1,Macro(get-vmcontext,${MEXTEN})
exten => _s-.,n,VoiceMail(${MEXTEN}@${VMCONTEXT},${VM_OPTS}u${VMGAIN})
exten => _s-.,n,Goto(exit-${VMSTATUS},1)
exten => o,1,Playback(one-moment-please)
exten => o,n,GotoIf($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/0/ext)}" = “0”]?doopdef)
exten => o,n,Set(VMX_OPDEST_EXT=${DB_RESULT})
exten => o,n,GotoIf($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/0/context)}" = “1”]?opcontext)
exten => o,n,Set(DB_RESULT=${VMX_CONTEXT})
exten => o,n(opcontext),Set(VMX_OPDEST_CONTEXT=${DB_RESULT})
exten => o,n,GotoIf($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/0/pri)}" = “1”]?oppri)
exten => o,n,Set(DB_RESULT=${VMX_PRI})
exten => o,n(oppri),Set(VMX_OPDEST_PRI=${DB_RESULT})
exten => o,n,Goto(${VMX_OPDEST_CONTEXT},${VMX_OPDEST_EXT},${VMX_OPDEST_PRI})
exten => o,n(doopdef),GotoIf($[“x${OPERATOR_XTN}”=“x”]?nooper:from-internal,${OPERATOR_XTN},1)
exten => o,n(nooper),GotoIf($[“x${FROM_DID}”=“x”]?nodid)
exten => o,n,Dial(Local/${FROM_DID}@from-pstn,)
exten => o,n,Macro(hangup,)
exten => o,n(nodid),Dial(Local/s@from-pstn,)
exten => o,n,Macro(hangup,)
exten => a,1,Macro(get-vmcontext,${MEXTEN})
exten => a,n,GotoIf($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/
/ext)}” = “0”]?adef,1)
exten => a,n,Set(VMX_ADEST_EXT=${DB_RESULT})
exten => a,n,GotoIf($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}//context)}" = “1”]?acontext)
exten => a,n,Set(DB_RESULT=${VMX_CONTEXT})
exten => a,n(acontext),Set(VMX_ADEST_CONTEXT=${DB_RESULT})
exten => a,n,GotoIf($["${DB_EXISTS(AMPUSER/${MEXTEN}/vmx/${MODE}/
/pri)}" = “1”]?apri)
exten => a,n,Set(DB_RESULT=${VMX_PRI})
exten => a,n(apri),Set(VMX_ADEST_PRI=${DB_RESULT})
exten => a,n,Goto(${VMX_ADEST_CONTEXT},${VMX_ADEST_EXT},${VMX_ADEST_PRI})
exten => adef,1,VoiceMailMain(${MEXTEN}@${VMCONTEXT})
exten => adef,n,GotoIf($["${RETVM}" = “RETURN”]?exit-RETURN,1)
exten => adef,n,Hangup
exten => exit-FAILED,1,Playback(im-sorry&an-error-has-occured)
exten => exit-FAILED,n,GotoIf($["${RETVM}" = “RETURN”]?exit-RETURN,1)
exten => exit-FAILED,n,Hangup
exten => exit-SUCCESS,1,GotoIf($["${RETVM}" = “RETURN”]?exit-RETURN,1)
exten => exit-SUCCESS,n,Playback(goodbye)
exten => exit-SUCCESS,n,Hangup
exten => exit-USEREXIT,1,GotoIf($["${RETVM}" = “RETURN”]?exit-RETURN,1)
exten => exit-USEREXIT,n,Playback(goodbye)
exten => exit-USEREXIT,n,Hangup
exten => exit-RETURN,1,Noop(Returning From Voicemail because macro)
exten => t,1,Hangup

; end of [macro-vm]

[macro-bridge_oxe_vmexchange2010] ( THIS IS USED TO BE A SIP PROXY FOR INTEGRATION OF ALCATEL PBX AND EXCHANGE VOICE MAIL )
; ARG1 - extension
; ARG2 - DIRECTDIAL/BUSY
; ARG3 - RETURN makes macro return, otherwise hangup
exten => s,1,Macro(user-callerid,SKIPTTL)
exten => s,n,GotoIf($[“foo${DB(${BLKVM_OVERRIDE})}” != “fooTRUE”]?vmx,1)
exten => s,n,Noop(CAME FROM: ${NODEST} - Blocking VM cause of key: ${DB(BLKVM_OVERRIDE)})
exten => s,n,Hangup
exten => vmx,1,GotoIf($["${ARG2}" = “DIRECTDIAL”]?3)
exten => vmx,2,SIPAddHeader(Diversion:tel:${exchdiversion};reason=no-answer;screen=no;privacy=off)
exten => vmx,3,Dial(SIP/Exchange/3999)
exten => vmx,4,Hangup

[ext-did-0002]
include => ext-did-0002-custom
exten => fax,1,Goto(${CUT(FAX_DEST,^,1)},${CUT(FAX_DEST,^,2)},${CUT(FAX_DEST,^,3)})
exten => 3900,1,Set(__FROM_DID=${EXTEN})
exten => 3900,n,Gosub(app-blacklist-check,s,1)
exten => 3900,n,ExecIf($[ “${CALLERID(name)}” = “” ] ?Set(CALLERID(name)=${CALLERID(num)}))
exten => 3900,n,Set(__CALLINGPRES_SV=${CALLERPRES()})
exten => 3900,n,Set(CALLERPRES()=allowed_not_screened)
exten => 3900,n(dest-ext),Goto(custom-fax-iaxmodem,s,1)
exten => 3950,1,Set(__FROM_DID=${EXTEN})
exten => 3950,n,Gosub(app-blacklist-check,s,1)
exten => 3950,n,ExecIf($[ “${CALLERID(name)}” = “” ] ?Set(CALLERID(name)=${CALLERID(num)}))
exten => 3950,n,Set(__CALLINGPRES_SV=${CALLERPRES()})
exten => 3950,n,Set(CALLERPRES()=allowed_not_screened)
exten => 3950,n,Set(FAX_DEST=ext-fax^3950^1)
exten => 3950,n,Set(vm_owner=${SIP_HEADER(To)})
exten => 3950,n,Set(vm_owner=${CUT(vm_owner,@,1)})
exten => 3950,n,Set(vm_owner=${CUT(vm_owner,:,2)})
exten => 3950,n,Answer
exten => 3950,n,Wait(4)
exten => 3950,n(dest-ext),Goto(from-did-direct,3950,1)

( THIS IS USED TO BE A SIP PROXY FOR INTEGRATION OF ALCATEL PBX AND EXCHANGE VOICE MAIL )
exten => 3999,1,Set(__FROM_DID=${EXTEN})
exten => 3999,n,Gosub(app-blacklist-check,s,1)
exten => 3999,n,ExecIf($[ “${CALLERID(name)}” = “” ] ?Set(CALLERID(name)=${CALLERID(num)}))
exten => 3999,n,Set(__CALLINGPRES_SV=${CALLERPRES()})
exten => 3999,n,Set(CALLERPRES()=allowed_not_screened)
exten => 3999,n,Set(exchdiversion=${SIP_HEADER(To)})
exten => 3999,n,Set(exchdiversion=${CUT(exchdiversion,@,1)})
exten => 3999,n,Set(exchdiversion=${CUT(exchdiversion,:,2)})
exten => 3999,n,Set(exchdiversion=${IF($["${exchdiversion}"=“3999”]?${CALLERID(number)}:${exchdiversion})})
exten => 3999,n(dest-ext),Goto(macro-bridge_oxe_vmexchange2010,s,1)

; end of [ext-did-0002]

[macro-dialout-trunk]
include => macro-dialout-trunk-custom
exten => s,1,Set(DIAL_TRUNK=${ARG1})
exten => s,n,GosubIf($[$["${ARG3}" != “”] & $["${DB(AMPUSER/${AMPUSER}/pinless)}" != “NOPASSWD”]]?sub-pincheck,s,1)
exten => s,n,GotoIf($[“x${OUTDISABLE_${DIAL_TRUNK}}” = “xon”]?disabletrunk,1)
exten => s,n,Set(DIAL_NUMBER=${ARG2})
exten => s,n,Set(DIAL_TRUNK_OPTIONS=${DIAL_OPTIONS})
exten => s,n,Set(OUTBOUND_GROUP=OUT_${DIAL_TRUNK})
exten => s,n,GotoIf($["${OUTMAXCHANS_${DIAL_TRUNK}}foo" = “foo”]?nomax)
exten => s,n,GotoIf($[ ${GROUP_COUNT(OUT_${DIAL_TRUNK})} >= ${OUTMAXCHANS_${DIAL_TRUNK}} ]?chanfull)
exten => s,n(nomax),GotoIf($["${INTRACOMPANYROUTE}" = “YES”]?skipoutcid)
exten => s,n,Set(DIAL_TRUNK_OPTIONS=${TRUNK_OPTIONS})
exten => s,n,Macro(outbound-callerid,${DIAL_TRUNK})
exten => s,n(skipoutcid),GosubIf($["${PREFIX_TRUNK_${DIAL_TRUNK}}" != “”]?sub-flp-${DIAL_TRUNK},s,1)
exten => s,n,Set(OUTNUM=${OUTPREFIX_${DIAL_TRUNK}}${DIAL_NUMBER})
exten => s,n,Set(custom=${CUT(OUT_${DIAL_TRUNK},:,1)})
exten => s,n,ExecIf($["${MOHCLASS}"!=“default” & “${MOHCLASS}”!="" & “${FORCE_CONFIRM}”="" ]?Set(DIAL_TRUNK_OPTIONS=M(setmusic^${MOHCLASS})${DIAL_TRUNK_OPTIONS}))
exten => s,n,ExecIf($["${FORCE_CONFIRM}"!="" ]?Set(DIAL_TRUNK_OPTIONS=${DIAL_TRUNK_OPTIONS}M(confirm)))
exten => s,n(gocall),Macro(dialout-trunk-predial-hook,)
exten => s,n,GotoIf($["${PREDIAL_HOOK_RET}" = “BYPASS”]?bypass,1)
exten => s,n,GotoIf($["${custom}" = “AMP”]?customtrunk)
exten => s,n,SIPAddHeader(Diversion:tel:${vm_owner};reason=no-answer;screen=no;privacy=off)
exten => s,n,Dial(${OUT_${DIAL_TRUNK}}/${OUTNUM},300,${DIAL_TRUNK_OPTIONS})
exten => s,n,Noop(Dial failed for some reason with DIALSTATUS = ${DIALSTATUS} and HANGUPCAUSE = ${HANGUPCAUSE})
exten => s,n,Goto(s-${DIALSTATUS},1)
exten => s,n(customtrunk),Set(pre_num=${CUT(OUT_${DIAL_TRUNK},$,1)})
exten => s,n,Set(the_num=${CUT(OUT_${DIAL_TRUNK},$,2)})
exten => s,n,Set(post_num=${CUT(OUT_${DIAL_TRUNK},$,3)})
exten => s,n,GotoIf($["${the_num}" = “OUTNUM”]?outnum:skipoutnum)
exten => s,n(outnum),Set(the_num=${OUTNUM})
exten => s,n(skipoutnum),Dial(${pre_num:4}${the_num}${post_num},300,${DIAL_TRUNK_OPTIONS})
exten => s,n,Noop(Dial failed for some reason with DIALSTATUS = ${DIALSTATUS} and HANGUPCAUSE = ${HANGUPCAUSE})
exten => s,n(chanfull),Noop(max channels used up)
exten => s-BUSY,1,Noop(Dial failed due to trunk reporting BUSY - giving up)
exten => s-BUSY,n,Playtones(busy)
exten => s-BUSY,n,Busy(20)
exten => s-ANSWER,1,Noop(Call successfully answered - Hanging up now)
exten => s-ANSWER,n,Macro(hangupcall,)
exten => s-NOANSWER,1,Noop(Dial failed due to trunk reporting NOANSWER - giving up)
exten => s-NOANSWER,n,Progress
exten => s-NOANSWER,n,Playback(number-not-answering,noanswer)
exten => s-NOANSWER,n,Congestion(20)
exten => s-INVALIDNMBR,1,Noop(Dial failed due to trunk reporting Address Incomplete - giving up)
exten => s-INVALIDNMBR,n,Progress
exten => s-INVALIDNMBR,n,Playback(ss-noservice,noanswer)
exten => s-INVALIDNMBR,n,Busy(20)
exten => s-CHANGED,1,Noop(Dial failed due to trunk reporting Number Changed - giving up)
exten => s-CHANGED,n,Playtones(busy)
exten => s-CHANGED,n,Busy(20)
exten => s-.,1,Set(RC=${IF($[${ISNULL(${HANGUPCAUSE})}]?0:${HANGUPCAUSE})})
exten => s-.,n,Goto(${RC},1)
exten => 17,1,Goto(s-BUSY,1)
exten => 18,1,Goto(s-NOANSWER,1)
exten => 22,1,Goto(s-CHANGED,1)
exten => 23,1,Goto(s-CHANGED,1)
exten => 28,1,Goto(s-INVALIDNMBR,1)
exten => X,1,Goto(continue,1)
exten => X.,1,Goto(continue,1)
exten => continue,1,GotoIf($["${OUTFAIL
${ARG1}}" = “”]?noreport)
exten => continue,n,AGI(${OUTFAIL
${ARG1}})
exten => continue,n(noreport),Noop(TRUNK Dial failed due to ${DIALSTATUS} HANGUPCAUSE: ${HANGUPCAUSE} - failing through to other trunks)
exten => continue,n,Set(CALLERID(number)=${AMPUSER})
exten => disabletrunk,1,Noop(TRUNK: ${OUT
${DIAL_TRUNK}} DISABLED - falling through to next trunk)
exten => bypass,1,Noop(TRUNK: ${OUT
${DIAL_TRUNK}} BYPASSING because dialout-trunk-predial-hook)
exten => h,1,Macro(hangupcall,)

; end of [macro-dialout-trunk]

We are talking about peer # 3950. As you can see on " [ext-did-0002] " I setted up a variable “vm_owner”,taken from first INVITE sent from external world ( in my case Alcatel PBX ). Then on " [macro-dialout-trunk] " I setted up "exten => s,n,SIPAddHeader(Diversion:tel:${vm_owner};reason=no-answer;screen=no;privacy=off) " but on trace the variable is not taken into account.
What’s wrong?
Thnaks for your help
P.S. I don’t really understood why I should remove some HEADER. Please can you explain me better?

As it looked from your first post, there was nothing being set in the tel: portion of the Diversion header. But sounds like you can do that just fine. It’s the matter of how you set it in one scenario which is the trouble.

Try changing the line:

exten => 3950,n,Set(vm_owner=${CUT(vm_owner,:,2)})

to:

exten => 3950,n,Set(__vm_owner=${CUT(vm_owner,:,2)})

Hi, it works!!! Wonderfull!!! Can you please explain me what is the difference? what does " __" mean???

Hi again, as per voip-info.org/wiki/view/Asterisk+variables I have understood that double “_” on setting variables make it avaible for all channels indefinetly. Am I right?

Double underscores are used to create variables on a channel that will pass thru to all the channel’s subsequently created channels (or call legs, if you will.) But they are private to the channel.

Global variables are something different. They are available to all channels. See the GLOBAL() function for details.

Thanks Penguin… I will.
Now is more clear… :smile: