Kapitel 19. Telefone

1. Einleitung

In einer idealen Welt müsste man in diesem Kapitel alle zur Drucklegung des Buches verfügbaren VoIP-Telefone beschreiben und am Besten noch bewerten. Dies ist allerdings nicht möglich. Das liegt zum Teil auch daran, dass nicht alle Hersteller Testgeräte zur Verfügung stellen. Ich hoffe, dass im Laufe der Jahre auf der Webseite zum Buch und in zukünftigen Versionen des Buches mehr und mehr Telefone mit Beispielkonfigurationen aufgelistet werden können. Dazu benötige ich Ihr Feedback und Ihre Hilfe.

2. Snom VoIP-Telefone

VoIP-Telefone der Firma snom sind in Deutschland sehr beliebt und werden deshalb an dieser Stelle im Detail beschrieben. Es gibt eine Reihe von verschiedenen snom-Telefonen. Das snom 360 sticht allerdings mit einigen Features für den Einsatz in großen Firmen hervor. Alle snom-Telefone bieten durch die umfangreiche SIP-Unterstützung in Kombination mit Asterisk Eigenschaften, die man sonst nur von herstellerspezifischen Anlagen mit Systemtelefonen kennt.

Konfiguration von Asterisk

Standard-Snom-Telefone können mit dem SIP-Protokoll an eine Asterisk-Anlage angeschlossen werden. Um die Komformerkmale zu beschreiben, nehmen wir als Standardkonfiguration diejenige aus Kapitel 2, Installation und "Hello World" und erweitern sie wie folgt:

Der Eintrag in der sip.conf Datei von Asterisk:

[general]
port = 5060
bindaddr = 0.0.0.0
context = sonstige

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

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

Der Eintrag mailbox=... sorgt dafür, dass die "Message"-Anzeige des snom-Endgerätes angesprochen wird. Sobald eine Nachricht auf der entsprechenden Mailbox des Teilnehmers eingegangen ist, wird dies standardmäßig durch ein blinkendes "Message"-Lämpchen angezeigt. Dieser Mechanismus wird MWI genannt, "Message Waiting Indicator". Je nach Einstellung des Telefons kann ein Nachrichteneingang zusätzlich auch akustisch signalisiert werden. Stellen sie bitte vorher sicher, dass eine passende Mailbox innerhalb der voicemail.conf-Datei angelegt wurde:

[general]
format = wav

[default]
2000 => 4711,Hans Mustermann,hansi@company.de
2001 => 0815,Ute Beispiel,ute.beispiel@company.de

Jedes snom-Telefon verfügt über eine "Retrieve"-Taste, um neue Sprachnachrichten im Voicemailsystem abzurufen. Wird diese Taste gedrückt, wählt das snom-Telefon in der Werkseinstellung die Extension asterisk an. Der Dialplan muss entsprechend um eine solche Extension erweitert werden:

[sonstige]

[meine-telefone]
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)})
[Tipp]Tipp

Um die für die Voicemail anzuwählende Extension zu ändern, muss in der Datei sip.conf der Parameter vmexten=... hinzugefügt werden.

[2001]
type=friend
context=meine-telefone
secret=1234
host=dynamic
mailbox=2001
vmexten=obelisk

Snom-Telefone zeigen eingegangene Nachrichten auch im Display im Klartext an, daher sollten für diesen Fall durchaus "sprechende" Namen genutzt werden.

[Warnung]Warnung

Die "Retrieve"-Taste funktioniert nur, wenn die "Message"-Anzeige blinkt, d.h. nur nach dem Eingang einer neuen Nachricht. Um alte Nachrichten abzuhören oder die Mailbox zu konfigurieren, muss im Wählplan eine eigene Extension zum Abhören der Mailbox eingerichtet werden (im Beispiel ist dies die 2999). Diese kann man dann entweder manuell anwählen, eine der Funktionstasten des Telefons belegen oder bei den snom 360-Modellen über die XML-Steuerung einen Menüpunkt zur Verfügung stellen.

Nun sind alle grundlegenden Schritte für die Integration der snom-Telefone in Asterisk durchgeführt.

Konfiguration der Telefone

Konfiguriert man ein einzelnes Gerät, so kann dies durchaus manuell erfolgen. In diesem Fall sollte man dem Gerät dennoch per DHCP eine IP-Adresse zuweisen lassen und den Rest der Konfiguration dann bequem über einen Webbrowser durchführen, denn die snom-Telefone verfügen alle über einen eingebauten Webserver, so dass alle komfortabel von außen editiert werden können, ohne dass man sich über die zehn Ziffern- und Menütasten quälen muss.

[Wichtig]Wichtig

Achten Sie darauf, dass sich das Telefon im Admin-Modus befindet, nur so können Sie wirklich alle Einstellungen des Telefons verändern. Normalerweise befindet sich das Telefon in diesem Modus, falls nicht, kann dieser über die "Settings"-Taste aktiviert werden. Das Default-Admin-Passwort ist "0000".

Manuelle Konfiguration

Alle Details zur Einstellung am Gerät selbst finden sich auf der snom-Homepage http://www.snom.com. Dort sind für alle Endgeräte Anleitungen im PDF-Format frei erhältlich. Die Konfiguration zur Anbindung eines Telefons an eine Anlage mit obiger Beispiel-Konfiguration ist sehr einfach:

Abbildung 19.1. snom Konfiguration

snom Konfiguration

Bereits nach diesen Einstellungen sollte sich das Telefon erfolgreich mit der Anlage verbinden können.

Für ein Massen-Rollout ist ein solches Verfahren natürlich denkbar ungeeignet. Daher sind nachfolgend die Schritte beschrieben, die ein Rollout auch in großen Stückzahlen ermöglichen.

Automatische Konfiguration

Zunächst sollten Sie Ihren DHCP-Server mit ein paar zusätzlichen Einstellungen konfigurieren. Es wird davon ausgegangen, dass der Telefonserver und die Telefone in einem eigens dafür eingerichteten Netzwerk, bzw. Netzwerk-Segment agieren. Sollte eine Integration in ein bestehendes Netzwerk durchgeführt werden, ist im Einzelfall zu überprüfen, ob sich die notwendigen Einstellungen mit bereits im Netz befindlichen Geräten vertragen.

Damit die Telefone in der Lage sind, sich selbständig zu konfigurieren, muss ein spezieller DHCP-Parameter beim DHCP-Request mit übergeben werden. Dies kann bei den meisten Linux-Systemen über die Datei /etc/dhcp.conf festgelegt werden:

option tftp-server-name "http://pbx.apfelmus-gmbh.de/snom/settings/snom.php?mac={mac}";

Nachdem die Geräte ihre IP-Adresse erhalten haben, setzen sie automatisch eine Abfrage an die oben angegebene URL ab, um ihre Konfiguration zu erhalten. Dabei wird der Parameter {mac} automatisch mit der MAC-Adresse des Telefons belegt. Man sollte sich nicht verwirren lassen, dass ein HTTP- statt eines TFTP-Servers über diesen Parameter konfiguriert wird. Die Telefone erkennen automatisch, dass sie einen HTTP-Request durchführen müssen. Es muss kein zusätzlicher TFTP-Server konfiguriert werden. Nachfolgend ein Beispiel für ein PHP-Skript, das als Rückgabe die Settings für ein bestimmtes Telefon liefert:

<html>
<pre>

<?php
 // Die MAC-Adresse aus der URL (GET) lesen und in $mac abspeichern.
 $mac = $_GET['mac'];

 // Allgemeine Konfiguration 
 readfile("snom-base.htm");

 // Spezielle Konfiguration fuer diese MAC-Adresse
 readfile("snom-".$mac.".htm");
?>

</pre>
</html>

