Ansteuerung der Leitungstasten und -LEDs

snom-Telefone bieten die Möglichkeit, die Leitungstasten nicht nur mit speziellen URLs oder Kurzwahlen zu belegen, man kann diese auch zur Überwachung und Übernahme (PickUp) anderer Leitungen nutzen, was z.B. bei Gruppenanrufen eine sehr nützliche Angelegenheit ist.

[Warnung]

Momentan setzt dies die Junghanns bristuffed Version von Asterisk voraus (siehe „Junghanns („bristuffed“)“)!

Konfiguration der Rufanzeige

Zunächst muss in der Datei sip.conf die [general]-Sektion erweitert werden:

[general]
allowsubscribe=yes
notifyringing=yes
notifyhold=yes
useclientcode=yes

Des Weiteren muss in der Sektion des Telefons, das die überwachende Rolle übernimmt, eine sogenannte "Subscription" eingetragen werden. Damit meldet das Telefon bei Asterisk an, dass es über Status-Änderungen anderer Telefone informiert werden will. Der Context, für den sich das Telefon anmeldet, muss identisch sein mit dem Context, in dem die sogenannten "Hints" der Telefone gesetzt werden, die überwacht werden sollen. In der Regel ist dieser identisch mit dem Context, in dem sich die eigentlichen Telefone bewegen.

[2000]
type=friend
context=meine-telefone
subscribecontext=meine-telefone
secret=1234
host=dynamic
mailbox=2000

Für die zu überwachenden Telefone muss innerhalb der sip.conf kein Eintrag hinzugefügt werden, dies geschieht ausschließlich in der extensions.conf. Im Wählplan müssen die oben bereits erwähnten "Hints" gesetzt werden. Über diese Hints wird Asterisk quasi erlaubt, Informationen über den Zustand der dort definierten Extensions weiterzugeben, nämlich genau an die oben konfigurierten Subscriber. Es ist wichtig, dass die Hints genau in dem Context gesetzt werden, in dem sich das überwachende Telefon über die Zeile subscribecontext=... angemeldet hat, ansonsten werden die Status-Informationen nicht weitergeleitet. Dies ist durchaus Absicht, damit man nicht per se von allen Telefonen alle weiteren überwachen, sondern durch die Wahl des Contextes eine Auswahl treffen kann.

[sonstige]

[meine-telefone]
exten => 2001,hint,SIP/2001

exten => _2XXX,1,Dial(SIP/${EXTEN},20,j)
exten => _2XXX,2,VoiceMail(u${EXTEN})
exten => _2XXX,102,VoiceMail(b${EXTEN})

exten => 2999,1,VoiceMailMain(s${CALLERID(num)})

exten => asterisk,1,VoiceMailMain(s${CALLERID(num)})
[Wichtig]

Die hint-Priorität war in der Vergangenheit immer für einige Tücken und Probleme bekannt. In einigen älteren Asterisk-Versionen ist die Priorität case-sensitive, muss also auf alle Fälle kleingeschrieben werden. Ebenso funktioniert auch nicht in allen Asterisk-Versionen die Benutzung von Variablen für die zu überwachenden Extensions. Der sicherste Weg ist daher für jede zu überwachende Extension einen Eintrag exakt in der obigen Form anzulegen. Der Übersichtlichkeit halber kann man alle gesammelten Hints auch in einen eigenen Context legen und diesen überall dort mit include =>... einbinden, wo er benötigt wird.

Nun muss noch das überwachende Telefon konfiguriert werden. Dazu melden Sie sich wie gewohnt mit einem Webbrowser am Telefon an und gehen in das Untermenü "Funktionstasten". Dort belegen Sie die Funktionstaste Ihrer Wahl (im Beispiel die P6) mit dem Typ "Ziel" und tragen die zu überwachende Extension ein, hier also die 2001.

Nachdem die Einstellungen gespeichert wurden, ändert das Telefon den Eintrag automatisch in eine passende URI der Form <sip:2001@xxx.xxx.xxx.xxx;user=phone> (xxx.xxx.xxx.xxx ist die IP-Adresse der Telefonanlage) ab:

