Wie abwarten vor Mailbox obwohl kein SIP-Klient angemeldet

genbian

Neuer User
Mitglied seit
31 Mai 2009
Beiträge
35
Punkte für Reaktionen
0
Punkte
0
Also
So sieht es aus:
Code:
[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},55)                   ; Ring the interface, 20 seconds maximum
exten => s,2,Goto(s-${DIALSTATUS},1)            ; Jump based on status (NOANSWER,BUSY,CHANUNAVAIL,CONGESTION,ANSWER)

exten => s-NOANSWER,1,Voicemail(${ARG1},u)      ; If unavailable, send to voicemail w/ unavail announce
;exten => s-NOANSWER,2,Goto(default,s,1)                ; If they press #, return to start;nö besser auflegen
exten => s-NOANSWER,2,Hangup

exten => s-BUSY,1,Voicemail(${ARG1},b)          ; If busy, send to voicemail w/ busy announce
;exten => s-BUSY,2,Goto(default,s,1)            ; If they press #, return to start ;nö besser auflegen
exten => s-BUSY,2,Hangup

exten => _s-.,1,Goto(s-NOANSWER,1)              ; Treat anything else as no answer

exten => a,1,VoicemailMain(${ARG1})             ; If they press *, send the user into VoicemailMain

[isdn-in]
exten => s,1,Macro(stdexten,56,SIP/sipaccountno1)

Das macht im großen und ganzen das was ich will: Nämlich, wenn keiner rangeht, den Anrufbeantworter starten.
Nur dumm das mein Asterisk an einer ISDN-Anlage hängt.
Das führt nämlich dazu, dass wenn gerade der suppaccountno1 nicht eingeloggt ist, sofort der Anrufbeantworter drangeht. (Anstatt den "alten" echten Telefonen die an der Telefonanlage hängen noch eine Chance zu geben ranzugehen.)

Ich muss also in meiner Konfiguration jetzt noch irgendwie überprüfen, ob der Anrufer das CHANUNAVAIL bekommen hat weil der SIP-Benutzer gerade seinen Rechner aus hat oder weil er einfach nicht rangegangen ist.

Ich habe mir gedacht, dass ich am einfachsten ganz zu Beginn prüfe, ob der sipaccountno1 gerade eingeloggt ist, und dann entweder 55 s warte (während die Telefone an der Anlage weiter klingeln) und der AB-rangeht oder ich es 55 s bei sipaccountno1 klingeln lasse und dann der AB rangeht.
Nur: Wie überprüfe ich, ob der Account eingeloggt ist. Irgendwie bin ich aus der Befehlsliste für den Wählplan nicht schlau geworden.

Oder gibt es noch bessere Lösungen? (Das es z.B. beim sipaccountno1 innerhalb der 55 s Warterei anfängt zu klingeln, falls er sich genau in dieser Zeitspanne entschließt sich einzuloggen.)

Grüeß
Genbian
 
Huhu, sowas müßte gehen

Code:
exten => s,1,ChanIsAvail(SIP/1111&SIP/2222&IAX2/3333)
exten => s,2,GotoIf($[$["${CUT(AVAILCHAN||1)}" = "SIP/1111"] | $["${CUT(AVAILCHAN||1)}" = "SIP/2222"] | $["${CUT(AVAILCHAN||1)}" = "IAX2/3333"]]?666:999)
exten => s,3,noop(${CUT(AVAILCHAN||1)})


exten => s,666,Noop("Min 1 Client ist angemeldet")
exten => s,999, Noop("Alle Clients sind abgemeldet")

Ich habs aber nicht getestet ;)

Viel Erfolg
n8|
 
Code:
exten => s,1,ChanIsAvail(SIP/1111&SIP/2222&IAX2/3333)
exten => s,2,GotoIf($[$["${CUT(AVAILCHAN||1)}" = "SIP/1111"] | $["${CUT(AVAILCHAN||1)}" = "SIP/2222"] | $["${CUT(AVAILCHAN||1)}" = "IAX2/3333"]]?666:999)
exten => s,3,NoOp(${CUT(AVAILCHAN||1)})

