asterisk VOIP

wall < "Notizen zur asterisk-Konfiguration"

Broadcast message from spillerm@unixe.de (pts/1) (Di Jun 24 12:31:15 2008):
4
Diesen Beitrag schrieb ich vor 10 Jahren. Behalte das beim Lesen bitte im Hinterkopf.

Als erstes wollen wir ein SIP-Telefon mit unserem asterisk verbinden; es soll heraus telefonieren können, eingehende Rufe annehmen können, es bekommt eine Mailbox (die allerdings erst im nächsten Artikel) und es kann angenommene Rufe weitervermitteln:

[1234]
username=1234
secret=keins1234
callerid=Testuser <1234>
host=dynamic
type=friend

Läuft der asterisk schon (und ggf. produktiv), so sollte er nicht komplett restartet werden aufgrund dieser Änderung; ein sip reload am CLI tut’s auch. Nun kann ein SIP-Client verbunden werden; nachdem man ihm die nötigen Daten eingefüttert hat, sollte er sich prompt am CLI melden. ACHTUNG: die meisten SIP-Clients erweisen sich als extrem zickig und sollten nach jeglicher Änderung der Konfiguration beendet und neu gestartet werden! Eine gute Ausgabe sieht in etwa so aus:

Registered SIP '1234' at 192.168.y.x port 62530 expires 3600
    -- Saved useragent "X-Lite release 1010i stamp 39418" for peer 1234

Nachdem wir dieses erfolgreich hinter uns gebracht haben, wollen wir natürlich eine erste Verbindung erstellen; die nächsten Testläufe erfolgen alle asterisk-intern, d.h. wir nutzen erst einmal keine Verbindung zur Aussenwelt! Zum Testen erstellen wir eine Mini-Dialanweisung, die uns ein Soundfile abspielt. Dazu ist ein wenig Vorarbeit nötig:

Der Wählplan hat die absolut unangenehme Eigenschaft, enorm gross zu werden — da blickt man ab einem gewissen Punkt kaum noch durch. Deshalb hacken wir ihn in Stücke und fangen bei Null an — mit einer leeren extensions.conf in /etc/asterisk. Ausserdem legen wir einen Ordner an, in dem wir all unsere extensions-Bruchstücke unterbringen werden — wir nennen ihn der Einfachheit halber Extensions (ja, mit grossem E, dann geht das Expandieren schneller, jedenfalls bei mir).

Der Inhalt der extensions.conf

#include Extensions/demo.conf
 
[default]
include => demo

Der Inhalt von Extensions/demo.conf

[demo]
exten => 666,1,Answer
exten => 666,n,Wait(1)
exten => 666,n,Playback(tt-weasels)
exten => 666,n,Wait(1)
exten => 666,n,Hangup

Nach einem dialplan reload am CLI des asterisk kann die gerade definierte Rufnummer gewählt werden; am CLI (ggf. core set verbose 17 aufrufen) könnt ihr beobachten, was abgeht:

Executing [666@default:1] Answer("SIP/1234-081df5b0", "") in new stack
    -- Executing [666@default:2] Wait("SIP/1234-081df5b0", "1") in new stack
    -- Executing [666@default:3] Playback("SIP/1234-081df5b0", "tt-weasels") in new stack
    -- <SIP/1234-081df5b0> Playing 'tt-weasels' (language 'de')
    -- Executing [666@default:4] Wait("SIP/1234-081df5b0", "1") in new stack
    -- Executing [666@default:5] Hangup("SIP/1234-081df5b0", "") in new stack
  == Spawn extension (default, 666, 5) exited non-zero on 'SIP/1234-081df5b0'

Glückwunsch! Wir haben uns nun einen Grundstock erarbeitet, auf den wir aufsetzen können. Entsprechend können nun weitere Kontexte definiert und häppchenweise auf verschiedene Files verteilt und eingebunden werden; wichtig ist nun, dass für den User mit der Rufnummer 1234 eine entsprechende Wahlregel definiert wird, die initial in etwa so ausschaut:

exten => 1234,1,Dial(SIP/1234)
4