[Wichtig]

Die Bezeichnung "Ziel" wurde in den snom-Hardphones in einer der neueren Releases in "Nebenstelle" umbenannt und gilt daher nur noch für die Softphones und ältere Firmware-Stände in den Hardphones. Es ist nur eine Umbenennung, die weitere hier beschriebene Funktionalität bleibt unverändert erhalten.

Nun sind alle Einstellungen getätigt. Zunächst muss Asterisk neu gestartet werden und anschließend die Telefone. Der Telefon-Neustart nach dem Asterisk-Neustart ist für die saubere Anmeldung der Subscription des Telefons notwendig. Zunächst sollte überprüft werden, ob alles richtig konfiguriert wurde. Dazu geben Sie im Asterisk-CLI die Zeile show hints (core show hints in Version 1.4) ein:

*CLI> show hints

    -= Registered Asterisk Dial Plan Hints =-
   2001                : SIP/2001              State:Unavailable     Wat
chers  0
----------------
- 1 hints registered
*CLI>

In obigem Beispiel wird deutlich, dass das zu überwachende Telefon noch nicht am Asterisk-Server angemeldet ist (unavailable). Ebenso ist auch noch kein überwachendes Telefon an den Status dieser Extension angeklinkt (Watchers-Wert ist 0). Letzteres wird auch durch die Auflistung der aktiven Subscriptions bestätigt, die durch das Kommando sip show subscriptions initiiert wird.

*CLI> sip show subscriptions
Peer             User        Call ID      Extension        Last state   
  Type
0 active SIP subscriptions
*CLI>

Nun melden Sie zunächst das überwachende Telefon an und setzen den Befehl erneut ab:

*CLI> sip show subscriptions
Peer             User        Call ID      Extension        Last state   
  Type
192.168.0.2      2000        815d944554e  2001             Unavailable  
  dialog-info+xml
1 active SIP subscription
*CLI>

Hier wird deutlich, dass der User 2000 die Extension 2001 überwacht. Bereits jetzt leuchtet die Lampe am Telefon, die zur Überwachung konfiguriert wurde. Es ist eine Eigenschaft des bristuff-Patches, dass überwachte, aber noch nicht angemeldete Endgeräte über eine dauerhaft leuchtende LED angezeigt werden.

Nun melden Sie das zu überwachende Telefon erneut an. Bereits mit der Anmeldung sollte folgende Zeile auf dem Asterisk-CLI erscheinen:

Extension Changed 2001 new state Idle for Notify User 2000

Die LED am überwachenden Telefon erlischt zeitgleich. Setzen Sie den Befehl show hints (core show hints in Version 1.4) erneut ab:

*CLI> show hints

    -= Registered Asterisk Dial Plan Hints =-
   2001                : SIP/2001              State:Idle            Wat
chers  1
----------------
- 1 hints registered
*CLI>

Im Gegensatz zu vorher sieht man, dass das Telefon einen definierten Zustand hat ("Idle") und zudem ein weiteres Telefon den Zustand überwacht (Watchers-Wert ist 1). Die Konfiguration ist nun komplett, Asterisk meldet Statuswechsel der überwachten Extension sofort an das überwachende Telefon. Befindet sich das überwachte Telefon im Gespräch, leuchtet die LED dauerhaft. Wird das überwachte Telefon angerufen, blinkt die LED. Ohne Aktivität ist auch die LED gelöscht. Die unterschiedlichen Status sind ebenfalls auf der Konsole sichtbar:

Extension Changed 2001 new state InUse for Notify User 2000
Extension Changed 2001 new state Ringing for Notify User 2000
Extension Changed 2001 new state Idle for Notify User 2000

Rufannahme (PickUp) eines angezeigten Gesprächs

In der bisherigen Konfiguration werden Gespräche des überwachten Teilnehmers nur angezeigt. Gerade bei Gruppenanrufen ist es nützlich, dass ein anderer Teilnehmer diese Anrufe auch übernehmen kann. Um dies zu ermöglichen, muss noch ein weiterer Eintrag in der extensions.conf hinzugefügt werden.