Über das Skript wird der Inhalt mehrerer Dateien übermittelt. Neben dem Header, dem Footer und den Einstellungen, die bei allen Endgeräten konstant sein sollen, wird des Weiteren eine Datei speziell für das Telefon mit der übergebenen MAC-Nummer übermittelt.

In der Datei snom-base.htm befinden sich die Settings, die für alle Telefone identisch sein sollen. In der Regel kann man hier Sprach- und Datumseinstellungen, feste Tastaturbelegungen etc. konfigurieren.

# After each setting (before the colon) you can set a flag, which means respectively:
# ! means writeable by the user, but will not overwrite existing
# $ means writeable by the user, but will overwrite existing (available since version 4.2)
# & (or no flag) means read only, but will overwrite existing

# more settings can be found at the settings (dump) page of the phone's build in webinterface

# Language and Time settings

language$: Deutsch
web_language$: Deutsch
timezone$: GER+1
date_us_format&: off
time_24_format&: on
tone_scheme&: GER

# define the firmware update policy here
# valid values are <auto_update>, <ask_for_update>, <never_update_firm>,
# <never_update_boot>, <settings_only>
update_policy: auto_update

#define the firmware update interval here, amount in minutes, default is 1440 = 1 day
firmware_interval: 2880

setting_server!: http://pbx.apfelmus-gmbh.de/snom/settings/snom.php?mac={mac}
subscribe_config!: off
update_server!: http://pbx.apfelmus-gmbh.de/snom/settings/snom.php?mac={mac}
contrast!: 14

dtmf_speaker_phone!: on
web_language!: Deutsch
dkey_snom&: url http://pbx.apfelmus-gmbh.de/snom/webapps/mainmenu.xml

admin_mode: off
admin_mode_password$:4321
admin_mode_password_confirm$:4321

alert_internal_ring_text: alert-internal
alert_external_ring_text: alert-external
alert_group_ring_text: alert-group

Alle oben aufgeführten Einstellungen sind im Grunde Standard-Einstellungen. Besonderes Augenmerk gilt den Parametern dkey_snom, alert_internal_ring_text, alert_external_ring_text und alert_group_ring_text. Deren Bedeutung wird später noch genauer erläutert.

Passend zur allgemeinen Konfiguration bekommt jedes Telefon auch eine spezifische Konfiguration. Jeder Teilnehmer sollte in der Lage sein, bei einem Bürowechsel oder einem Reset des Telefons genau die Konfiguration an seinem Telefon wiederzufinden, die ihm vom Administrator zugewiesen wurde. Telefonspezifische Einstellungen werden daher in einer Datei snom-{mac}.htm abgespeichert, also bei einem Telefon mit MAC-Adresse 00:04:13:23:8B:60 in der Datei snom-000413238B60.htm. Der Aufbau des Dateinamens ist prinzipiell beliebig, wichtig dabei ist die Einhaltung der gedachten Kette zwischen den Einstellungen innerhalb der DHCP-Konfiguration, der dazugehörigen Skriptdatei und letztendlich der Settings-Datei des Telefons. Hier die spezielle Konfiguration eines solchen Telefons:

# After each setting (before the colon) you can set a flag, which means respectively:
# ! means writeable by the user, but will not overwrite existing
# $ means writeable by the user, but will overwrite existing (available since version 4.2)
# & (or no flag) means read only, but will overwrite existing

# First account
user_active1!: on
user_realname1$: Hans Mustermann <2000>
user_name1$: 2000
user_host1&: pbx.apfelmus-gmbh.de
user_pass1$: 1234

# You may add up to 12 accounts

# set second account to active outgoing identity
active_line$: 1

# in order to perform automated updates, define the firmware setting file URL
# where you specify the final firmware image URL
firmware_status: http://pbx.apfelmus-gmbh.de/snom/firmware360.htm

