Telefonieren mit Asterisk (VI)

Was genau geschieht, wenn ein Teilnehmer mehrere Anrufe gleichzeitig erhält? Oder anders, etwas differenzierter gefragt: was geschieht, wenn ein am Asterisk Server angeschlossenes Telefon einen Anruf erhält, während dieser Apparat gerade für ein Gespräch genutzt wird? Antwort: Bei der Digitaltelefonie sind mehrere, gleichzeitige Anrufe problemlos möglich. Ruft jemand auf eine Nummer, die gerade für ein Gespräch genutzt wird, wird dies dem Angerufenen optisch oder akustisch mitgeteilt. Dieser kann nun entscheiden, was er mit dem neuen Anruf machen will: abweisen, parken oder annehmen, während der bisherige Gesprächspartner im Haltemodus bleibt.

Einem Kunden war dies alles zu kompliziert. Er wünschte das gute alte Besetztzeichen zurück! Während er also telefoniert ist er für niemand anders erreichbar und Anrufer erhalten das aus der Analogtelefonie bekannte Besetztzeichen. Glücklicherweise verwenden wir SNOM Telefone und mit diesen ist dies recht einfach zu bewerkstelligen. Die alles entscheidende Option findet sich im Webinterface des Telefones in der Rubrik «Erweitert/Audio»:

Ich verwende hier ein SNOM 320 mit der Firmware 7.3.14. Die Sprache ist auf deutsch eingestellt. Die gesuchte Option heisst deshalb «Anklopfen» Die englische Bezeichnung lautet: «Call Waiting». Hier kann eingestellt werden, wie sich das Telefon verhalten soll, wenn es mehrere Anrufe erhält. Per Vorgabe lautet die Einstellung Ein – der Angerufene wird mit einem Klingelzeichen und einer Anzeige auf dem Display auf den neuen Anrufer aufmerksam gemacht. Die beiden folgenden Optionen, Nur Klingeln und Visuell schränken dieses Verhalten entsprechend ein. Mit der letzten Einstellung, Aus, wird dem Asterisk Server ein BUSY signalisiert, sobald er mehr als einen Anruf zustellen will.

Auf Seite des Asterisk Server erfolgt diese BUSY Meldung des SNOM beim Aufruf der Applikation Dial(), die ich hier schon vorgestellt habe. Wichtig ist hier zu wissen, dass Asterisk nicht automatisch ein Besetztzeichen sendet, sondern einfach die Dial() Applikation beendet und die Abarbeitung des Dialplan fortsetzt. Um sicherzustellen, dass der Anrufer auch tatsächlich das vertraute Besetztzeichen hört und es später noch einmal versucht, muss die Busy() Applikation aufgerufen werden, wenn der Rückgabestatus der Dial() Applikation “BUSY” lautetet. Wir ergänzen den Dialplan aus II wie folgt:

exten => 200, 1, Answer
exten => 200, n, Dial(SIP/pc2, 60)
exten => 200, n, GotoIf($["${DIALSTATUS}" != "BUSY"] ?alldone)
exten => 200, n, Busy
exten => 200(alldone), n, Hangup

Die Dial() Applikation hat eine äusserst nützliche Funktion, die wir hier nutzen: sie liefert uns nach Beendigung in einer Variablen den Status des Anrufes: Keine Antwort(NOANSWER), Überlastet (CONGESTION), Unerreichbar (CHANUNAVAIL), etc. Dieser Status, der in der Variablen ${DIALSTATUS} gespeichert ist, kann nun recht einfach mit einer GotoIf() Anweisung ausgewertet werden. In meinem Beispiel wird schlicht ein Label (alldone) verwendet, wenn das Telefon nicht besetzt ist. Natürlich wäre es hier angezeigt, auch die anderen Stati auszuwerten. Dabei könnte dem Anrufer die Möglichkeit gegeben werden, eine Nachricht zu hinterlassen.

2 Gedanken zu „Telefonieren mit Asterisk (VI)

  1. Rafael Eduardo Wefers Verástegui

    Hi!

    Ich hätte da mal ein spezifisches Problem, welches ich nicht wirklich gelöst bekomme:

    Teilnehmer A ruft Teilnehmer B an. Teilnehmer B ist aber (noch) nicht auf dem SIP registriert. Ich möchte nun das der Server das Gespräch aber nicht abweist weil der Teilnehmer B nicht registiert ist, sondern auf einen Event wartet, in diesem Falle darauf das Teilnehmer B sich registriert und dann soll der Anruf durchgestellt werden.

    Bisher habe ich eine einen ziemlich hässlichen Workaroung mittels WAIT verwendet, aber das muss auch eleganter gehen, denn der Anruf bekommt den Status WAIT dann auch, wenn Teilnehmer B registiert ist.

    Ich suche da schon seit Tagen aber werde nicht wirklich fündig, Ich dachte kurz das ich mit Background eine Lösung gefunden hätte, allerdings wird hier eine Interaktion des Anrufers erwartet und das will ich ja auch nicht, denn der Anrufer soll ja möglichst nichts bemerken.

    Was ich praktisch erreichen möchte ist ein ähnliches Verhalten wie im GSM-Netz, wenn der angerufene Teilnehmer sich gerade aus einer Funkzelle entfernt hat und in den Nachbarzellen gesucht wird, eine Art kleine “Pause” in der der Client der angerufen wird Zeit hat sich erneut am Server zu registrieren.

    Ich bin da wirklich für jede Hilfe dankbar!

    Gruss,

    Rafael

  2. bstocker Beitragsautor

    Hi Rafael

    Vielen Dank für Deine Mitteilung und für Deinen Besuch auf meinem Blog. Ich hatte schön ähnliche Probleme, löste sie aber so, dass der Anruf einfach umgeleitet wurde – also auf einen anderen Anschluss, meist Festnetz! Vielleicht wäre eine Queue die Lösung. Es ist möglich, auf eine Queue anzurufen, die keine Agents hat. Mittels Register wird der Angerufene Queue Member und kann den Anruf entgegennehmen. Oder: poste Deine Anfrage auf das ip-phone-forum.de, dort bekommst Du auf jeden Fall eine kompetente Antwort!

    Viele Glück!
    Freundlich grüsst Dich
    Benjamin

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert