FEstnetz Fallback implementieren

Mysterious

Neuer User
Mitglied seit
3 Nov 2005
Beiträge
158
Punkte für Reaktionen
0
Punkte
16
Hi,

wie schaffe ich es den Dialplan so zu gestalten das beim Ausfall des VOIP-Anbieters bzw. I-Net Zugang automatisch auf ISDN umgeschaltet wird. Manuell ist das ja rechte einfach (Kennziffer vor der Rufnummer wählen) aber gibt es auch ne Möglichkeit das automatisiert zu machen ähnlich der Funktion der Fritzbox?

Achso und als Zusatzfeature dann noch nen Warnton ausgeben oder so das man merkt das der VOIP Anbieter ausgefallen ist....


Grüße

Mysterious
 
Mysterious schrieb:
Hi,

wie schaffe ich es den Dialplan so zu gestalten das beim Ausfall des VOIP-Anbieters bzw. I-Net Zugang automatisch auf ISDN umgeschaltet wird.

Mit ${DIALSTATUS} das Ergebnis der Anwahl abfragen und im Fehlerfall halt über Festnetz rauswählen.
 
Hallo,

reicht es eigentlich aus, wenn man ChanIsAvail() einsetzt und man nur ZAP-Gruppen (jeweils ein BRI) nutzt, oder kann es hier trotzdem zu unvorhergesehenen Fehlern kommen, die man dann durch die Abfrage von Dialstatus() ausbügeln muss.

Aber was genau soll ich dann im Fehlerfall tun?
Bei ChanIsAvail() übergebe ich ja z.B. eine Liste mit 4 Zap-Gruppen. Wenn eine der vier Gruppen zu einem Fehler führt möchte ich gerne die anderen drei Gruppen per ChanIsAvail() auswählen und den Anruf dort versuchen, usw.

Kann man Macros rekursiv aufrufen und immer die fehlerbringende Zap-Gruppe aus der Liste der mit ChanIsAvail() zu überprüfenden Gruppen einfach
rauswerfen?


Momentan schaut es in gekürzter Fassung nämlich einfach so aus:

Code:
exten => s,1,ChanIsAvail(Zap/g1&Zap/g2&Zap/g3&Zap/g4)
exten => s,n,Dial(${AVAILORIGCHAN}/${MACRO_EXTEN},60)


Grüße,
DomRoc
 
DomRoc schrieb:
oder kann es hier trotzdem zu unvorhergesehenen Fehlern kommen, die man dann durch die Abfrage von Dialstatus() ausbügeln muss.


Da fällt mir spontan gassenbesetzt ein, insbesondere wenn du CallbyCall mit Billigprovider benutzt.


Aber was genau soll ich dann im Fehlerfall tun?

Neu wählen, einen anderen Provider benutzen, statt dem Mitarbeiter seinen Kollegen oder die Sekretärin anrufen, in 10 Min nochmal wählen ...


Das hängt vom Fehler und deinen Wünschen ab. Einem Dauertelefonierer kannst du z.B. eine SMS schicken, er soll dich anrufen.
Bei Festnetzausfall über den GSM-Kanal telefonieren
Mit Asterisk ist eigentlich (fast) alles möglich.

Zuerst überlegst du dir ws du brauchst. Das implementierst du, dann was du noch denkst zu brauchen, dann nice to have ...
 
kombjuder schrieb:
Da fällt mir spontan gassenbesetzt ein, insbesondere wenn du CallbyCall mit Billigprovider benutzt.




Neu wählen, einen anderen Provider benutzen, statt dem Mitarbeiter seinen Kollegen oder die Sekretärin anrufen, in 10 Min nochmal wählen ...


Das hängt vom Fehler und deinen Wünschen ab. Einem Dauertelefonierer kannst du z.B. eine SMS schicken, er soll dich anrufen.
Bei Festnetzausfall über den GSM-Kanal telefonieren
Mit Asterisk ist eigentlich (fast) alles möglich.

Zuerst überlegst du dir ws du brauchst. Das implementierst du, dann was du noch denkst zu brauchen, dann nice to have ...


Hi,

danke für die Infos!

In meinem Fall geht es ja aber garnicht um irgendwelche SIP-Provider sondern um die per Zap angebundenen ISDN-Anschlüsse (in diesem Fall 4 Stück BRI, also insgesamt 8 Leitungen nach draußen).

Kann ich davon ausgehen, dass wenn ChanIsAvail() mir eine Zap-Gruppe zurückliefert, dort auch eine Leitung (zumindest bis zur Telekom-Vermittlung) für mich frei ist und mein Dial-Kommando dort ordentlich ausgeführt werden kann.

ODer könnte mir folgendes passieren:
In der Zap-Gruppe 1 ist ein Kanal schon mit einem Gespräch belegt. Von einem internen Telefon wähle ich eine externe Nummer. ChanIsAvail() liefert mit Zap/g1 zurück, da dort noch ein Kanal frei ist. Noch bevor der Asterisk die Nummer dort wählen kann kommt von der Vermittlung auf diesem Kanal noch ein Anruf herein, es sind also beide Kanäle der Zap-Gruppe 1 besetzt. Da der Asterisk im Dialplan einfach weitermacht, kann er jetzt aber auf Zap/g1 nicht mehr rauswählen und er landet im Dialplan-Nirvana.

Deswegen meine Idee:
Nach dem ersten Dial-Versuch (z.B. auf Zap/g1) soll nochmal der Dialstatus überprüft werden. Wenn der Anruf nicht aufgebaut werden konnte sollen nochmal per ChanIsAvail() alle anderen Zap-Gruppen durchprobiert werden.

Könnte man das irgendwie parametrisieren und kann man Macros rekursiv aufrufen?

Grüße,
DomRoc
 