Man erkennt in der Konfiguration exakt die Einstellungen wieder, die auch oben in der manuellen Einstellung konfiguriert wurden. Wichtig sind die Flags, die man pro Parameter angeben kann:

!Der Parameter kann vom Anwender über das Telefon geändert werden. Bestehende Einstellungen werden beim Laden des Settings-Files nicht geändert.
$Der Parameter kann vom Anwender über das Telefon geändert werden. Bestehende Einstellungen werden beim Laden des Settings-Files überschrieben.
& oder kein FlagDer Parameter kann vom Anwender nicht über das Telefon geändert werden. Bestehende Einstellungen werden beim Laden des Settings-Files überschrieben.

Man sollte sehr genau abwägen, welche Parameter man für die Anwender freigibt und welche man festzurrt. Allein die Reduktion auf den User-Mode statt dem Admin-Mode des Telefons erleichtert Administratoren später den Alltag.

[Tipp]Tipp

Es ist sehr leicht möglich, ein Template für die snom-Telefone zu erstellen, ohne zunächst mühsam die komplette Dokumentation zu lesen. Am einfachsten konfiguriert man zunächst ein Telefon manuell über einen Webbrowser. In der Navigationsleiste des Web-Interface des Telefons befindet sich ganz unten ein Punkt "Einstellungen" (der Admin-Modus muss aktiv sein!). Dort werden dann im Browser alle aktuellen Einstellungen mit den passenden Parametern ausgegeben. Man braucht also nur noch die gewünschten Parameter in eine entsprechende Datei zu kopieren. Bitte übernehmen Sie auf keinen Fall alle Parameter aus der Liste, sondern ausschließlich die, die für Ihre spezielle Konfiguration wichtig sind. Danach entscheiden Sie über die oben angegebenen Flags, welche der Parameter vom Anwender geändert werden dürfen und welche nicht.

[Wichtig]Wichtig

Sollte die automatische Konfiguration aus irgendeinem Grund nicht funktionieren, so lohnt sich ein Blick in die Datei /var/log/messages, um herauszufinden, welche DHCP-Anfragen gestellt wurden, sowie in das Access-Log des Webservers, um zu überprüfen, ob überhaupt die richtigen Dateien angefordert wurden. Bei einem Apache 2.0 auf einem Debian Linux wäre dies z.B. die Datei /var/log/apache2/access_log. Mittels dieser beiden Logs lassen sich die Fehler bei der Konfiguration in der Regel sehr schnell finden und beheben. Zur Fehlersuche kann man zunächst auch mit statischen Konfigurationsdateien statt mit einem PHP-Skript arbeiten. So wird die Komplexität verringert und es können Fehler in der Skiptdatei ausgeschlossen werden.

[Warnung]Warnung

Die snom-Telefone brauchen zum Laden und Aktivieren der Settings einige Sekunden. Auch wenn das Telefon sich zunächst in den Standard-Konfigurations-Modus versetzt, warten Sie erst einige Sekunden, bevor Sie einen vermeintlich fehlerhaften Versuch abbrechen.

Unterschiedliche Klingeltöne

Nachfolgend ist ein kleines Beispiel aufgeführt, wie man eine unterschiedliche Signalisierung für interne, externe und Gruppenanrufe realisieren kann. Dabei spielen die Parameter alert_internal_ring_text, alert_external_ring_text und alert_group_ring_text eine Rolle. Über den SIP-Header ist es möglich, eine Signalisierungsinformation mit zu übergeben, auch Alert-Info genannt. Die Telefone erkennen dann über diese Info, ob sie ggfs. eine andere Ruf-Signalisierung nutzen sollen, soweit dies vom Anwender konfiguriert wurde. Dazu muss vor der eigentlichen Anwahl über das Dial()-Kommando der SIPAddHeader()-Befehl abgesetzt werden. Anbei ein entsprechender Auszug aus der extensions.conf Datei.

