2.4. Hello-World mit einem SIP-Telefon

Nachdem wir die Extension 1001 schon vom CLI aus aufgerufen haben, gehen wir jetzt den nächsten logischen Schritt und machen dies von einem SIP-Telefon aus. Wenn Sie kein Hardware-SIP-Telefon besitzen, können Sie auch Software-Telefone benutzen, die Sie aus dem Internet herunterladen und auf einem anderen Rechner installieren.

Warnung

Wenn Sie zu Testzwecken ein Software-SIP-Telefon und den Asterisk-Server auf den gleichen Rechner installieren wollen, so müssen Sie beim SIP-Telefon den SIP-Port auf 5061 umstellen, da 5060 bereits von Asterisk benutzt wird. Ein Hardware-SIP-Telefon ist aber für den Anfänger vorzuziehen. Man sollte am Anfang immer so wenige Problemquellen wie möglich verbauen.

sip.conf und das SIP-Telefon konfigurieren

Für das von uns benutzte SIP-Telefon muss in der Asterisk-Konfiguration erst ein Account angelegt werden. Wie vorher mit der extensions.conf verschieben wir auch diesmal die Beispieldatei mit mv sip.conf /var/tmp/asterisk-etc-backup/ nach /var/tmp/asterisk-etc-backup/:
debian:/etc/asterisk# mv sip.conf /var/tmp/asterisk-etc-backup/
debian:/etc/asterisk# 
Danach legen wir mit dem Editor eine neue /etc/asterisk/sip.conf an. Die befüllen wir mit folgendem Inhalt:
[general] 
port=5060 
bindaddr=0.0.0.0 

[2000] 
type=friend 
secret=1234 
host=dynamic
Das SIP-Telefon muss dann mit den hier angegebenen Daten konfiguriert werden:
  • User: 2000
  • Passwort: 1234
  • SIP-Registrar: IP-Adresse Ihres Asterisk-Servers
  • SIP-Proxy: IP-Adresse Ihres Asterisk-Servers

Tipp

Bei manchen Telefonen ist es notwendig, alle verfügbaren Felder notfalls mit 1234567890 zu füllen. Leider gibt es dafür keine allgemeingültige Hilfe. Da hilft nur Ausprobieren!

Asterisk und Telefon starten

Diesmal starten wir Asterisk direkt mit asterisk -vvvvvc im Verbose-Level 5:
debian:/etc/asterisk# asterisk -vvvvvc
Asterisk 1.4.21, Copyright (C) 1999 - 2008 Digium, Inc. and others.
[...]
Danach starten wir das SIP-Telefon neu und warten im CLI auf die Meldung, dass es sich beim Asterisk-Server registriert hat:
*CLI> -- Registered SIP ’2000’ at 47.6.3.4 port 5060 
expires 120 -- Unregistered SIP ’2000’ 

Der Test

Wenn Sie nun mit dem SIP-Telefon die 1001 anrufen, werden Sie von Asterisk den Sprachbaustein hello-world.gsm vorgespielt bekommen.

Vom CLI aus das Telefon anrufen

Da wir mit console dial eine Extension aufrufen können und ein SIP-Telefon angeschlossen haben, sollten wir auch in der Lage sein, dieses Telefon gezielt anzurufen. Dazu müssen wir in der /etc/asterisk/extensions.conf eine weitere Extension einbauen:
[default] 
exten => 1001,1,Answer()
exten => 1001,2,Playback(hello-world)
exten => 1001,3,Hangup()

exten => 2000,1,Dial(SIP/2000)
Jetzt müssen Sie Asterisk entweder mit stop now und asterisk -vvvvvc stoppen und starten oder mit einem dialplan reload im CLI den neuen Dialplan neu einlesen. Danach können Sie mit console dial 2000 vom CLI aus das SIP-Telefon anrufen:
*CLI> console dial 2000

Analyse

Die Applikation Dial() kann eine Verbindung zu einem Telefon aufbauen. Dabei wird ein Parameter angegeben, der aus mindestens zwei Teilen besteht. Der erste, "SIP", steht für die Technologie, in unserem Beispiel das SIP-VoIP-Protokoll. Der zweite Parameter gibt das Ziel innerhalb dieses Protokolls an (hier die 2000). Bei Dial() ist kein Answer() und kein Hangup() notwendig. Da man ja gar nicht weiß, ob die Gegenstelle das Gespräch annimmt oder nicht, hat Dial() von den Asterisk-Entwicklern die Eigenintelligenz mitbekommen, um den Channel auf- und abzubauen.
Dass der Name der Extension 2000 mit dem angerufenen Ziel (dem SIP-Telefon mit dem SIP-Account 2000) übereinstimmt, ist genau genommen Zufall. Auch die folgende Extension wäre sinnvoll:
exten => 55,1,Dial(SIP/2000)
Jetzt kann mit console dial 55 das Telefon mit dem SIP-Account 2000 angerufen werden.

Kommentare in der Konfiguration

Da das Hash-Zeichen "#" in der Telefonie ein DTMF-Signal (Doppeltonmehrfrequenz-Signal) ist, kann es nicht als Signalzeichen für einen Kommentar benutzt werden. Deshalb werden Kommentare in den meisten Asterisk-Konfigurationsdateien mit einem Semikolon ";" eingeleitet. Beispiel:
[default] 
; Die Extension 1001 wird als Funktionstest
; für alle Telefone benutzt.
;
exten => 1001,1,Answer()  ; abgehoben
exten => 1001,2,Playback(hello-world)
exten => 1001,3,Hangup()  ; aufgelegt

; Mit der Extension 2000 wird zum SIP-Telefon
; 2000 verbunden.
;
exten => 2000,1,Dial(SIP/2000)