exten => s,666,NoOp("Min 1 Client ist angemeldet")
exten => s,999, NoOp("Alle Clients sind abgemeldet")
Ja danke!
ChanIsAvail wird die Sache sicherlich richten.
Habe dadurch auch noch DEVICE_STATE gefunden, was es vieleicht auch tun kann. Z.B.:
Code:
[isdn-in]
exten => s,1,GotoIf(${DEVICE_STATE(SIP/sipaccountno1)} = UNAVAILABLE ?301:302)

exten => s,301,Wait(55) ;55 s warten weil ja ${ARG2} nicht da/eingeloggt ist, aber noch alte analoge Telefone über die vorgeschaltete Anlage das Gespräch annehmen können.
exten => s,302,Macro(stdexten,56,SIP/sipaccountno1) ;alles klar, lass Klingeln
#...
#weiter mit [macro-stdexten]; wie früher
#falls der SIP-Account inzwischen sich eingeloggt hat: klingelt es dort für 55s. Die Telefone die über die vorgeschaltete Anlage klingeln auch weiter.(Also maximal 55 s+55 s=1 min 50 s klingeln bevor der AB rangeht.)
#ist der SIP-Account immer noch weg: Dial schlägt fehl und der AB geht nach 55 s ran.
Somit kann ich das Standardextensionmakro (was von asterisk angelegt wurde) beibehalten und fummel nur an dem isdn-in Kontext rum, den ich eh selber zusammengeschrieben hab.

Aber wie kommt man in deinem Beispiel zu Priorität 3? Durch die If?Then:Else Konstruktion fängt man doch eigentlich alle Möglichkeiten ab.
Ich glaube das ChanIsAvail könnte in deiner Konstruktion etwas mächtiger sein.
Aber meine 3 Zeilen müssten hoffentlich das auch tun, was ich möchte.
Werde das mal bei Tageslicht, wenn ich Zeit habe austesten. (Wochenende?)

Danke!
Genbian
 
Okay also leider ist DEVICE_STATE erst ab Asterisk 1.6 zu haben, auf meinem Debian Lenny System ist aber 1.4 drauf.
Also doch mit ChanIsAvail arbeiten.
Klappt auch soweit.
Wobei man der ISDN-Leitung sagen muss, dass es klingelt, auch wenn der Asterisk 50 Sekunden lang nix tut, also ein:
exten => s,1,Ringing()
vor das Wait(50) und schon ist ISDN/CAPI zufrieden.
Ansonsten ist nach 5 Sekunden das Gespräch für Asterisk nicht mehr existent.
Habe es mit dort ergooglet.

So sieht nun meine Konfig aus:
Code:
[isdn-in] ;selbstgebaut
exten => s,1,ChanIsAvail(SIP/sipuserno1)
exten => s,2,GotoIf($["${CUT(AVAILCHAN||1)}" = "SIP/sipuserno1"]?303:301) ;falls SIP/sipuserno1 erreichbar wird direkt durchgeklingelt, ansonsten muss 50 s gewartet werden damit die Telefonanlage noch ein wenig klingeln kann.

exten => s,301,Ringing()
exten => s,302,Wait(50) ;50 s warten weil ja sipuserno1 nicht da/eingeloggt ist, aber noch alte analoge Telefone über die vorgeschaltete Anlage das Gespräch annehmen können.
exten => s,303,Macro(stdexten,56,SIP/sipuserno1) ;alles klar, lass Klingeln
Wenn sich der sipuserno1 jetzt während es bei ihm klingelt abmeldet oder er sonst irgendwie die Leitung zumacht, dann springt auch sofort der AB ran.
Dies liegt aber am Makro stdexten. An dem ich nichts verändern wollte.

Genbian
 
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.