Code:
[globals]
ENUMSEPARATETEL => yes
;Hier die CID's die Callback haben mit 0 Abschließen
CALLBACK1=xxx
CALLBACK2=xxx
CALLBACK3=xxx
CALLBACK4=xxx
CALLBACK5=xxx
CALLBACK6=xxx
CALLBACK7=0
; Nicht erlaubt abspielen
[macro-notallowed]
exten => s,1,Answer
exten => s,2,Wait(1)
exten => s,3,Playback(ss-noservice)
exten => s,4,Playtones(busy)
exten => s,5,Wait(5)
exten => s,6,Hangup
; Nicht erlaubte Nummern bei Callback
[macro-checkallowed]
exten => s,1,GotoIf($[${ARG1:0:3} = 019]?50)
exten => s,2,GotoIf($[${ARG1:0:4} = 0900]?50)
exten => s,3,GotoIf($[${ARG1:0:3} = 015]?50)
exten => s,4,GotoIf($[${ARG1:0:3} = 016]?50)
exten => s,5,GotoIf($[${ARG1:0:3} = 017]?50)
exten => s,6,GotoIf($[${ARG1:0:3} = 018]?50)
exten => s,7,GotoIf($[${ARG1:0:3} = 010]?50)
exten => s,8,GotoIf($[${ARG1:0:4} = 0088]?50)
exten => s,50,Macro(notallowed);
;Überprüfen ob Nummer am Callback teilnimmt
[macro-iscallback]
; ${ARG1} - CallerID
exten => s,1,SetVar(EINTRAG=0)
exten => s,2,SetVar(EINTRAG=$[${EINTRAG} + 1])
exten => s,3,SetVar(NR=$[${CALLBACK${EINTRAG}}])
exten => s,4,SetVar(L=${LEN(${NR})})
exten => s,5,GotoIf($[${L} < 2]?50)
exten => s,6,SetVar(SUB=$[1 - ${L}])
exten => s,7,GotoIf($[${L} > ${LEN(${ARG1})}]?2)
exten => s,8,GotoIf($[${NR:1} = ${ARG1:${SUB}}]?20:2)
exten => s,20,Macro(callback,${NR})
exten => s,21,Hangup
exten => s,50,Macro(stdexten,${MACRO_EXTEN},SIP/${MACRO_EXTEN})
exten => s,51,Hangup
;Callback setzen
[macro-callback]
exten => s,1,NoCDR()
exten => s,2,Wait(1)
exten => s,3,SetCallerID(0049${ARG1:1})
exten => s,4,AGI,callback.agi
exten => s,5,Hangup
; Wird beim Callback ausgeführt
[rueckruf]
exten => s,1,SetLanguage(de)
exten => s,2,SetVar(NR=)
exten => s,3,Noop
exten => s,4,Noop(${CALLERID})
exten => s,5,Wait(2)
exten => s,6,Background(callback)
exten => s,7,ResponseTimeout(60)
exten => s,8,WaitExten
exten => _X,1,SetVar(NR=${NR}${EXTEN})
exten => _X,2,Goto(s,8)
exten => *,1,Goto(s,1)
exten => #,1,Macro(checkallowed,${NR})
exten => #,2,GotoIf($[${NR:0:2} = 00]?5)
exten => #,3,Macro(dialout,0049${NR:1},voipbuster_robert,IAX2)
exten => #,4,Goto(#,6)
exten => #,5,Macro(dialout,${NR},voipbuster_robert,IAX2)
exten => #,6,GotoIf($[${DIALSTATUS} = NOANSWER]?7)
exten => #,7,GotoIf($[${DIALSTATUS} = CONGESTION]?2)
exten => #,8,Playback(vm-nobodyavail)
exten => #,9,Goto(s,1)
exten => t,1,Playback(tt-allbusy)
exten => t,2,Playtones(busy)
exten => t,3,Wait(5)
exten => t,4,HangUp
[macro-stdexten];
;
; Standard extension macro:
; ${ARG1} - Extension (we could have used ${MACRO_EXTEN} here as well
; ${ARG2} - Device(s) to ring
;
exten => s,1,Dial(${ARG2},60,thw)
exten => s,2,Goto(s-${DIALSTATUS},1)
exten => s-NOANSWER,1,Voicemail(u${ARG1})
exten => s-NOANSWER,2,Goto(default,s,1)
exten => s-BUSY,1,Voicemail(b${ARG1})
exten => s-BUSY,2,Goto(default,s,1)
exten => _s-.,1,Goto(s-NOANSWER,1)
exten => a,1,VoicemailMain(${ARG1})
[macro-dialout]
; ${ARG1} - Extension (we could have used ${MACRO_EXTEN} here as well
; ${ARG2} - outprovider
; ${ARG3} - ProtoKoll (SIP oder IAX2)
exten => s,1,GotoIf($["${ARG1:0:2}" = "00"]?2:4)
exten => s,2,SetVar(ENUMEXTEN=${ARG1:2})
exten => s,3,Goto(6)
exten => s,4,GotoIf($["${ARG1:0:1}" = "0"]?5:6)
exten => s,5,SetVar(ENUMEXTEN=49${ARG1:1})
;exten => s,6,Goto(51)
exten => s,6,agi,enumlookup.agi
exten => s,7,SetCDRUserField(${ARG1})
exten => s,8,SetVar(EINTRAG=0)
exten => s,9,GotoIf($[${ENUMENTRIES}]?10:51)
exten => s,10,SetVar(EINTRAG=$[${EINTRAG} + 1])
exten => s,11,GotoIf($[$[${ENUMENTRY${EINTRAG}:0:3} = IAX] | $[${ENUMENTRY${EINTRAG}:0:3} = SIP]]?12:14)
; What to do with IAX(2) and SIP entries:
exten => s,12,BackGround(enum-lookup-successful)
exten => s,13,Dial(${ENUMENTRY${EINTRAG}},120,THW)
exten => s,14,GotoIf($[${EINTRAG} < ${ENUMENTRIES}]?10:51)
; If there are no enum entries or if all of them fail:
exten => s,51,GotoIf($[${ARG3} = IAX2]?54)
exten => s,52,Dial(${ARG3}/${ARG1}@${ARG2},120,THW)
exten => s,53,Hangup
exten => s,54,Dial(${ARG3}/${ARG2}/${ARG1},120,rTHW)
exten => s,55,Hangup
exten => t,1,Playtones(busy)
exten => t,2,Wait(4)
exten => t,3,Hangup
[default]
exten => 7227988,1,Macro(iscallback,${CALLERIDNUM}) ; Nummer die auf Callbacks reagieren soll
Ich hoffe das Hilft etwas weiter. Ist quick and dirty aber funktioniert.