[meine-telefone]
exten => 2001,hint,SIP/2001

; Gespraechsuebernahme (PickUp) fuer bristuff
exten => _*8.,1,PickUpChan(SIP/${EXTEN:2})
[Anmerkung]

Die Gesprächsübernahme durch die Zeichenfolge "*8" kann bei Bedarf in der Konfigurationsdatei features.conf umkonfiguriert werden.

Jetzt können am überwachten Telefon eingehende Anrufe einfach am überwachenden Telefon angenommen werden, indem die zur blinkenden LED passende Taste gedrückt wird. Das Gespräch wird dann sofort übernommen, die Nummer des Anrufers im Display angezeigt.

[Tipp]

Um bereits zur Anrufzeit und nicht erst nach der Übernahme die Nummer des Anrufers im überwachenden Telefon angezeigt zu bekommen, müssen in den "Erweiterten Einstellungen" des snom-Telefons zwei weitere Einstellungen geändert werden. Das Setting "Dialog-Info Call Pickup" muss aktiviert sein, "Pakete vom Registrar filtern" muss deaktiviert werden. Die erweiterten Einstellungen sind nur im Admin-Modus des Telefons verfügbar.

Sollen die in diesem Kapitel erläuterten Änderungen in Form einer automatischen Konfiguration ins Telefon geladen werden, müssen folgende Einstellungen Teil der speziellen Konfiguration des Telefons werden:

fkey5: dest <sip:2001@pbx.apfelmus-gmbh.de;user=phone>
filter_registrar: off
callpickup_dialoginfo: on
[Wichtig]

Die Funktionstasten sind 0-indiziert. Um wie im Beispiel die Funktionstaste 6 zu belegen, muss der Parameter fkey5 gesetzt werden. Die Funktionstaste 1 wird mit fkey0 angesprochen.

Gezielte Ansteuerung der LEDs

In der bristuffed-Version von Asterisk ist es ebenfalls möglich, die LEDs z.B. auch gezielt aus dem Wählplan anzusteuern. Dazu wurde Asterisk die Applikation "Devstate" hinzugefügt. Bitte prüfen Sie auf der Asterisk-Konsole über den Befehl show application Devstate, ob Ihre Asterisk-Version diesen Patch enthält:

*CLI> show application Devstate

  -= Info about application 'Devstate' =-

[Synopsis]
Generate a device state change event given the input parameters

[Description]
 Devstate(device|state):  Generate a device state change event given the
 input parameters. Returns 0. 
 State values match the asterisk device states. They are 0 = unknown, 1 
= not inuse, 2 = inuse, 3 = busy, 
 4 = invalid, 5 = unavailable, 6 = ringing

*CLI>

Der Parameter "device" stellt nichts weiter dar, als eine spezielle Extension vom Typ Device-State, die aber im Prinzip exakt so angesprochen wird wie z.B. eine SIP-Extension. Die Device-States sollten im Wählplan gut von regulären Extensions unterscheidbar sein, damit man bei der Wartung und Fehlersuche nicht durcheinander kommt.

Genau wie oben bereits beschrieben, muss in der snom-Konfiguration die anzusteuernde Leitungsanzeige mit der passenden Extension eingestellt werden. Auch hier muss als Typ der Parameter "Ziel" gewählt werden. Im nachfolgenden Beispiel wird die "9912" zur Ansteuerung der Anzeige P12 genutzt. P6 ist nach wie vor aus dem obigen Beispiel gesetzt und bleibt auch in bekannter Weise funktionsfähig.

In der Datei extensions.conf muss nun ein weiterer Hint gesetzt werden, diesmal vom Typ DS statt SIP:

[meine-telefone]
exten => 2001,hint,SIP/2001
exten => 9912,hint,DS/9912

; Gespraechsuebernahme (PickUp) fuer bristuff
exten => _*8.,1,PickUpChan(SIP/${EXTEN:2})

Das ist bereits alles. Wie gehabt nun das Telefon neu anmelden, damit die Subscriptions registriert werden. Mittels show hints (core show hints in Version 1.4) sieht man nun einen weiteren Hint aufgeführt:

