Macro "Bei Leitungsbelegung anderer Provider + Ortsvorwahl Erkennung"

konabi

Mitglied
Mitglied seit
11 Apr 2005
Beiträge
424
Punkte für Reaktionen
0
Punkte
16
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.


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
 
kann ich so nicht bestätigen.
Das Script läuft so bei mir.

Viele Grüße
Sven
 
Du meinst Dein Asterisk
gibt bei:
TRY=3 und OUTMAXCHANNELS=20
exten => s,n,GotoIf($[${TRY} > ${OUTMAXCHANNELS} ]?allchanfull)

ein FALSE zurück?

Dann hast Du ein anderes Asterisk als ich.
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.