.titleBar { margin-bottom: 5px!important; }

Asterisk: Einfache Fallback-Lösung oder Denkfehler?

Dieses Thema im Forum "Asterisk Rufnummernplan" wurde erstellt von mirkomueller, 9 Feb. 2005.

  1. mirkomueller

    mirkomueller Neuer User

    Registriert seit:
    20 Jan. 2005
    Beiträge:
    27
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Hallo,

    ich nutze in der extensions.conf folgende Fallback-Lösung um im Falle eines Ausfalls des SIP-Providers einen zweiten zu wählen. Und falls dieser scheitert per ISDN rauszugehen:

    ;Zuerst Hauptprovider versuchen
    exten => _.,51,Dial(SIP/${EXTEN}@${SIPACCOUNT},60,rtT)
    ;Fallback auf Alternativprovider, falls Hauptprovider nicht verfuegbar
    exten => _.,52,Dial(SIP/${EXTEN}@${ALTERNATIVPROVIDER},60,rtT)
    ;Fallback auf ISDN, falls Haupt- und Alternativprovider nicht verfuegbar
    exten => _.,53,Dial(CAPI/${CAPIMSN}:${EXTEN},60,rtT)

    Das Ganze klappt auch soweit - nur kommt mir das zu einfach vor. Mache ich evtl. einen Denkfehler?

    Einen Fehler habe ich schon erkannt, kann ihn aber verschmerzen: Wenn nach 60 Sekunden der Gegenüber nicht abnimmt, kommt ein weiterer Anruf über den zweiten Provider.

    Die Möglichkeit mit dem ChanIsAvail-Befehl war mir zu unsicher - der hat in den Tests meist versagt.

    Am liebsten hätte ich irgendwie abgefragt, ob der entsprechende SIP-Account aus der sip.conf des Status "registered" hat - weiß aber nicht wie (evtl. AGI-Skript?)

    Habt ihr evtl. eine bessere automatische Fallback-Lösung in der Schublade?

    Viele Grüße,
    Mirko
     
  2. ecco

    ecco Neuer User

    Registriert seit:
    28 Okt. 2004
    Beiträge:
    174
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Den "Fehler" mit den 60 Sekunden kannst du über ein GotoIf und die Variable $DIALSTATUS abfangen.
     
  3. mirkomueller

    mirkomueller Neuer User

    Registriert seit:
    20 Jan. 2005
    Beiträge:
    27
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Hi ecco,

    super, danke für den Tipp. Habe ich integriert und klappt wunderbar.

    Sieht z.B. jetzt so aus:

    Code:
    exten => _.,50,AbsoluteTimeout(5400)
    exten => _.,51,Dial(SIP/${EXTEN}@${SIPACCOUNT},60,rtT)
    ;Falls SIPACCOUNT nicht erreichbar, zum Alternativprovider springen
    exten => _.,52,GotoIf($[${DIALSTATUS} = NOANSWER]?60)
    exten => _.,53,Congestion()
    exten => _.,54,HangUp()
    exten => h,1,HangUp()
    
    ;Fallback auf Alternativprovider, falls Hauptprovider nicht verfuegbar
    exten => _.,60,NoOp(Hauptprovider ${SIPACCOUNT} ist zurzeit nicht erreichbar. Probiere Alternative ${ALTERNATIVPROVIDER})
    exten => _.,61,Dial(SIP/${EXTEN}@${ALTERNATIVPROVIDER},60,rtT)
    ;Falls ALTERNATIVPROVIDER nicht erreichbar, per ISDN rauswaehlen
    exten => _.,62,GotoIf($[${DIALSTATUS} = NOANSWER]?70)
    exten => _.,63,Congestion()
    exten => _.,64,HangUp()
    exten => h,1,HangUp()
    
    ;Fallback auf ISDN, falls Haupt- und Alternativprovider nicht verfuegbar
    exten => _.,70,NoOp(Alternativprovider ${ALTERNATIVPROVIDER} ist zurzeit nicht erreichbar. Probiere ISDN mit MSN ${CAPIMSN})
    exten => _.,71,Dial(CAPI/${CAPIMSN}:${EXTEN},60,rtT)
    exten => _.,72,Congestion()
    exten => _.,72,HangUp()
    exten => h,1,HangUp()