*CLI> show hints

    -= Registered Asterisk Dial Plan Hints =-
   9912                : DS/9912               State:Unavailable     Wat
chers  1
   2001                : SIP/2001              State:Idle            Wat
chers  1
----------------
- 2 hints registered
*CLI>

Auch ein show subscriptions sollte einen weiteren Wert anzeigen:

*CLI> sip show subscriptions
Peer             User        Call ID      Extension        Last state   
  Type
192.168.0.2      2000        866a9545a90  9912             Idle         
  dialog-info+xml
192.168.0.2      2000        866a9545a90  2001             Idle         
  dialog-info+xml
2 active SIP subscriptions
*CLI>

Um die Funktionsweise zu testen, kann der Wählplan z.B. um folgenden Code erweitert werden:

exten => _*9X,1,Answer()
exten => _*9X,n,Devstate(9912,${EXTEN:2})
exten => _*9X,n,Wait(1)
exten => _*9X,n,Hangup()

Nun können die verschiedene Device-States über *9<state> überprüft werden, z.B. kann man die LED mit *96 blinken oder mit *92 dauerhaft leuchten lassen sowie mit *91 wieder deaktivieren. Ist die Funktionsweise einmal sichergestellt, sind der sinnvollen Anwendung dieses Features natürlich keine Grenzen gesetzt.

Telefone per Fernwartung neu starten

Um zu gewährleisten, dass die oben beschriebenen Features auch wirklich funktionieren, müssen die Telefone nach jedem Neustart von Asterisk ebenfalls neu gestartet werden, damit sie die Subscriptions sauber im System platzieren können. Für eine zentrale Wartung ist es natürlich nicht akzeptabel, die Anwender nach jedem Update der Telefonanlage darüber zu informieren, dass sie ihre Telefone neu starten sollen. Für die snom-Telefone gibt es daher einen einfachen Mechanismus, diese auch aus der Ferne zurückzusetzen. Dazu fügen Sie folgende Zeilen in die Datei /etc/asterisk/sip_notify.conf ein:

[reboot-snom]
Event=>reboot
Content-Length=>0

Werden die Konfigurationsdaten in Asterisk neu geladen, können Sie ein beliebiges snom-Endgerät über das Kommando sip notify reboot-snom extension neu starten, also zum Beispiel:

*CLI> sip notify reboot-snom 2001
Sending NOTIFY of type 'reboot-snom' to '2001'
    -- Unregistered SIP '2001'
*CLI>

Das Ganze kann man natürlich auch mit Hilfe eines Skripts von außen initiieren, vor allem um mehrere Telefone gleichzeitig zurückzusetzen, und wer es wagen möchte, auch über eine spezielle Extension eines Administrator-Telefons. Ein notwendiges Skript könnte wie folgt ausehen:

#!/bin/bash
ASTERISK=/usr/sbin/asterisk
$ASTERISK -r -x "sip notify reboot-snom 1000 2000 2001"

Den Aufruf aus dem Wählplan könnte man wie folgt realisieren:

[globals]
; Kommando zum Zurücksetzen der snom-Telefone
CMD_RESET_SNOM=/usr/local/sbin/resetAllSnoms.sh

[admin]
exten => 666,1,NoOp(Bastard Operator from Hell Snom Reset)
exten => 666,n,System(${CMD_RESET_SNOM}) ; Externes Kommando ausfuehren
[Wichtig]

Bitte geben Sie so eine Funktion auf gar keinen Fall für unberechtigte Nutzer frei. Setzen Sie die entsprechenden berechtigten Telefone in einen eigenen Context und bauen Sie vielleicht auch noch eine PIN-Abfrage in den Wählplan.

Die Telefone sind einer solchen "Attacke" natürlich nicht ganz ungeschützt ausgesetzt. Wird in den erweiterten Einstellungen des Telefons "Authentifikation für SIP Reboot" auf "An" geschaltet, lässt sich ein Telefon auf diese einfache Art und Weise nicht mehr zurücksetzen. Der dazugehörige Parameter für eine automatische Konfiguration lautet "challenge_reboot: on".