exten => _2XXX,1,SIPAddHeader("Alert-Info: <http://pbx.apfelmus-gmbh.de>\;info=alert-internal\;x-line-id=0")
exten => _2XXX,2,Dial(SIP/${EXTEN})

Das Format des SIP-Headers ist vorgegeben, wichtig ist in diesem Fall eigentlich nur der zweite Parameter info=alert-internal . Hier muss einer der drei konfigurierten Texte stehen, an denen das Telefon die Art des Rufes erkennen soll. Welcher Text dort steht, ist eigentlich egal, aber er muss jeweils mit den Werten übereinstimmen, die bei den Telefon-Parametern alert_internal_ring_text, alert_external_ring_text oder alert_group_ring_text übergeben wurden. Es empfiehlt sich, die jeweiligen Default-Werte zu übernehmen.

[Wichtig]Wichtig

Bitte beachten Sie, dass die Semikolons im Alert-Info mittels "\"-Zeichen maskiert ("gequotet") werden müssen. Ansonsten interpretiert Asterisk alles ab dem ersten Semikolon als Kommentar und der Befehl wird nur unvollständig oder gar nicht ausgeführt.

In der oberen Variante wird davon ausgegangen, dass das Telefon anhand des Info-Parameters selbst entscheidet, welchen Rufton es auswählen muss. Man kann diesen Befehl aber auch dazu nutzen, einen Rufton vorzugeben, indem man eine entsprechende URL angibt, die auf eine Sounddatei verweist.

exten => _2XXX,1,SIPAddHeader(Alert-Info: <http://pbx.apfelmus-gmbh.de/snom/sounds/snom_trumpet.wav>)
exten => _2XXX,n,Dial(SIP/${EXTEN})

Es bietet sich an, einfach mit den verschiedenen Möglichkeiten zu experimentieren. Eine Unterscheidung zwischen internen, externen und Gruppenanrufen macht in den meisten Fällen durchaus Sinn.

Benutzerdefinierte Menüführung (nur snom 360)

Die Geräte der 360er Baureihe verfügen über von außen programmierbare Menüs. Die zugrundeliegenden XML-Strukturen sind unter http://www.snom.info/wiki/index.php/Xmlobjects ausführlich erläutert. In der oben angegebenen automatischen Konfiguration wurde bereits auf die Zeile dkey_snom&: url http://pbx.apfelmus-gmbh.de/snom/webapps/mainmenu.xml hingewiesen. Hier wurde die auf dem Telefon befindliche snom-Taste umbelegt, so dass der interne XML-Browser die dort verlinkte XML-Datei aufruft und interpretiert. Wie schon bei der automatischen Konfiguration der Telefone ist die Installation eines Webservers auf dem Telefonanlagenrechner zu empfehlen, zumal die meisten Linux-Distributionen diese Option bereits von Hause aus anbieten.

Die Datei mainmenu.xml hat folgenden Aufbau:

<?xml version="1.0" encoding="UTF-8"?>
<SnomIPPhoneMenu>
<Title>Menu</Title>
<MenuItem>
<Name>Globales Adressbuch</Name>
<URL>http://pbx.apfelmus-gmbh.de/snom/webapps/phonebook/phonebook.php</URL>
</MenuItem>
<MenuItem>
<Name>Sondernummern</Name>
<URL>http://pbx.apfelmus-gmbh.de/snom/webapps/specialnums.xml</URL>
</MenuItem>
</SnomIPPhoneMenu>

Ein Druck auf die snom-Taste führt zu einem Menü mit den beiden Einträgen "Globales Adressbuch" und "Sondernummern". Wie von der Benutzerführung gewohnt, kann man innerhalb dieser Menüs mit den Telefon-Cursor-Tasten navigieren und Einträge mit der Häkchentaste auswählen. Eine Ebene zurück gelangt man mit der X-Taste.

[Tipp]Tipp

Den "xml version"-Header kann man auch weglassen, der eingebaute Browser ist in der Lage, das XML-Menü auch ohne diese Header korrekt zu interpretieren.

Diese Menüform führt noch keine Wahlvorgänge durch, sondern dient nur der Anzeige von Menüeinträgen, mit denen man wiederum neue URLs aufrufen kann.

Weiter oben wurde erläutert, dass man mittels der "Retrieve"-Taste ausschließlich dann die Voicemail anrufen kann, wenn neue Nachrichten eingegangen sind. Es wurde daher eine Extension "2999" definiert, welche die Abfrage der Mailbox zu jeder Zeit ermöglicht. Diese kann man durch ein spezielles XML-Menü anwählen lassen. Das Beispiel specialnums.xml zeigt genau dies:

<?xml version="1.0" encoding="UTF-8"?>
<SnomIPPhoneDirectory>
<Title>Sondernummern</Title>
<Prompt>Prompt</Prompt>
<DirectoryEntry>
<Name>Mailbox</Name>
<Telephone>2999</Telephone>
</DirectoryEntry>
</SnomIPPhoneDirectory>

Der Anwender bekommt nach Auswahl des Menüs "Sondernummern" nun einen Eintrag "Mailbox" angezeigt, den er wie gehabt auswählen kann. Durch das XML-Objekt SnomIPPhoneDirectory weiß das Telefon, dass nachfolgend Rufnummern gelistet sind, die es nach der Auswahl durch den Anwender anrufen soll. Nachdem der Anwender also den Eintrag "Mailbox" gewählt hat, ruft das Telefon die 2999 an, nach dem oben angegebenen Wählplan also die Abfrage der eigenen Voicemail.

[Warnung]Warnung

snom-Telefone, die mit der Firmware 6.5.2 oder früher ausgestattet sind, zeigen kurz vor der Anwahl einen xml response error im Display an. Dies ist ein Fehler der Firmware und hat nichts mit den XML-Konfigurationsdateien zu tun. Einfluss auf die Funktionalität hat dieser Fehler nicht.

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]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]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]Wichtig

