Notizen zur asterisk-Konfiguration

Diesen Beitrag schrieb ich 14 Jahre und 9 Monate zuvor; die nachfolgenden Ausführungen müssen heute nicht unbedingt noch genau so funktionieren. Behalte das beim Lesen (und vor allem: beim Nachmachen!) bitte stets im Hinterkopf.

Geschätzte Lesezeit: 2 Minuten

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 Außenwelt! 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 groß 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. Außerdem legen wir einen Ordner an, in dem wir all unsere extensions-Bruchstücke unterbringen werden – wir nennen ihn der Einfachheit halber Extensions (ja, mit großem E, dann geht das Expandieren schneller, jedenfalls bei mir).

## file: "extensions.conf"

#include Extensions/demo.conf

[default]
include => demo
## file: "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
    -- 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)