DomRoc schrieb:
Könnte man das irgendwie parametrisieren und kann man Macros rekursiv aufrufen?

Wenn Dialstatus dir sagt "keine Leitung" setzt du eine Variable.
Dann springst du zurück und wählst neu. Wenn die Variabel größer X ist, brichst du ab um eine Endlosschleife zu vermeiden oder wählst über sip raus.
 
kombjuder schrieb:
Wenn Dialstatus dir sagt "keine Leitung" setzt du eine Variable.
Dann springst du zurück und wählst neu. Wenn die Variabel größer X ist, brichst du ab um eine Endlosschleife zu vermeiden oder wählst über sip raus.


Danke, hast natürlich recht. Die Channelauswahl muss ich ja garnicht reduzieren: Angenommen Zap/g1 wurde soeben komplett belegt, so fliegt diese Gruppe beim nächsten ChanIsUnavail() ja sowieso raus und es wird die nächste frei Gruppe probiert!

Nach dem 3. Mal steige ich dann aus und spiele dem Anrufenden was im Sinne von "Alles belegt!" vor.
 
Könnte mir jemand das mal Beispielhaft erstellenwie das aussehen sollte? Also ein Fallback auf ISDN wenn kein VOIP Möglich aus welchen Gründen auch immer:

Hier mal der Abschnitt der Extension.conf welcher derzeit eingesetzt wird um rauszuwählen:
(Ich weiß, ist derzeit ein bischen rudimentär aufgebaut...)
Code:
[sipgate_out]
exten => _0.,1,Dial,SIP/${EXTEN}@12345|55|R
exten => _00.,1,Dial(CAPI/ISDN1/99999:${EXTEN})
exten => _0900.,1,Dial(CAPI/ISDN1/99999:${EXTEN})
exten => _11.,1,Dial(CAPI/ISDN1/99999:${EXTEN})
exten => _X.,1,Dial,SIP/${EXTEN}@12345|55|R
exten => _ZXX.,1,Dial,SIP/0049761${EXTEN}@12345|55|R
 
Könnte mir jemand das mal Beispielhaft erstellenwie das aussehen sollte? Also ein Fallback auf ISDN wenn kein VOIP Möglich aus welchen Gründen auch immer:

So sieht sipgate bei mir aus:

Code:
; mit Sipgate raus 
[sipgate]
exten => _X.,1,Dial(SIP/${EXTEN}@${sipgate-id},60,Tt) 
exten => _X.,n,Goto(s-${DIALSTATUS},1)
exten => _X.,n,Hangup

exten => s-CHANUNAVAIL,1,Goto(axxeso,${EXTEN},1)

exten => s-BUSY,1,playback(vm-theperson)
exten => s-BUSY,n,saydigits(${EXTEN})
exten => s-BUSY,n,playback(vm-isonphone)
exten => s-BUSY,n,Hangup

exten => s-NOANSWER,1,playback(vm-theperson)
exten => s-NOANSWER,n,saydigits(${EXTEN})
exten => s-NOANSWER,n,playback(vm-isunavail)
exten => s-NOANSWER,n,Hangup

exten => _s-.,1,Goto(s-NOANSWER,1)

Du musst halt bei s-CHANUNAVAIL statt Goto ... deine Anweisung einfügen.
Du kannst selbstverständlich auch andere Inhalte von ${DIALSTATUS} auswerten und besonders behandeln.

Bei mehreren Accounts lagerst du die Behandlung von ${DIALSTATUS} besser in einen eigenen Kontext aus und springst von allen Anwahlkontexten dort hin.
 
Ok, danke. Werde das mal morgen probieren umzusetzen
 
hi kombjuder,

mich würde interessieren, was dein asterisk in der zeile
exten => s-BUSY,n,saydigits(${EXTEN})
wirklich sagt. ich tippe auf "minus", was nach 60 sekunden aber wahrscheinlich nie einer mitbekommt. ebenso bei s-NOANSWER.

viel mehr würd ich aber gerne wissen, ob sich das ganze elegant lösen lässt, oder nur mit macro?

lg Fips

So sieht sipgate bei mir aus:

Code:
; mit Sipgate raus 
[sipgate]
exten => _X.,1,Dial(SIP/${EXTEN}@${sipgate-id},60,Tt) 
exten => _X.,n,Goto(s-${DIALSTATUS},1)
exten => _X.,n,Hangup

exten => s-CHANUNAVAIL,1,Goto(axxeso,${EXTEN},1)

exten => s-BUSY,1,playback(vm-theperson)
exten => s-BUSY,n,saydigits(${EXTEN})
exten => s-BUSY,n,playback(vm-isonphone)
exten => s-BUSY,n,Hangup

exten => s-NOANSWER,1,playback(vm-theperson)
exten => s-NOANSWER,n,saydigits(${EXTEN})
exten => s-NOANSWER,n,playback(vm-isunavail)
exten => s-NOANSWER,n,Hangup

exten => _s-.,1,Goto(s-NOANSWER,1)
 
ich tippe auf "minus",

Da hast du natürlich recht. Die Nummer ist ja nicht mehr in ${EXTEN}.

Ich habe das ganze in einen separaten Kontext ausgelagert und speichere die gewählte Rufnummer in einer eigenen Variablen.

viel mehr würd ich aber gerne wissen, ob sich das ganze elegant lösen lässt, oder nur mit macro?

Alles was mit s- beginnt habe ich in einen Kontext [nachbehandlung] ausgelagert.
Als letzte Zeile bei jedem Provider steht

exten => _s-.,n,Goto(nachbehandlung,s-${DIALSTATUS},1)
 

Zurzeit aktive Besucher

Statistik des Forums

Themen
246,195
Beiträge
2,247,819
Mitglieder
373,748
Neuestes Mitglied
fanti88
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.