Hallo,
früher hatte ichnen SIP Provider, welcher mir pro Account 3 Leitungen zum telefonieren zur Verfügung stellt. (Bussiness Account) Nun habe den Tarif gewechselt und nor noch 2 Leitungen mit separaten Anmeldungen und somot auch zweit Kontexten in der sip.conf
Also mußte eine Lösung her welche erst den ersten SIP Account verwendet und bei Besetzt den zweiten Account nimmt.
Außerdem unsere Mitarbeiter bemängelt auch für Ortsgespräche immer die Vorwahl mit zu wählen.
Aus diesem Grund sind diese Macros entstanden welche natürlich auch mit mehr als zwei Accounts/Providern verwendet werden können.
Vieleicht findet auch jemand anders Nutzen daran oder hat Verbesserungsvorschläge.
Viel Spaß
Sven
früher hatte ichnen SIP Provider, welcher mir pro Account 3 Leitungen zum telefonieren zur Verfügung stellt. (Bussiness Account) Nun habe den Tarif gewechselt und nor noch 2 Leitungen mit separaten Anmeldungen und somot auch zweit Kontexten in der sip.conf
Also mußte eine Lösung her welche erst den ersten SIP Account verwendet und bei Besetzt den zweiten Account nimmt.
Außerdem unsere Mitarbeiter bemängelt auch für Ortsgespräche immer die Vorwahl mit zu wählen.
Aus diesem Grund sind diese Macros entstanden welche natürlich auch mit mehr als zwei Accounts/Providern verwendet werden können.
Vieleicht findet auch jemand anders Nutzen daran oder hat Verbesserungsvorschläge.
Code:
[globals]
ORTSVORWAHL=03445
; Anzahl der maximalen ausgehenden Leitungen
; ergibt sich aus der Summe der Leitungen der einzelnen Providern
OUTMAXCHANNELS=2
; der Kontext in der sip.conf des ersten Providers
OUT_KONTEXT_1=t-online-out
; die CallerID des ersten Providers
OUT_MYCALLERID_1=xxxxxxx
; der Provider stellt eine Leitung zur Verfügung
OUT_MAX_1=1
OUT_KONTEXT_2=strato-out
OUT_MYCALLERID_2=xxxxxxx
OUT_MAX_1=1
[general]
static=yes
writeprotect=no
;### BEGIN MACRO #############################################
[macro-setvar-dialout]
; Startzaehler für Versuche
exten => s,1,Set(TRY=1)
; die Rufnummer die dem Macro ubergeben wurde
exten => s,n,Set(RUFNUMMER=${ARG1})
; der Kontext aus den globalen Variablen (beim ersten mal OUT_KONTEXT_1)
exten => s,n,Set(KONTEXT=${OUT_KONTEXT_${TRY}})
; die CallerID aus den globalen Variablen
exten => s,n,Set(CALLERID(name)=${OUT_MYCALLERID_${TRY}})
; weiter gehts mit dem Macro check-max-channels
exten => s,n,Macro(check-max-channels)
[macro-check-max-channels]
; pro Provider wird eine Gruppe angelegt
exten => s,1,Set(GROUP()= OUT_${TRY})
; mit diesen 5 Zeilen kann ich die Werte meiner Variablen auf der CLI sehen
; sie dienen nur zum Debuggen
exten => s,n,NoOp(Anzahl Channels: ${GROUP_COUNT()})
exten => s,n,NoOp(Maximale Channels: ${OUTMAXCHANNELS})
exten => s,n,NoOp(Gruppenliste: ${GROUP_LIST()})
exten => s,n,NoOp(Kontext: ${KONTEXT})
exten => s,n,NoOp(Versuch: ${TRY})
; als erstes wir geprueft ob die Anzahl der gesamten maximalen ausgehenden Leitungen ueberschritten ist
exten => s,n,GotoIf($[${TRY} > ${OUTMAXCHANNELS} ]?allchanfull)
; Uberpruefung ob die maximale Anzahl von Leitungen eines Providers ueberschritten ist
exten => s,n,GotoIf($[ ${GROUP_COUNT()} > ${OUT_MAX_${TRY}} ]?chanfull:chanfree)
; wenn die max Leitungszahl eines Providers ueberschritten ist wird der Zaeheler
; $TRY um eins erhoeht und in die zweite Prioritaet des Macros setvar-dialout gesprungen
; doert wird dann ein anderer Provider verwendet
exten => s,n(chanfull),Set(TRY=$[${TRY} + 1])
exten => s,n,NoOp(VERSUCH: ${TRY})
exten => s,n,Goto(macro-setvar-dialout,s,2)
; wenn eine Leitung frei ist, geht es weiter mit Macro dialout
exten=> s,n(chanfree),MACRO(dialout)
; wenn alle ausgehenden Leitungen belegt sind wird das dem Anrufenden
; mitgeteilt und aufgelegt
exten => s,n(allchanfull),Playback(all-circuits-busy-now)
exten => s,n,BUSY()
exten => s,n,HANGUP
[macro-dialout]
; wenn der Anrufer eine Nummer ohne führende Null waehlt handelt es sich um
; ein Ortsgesprach
exten => s,1,GotoIf($["${RUFNUMMER:0:1}" = "0"]?fern:ort)
; bei einem Ortsgespraech wird die Ortsvorwahl (festgelegte globale Variable)
; und die Rufnummer gewaehlt
exten => s,n(ort),Dial(SIP/${ORTSVORWAHL}${RUFNUMMER}@${KONTEXT},60,tT)
; bei einem Ferngespraech wir die Rufnummer gewaehlt
exten => s,n(fern),Dial(SIP/${RUFNUMMER}@${KONTEXT},60,tT)
; weiter gehts mit der Uberpruefung des Dialstatus
exten => s,n,Goto(s-${DIALSTATUS},1)
exten => s-NOANSWER,1,Playback(vm-theperson)
exten => s-NOANSWER,n,SayDigits(${RUFNUMMER})
exten => s-NOANSWER,n,Playback(vm-isunavail)
exten => s-NOANSWER,n,Hangup
exten => s-BUSY,1,Playback(vm-theperson)
exten => s-BUSY,n,SayDigits(${RUFNUMMER})
exten => s-BUSY,n,Playback(vm-isonphone)
exten => s-BUSY,n,Hangup
;### ENDE MACRO #############################################
[sip-out]
; hier wird dann das Macro aufgerufen
exten => _XX,n,Dial(mISDN/g:ISDN-NT/${EXTEN})
Viel Spaß
Sven