Die Bezeichnung "Ziel" wurde in den snom-Hardphones in einem 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     Watchers  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            Watchers  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]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]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]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     Watchers  1
   2001                : SIP/2001              State:Idle            Watchers  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]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".

Weitere verfügbare Applikationen

Es gibt bereits einige frei verfügbare Applikationen, vor allem im Bereich der Telefonbücher. Zwei empfehlenswerte Implementationen finden sich hier:

  • Phonebook for snom phones: Ein Telefonbuch-Browser mit Suchfunkton und LDAP-, Datei- oder SQL-Anbindung für die Telefondaten (http://www.bevuta.com/phoneapps/)

  • IPPhone XML library for PHP: Sehr empfehlenswert, eigentlich eine Bibliothek zur Entwicklung von PHP-basierten Telefonbüchern auch für andere Telefontypen wie Cisco, aber mit einem Beispiel für einen T-9 geführten Telefonbuch-Browser mit Datei- oder SQL-Anbindung für die Telefondaten (http://swt.uni-stuttgart.de/~langausd/asterisk/).

Vor allem letzteres Beispiel ist eine sehr gute Grundlage für zentrale Telefonbücher. Die T-9-Führung passt ideal auf das Snom-Telefon, das über keine echte alphanummerische Tastatur verfügt, wie viele Systemtelefone. Wer seine Benutzerdaten bereits in einem zentralen LDAP-Server verwaltet, sollte sich dagegen die erste Lösung genauer ansehen.


Version 1.2, November 2002

Neue Version verfügbar

Sie betrachten gerade die alte Version des Buches (Version 1.0). Wir empfehlen Ihnen für Asterisk 1.4 und 1.6 die neue Version des Buches.

Asterisk-Tag 2008

Lernen Sie Mark Spencer (den Erfinder von Asterisk) kennen! Viele Vorträge, Case-Studies und Workshops rund um das Thema VoIP. Asterisk-Tag.org

Das gedruckte Buch

Werbung