Cannot find extension context 'XXXXXX'
Mögliche Fehlerursachen:
Es wird auf einen ungültigen Kontextnamen verwiesen
Es muss in der extensions.conf einen Kontext mit dem in der Fehlermeldung verzeichneten Namen XXXXX geben. Kontextnamen werden mit [] eingeschlossen.
Die extensions.conf enthält gravierende Fehler
Hier sind besonders multiline Kommentare zu beachten
Die extensions.conf wird nicht eingelesen
Wenn die Ausgabe des Befehls "show dialplan" im asterisk CLI sehr wenig oder keine Ausgabe bringt, sollte die Datei /etc/asterisk/modules.conf überprüft werden. Im Abschnitt [modules] werden die im System vorhandenen Module referenziert. Sollte "autoload=no" sein muss ein Eintrag "load => pbx_config.so". pbx_config verarbeitet die extensions.conf. Ansonsten versucht "autoload=yes" alle im Modules-Verzeichnis von Asterisk (/usr/lib/asterisk/modules) zu findenden Module automatisch zu laden.
Applications
Applications, die auf Grund der Konfiguration in der modules.conf geladen werden, stellen die Funktionaliät bereit, bzw. "erweitern" Asterisk um Befehle. Sollte also z.B. eine Fehlermeldung auftauchen, die darauf hindeutet, dass der Befehl dial() in der extensions.conf nicht ausgeführt werden kann, so könnte das daran liegen, dass app_dial.so nicht eingebunden ist.
Eine Übersicht der geladenen Applications erhält man mit "show applications" im CLI. Hier sollte dann, um bei obigem Beispiel zu bleiben, folgende Zeile auftauchen: "Dial: Place a call and connect to the current channel".
Eine vollständige Übersicht über alle Applications findet man unter
http://www.voip-info.org/wiki-Asterisk+-+documentation+of+application+commands
SIP Konfiguration
Um Clients mit dem SIP-Protokoll verbinden zu können sind folgende Einträge notwendig:
1. modules.conf
Hier wird SIP aktiviert. Die Datei wird beim Start von asterisk gelesen. Zwei Möglichkeiten gibt es: Entweder steht der Paramter autoload auf yes. Wenn ja sollte das SIP-Modul bereits automatisch geladen werden. Wichtig ist nur dass kein Eintrag "noload => chan_sip.so" existiert. Die zweite Möglichkeit wäre, dass autoload=no eingetragen ist. In diesem Fall muss das Module chan_sip "manuell" über den Eintrag "load => chan_sip.so" geladen werden.
2. sip.conf
Hier definieren wir den Standard-Kontext, der bei Anrufen von diesen Clients verwendet wird, sowie 2 Clients (SIP100 und SIP200) in ihrer einfachsten Konfiguration.
[general]
context=default
[SIP100]
secret=geheim ;Passwort für die Anmeldung des Clients an asterisk
host=dynamic ;keine vorgegebene IP
type=friend ;Client kann alle Arten von Gesprächen durchführen
[SIP200]
secret=geheim ;Passwort für die Anmeldung des Clients an asterisk
host=dynamic ;keine vorgegebene IP
type=friend ;Client kann alle Arten von Gesprächen durchführen
3. extensions.conf
Diese Datei enthält die Wahlregeln, was passiert wenn die Nummer x gewählt wird. Der Name des Kontextes, den wir hier verwenden muss identisch mit dem Namen in der sip.conf sein!
[default]
exten => 100,1,Dial(SIP/SIP100,60)
exten => 100,2,Congestion
exten => 100,102,Busy
exten => 200,1,Dial(SIP/SIP200,60)
exten => 200,2,Congestion
exten => 200,102,Busy
Diese Änderungen genügen bereits damit zwei SIP-Telefone sich gegenseitig anrufen können.
Der aus der Datei extensions.conf erzeugte Dialplan kann im CLI durch "show dialplan" angezeigt werden.
Abgehende MSN setzen
Um in einer kleinen Konfiguration (z.B. Asterisk an einem einzelnen S0- Anschluß mit wenigen SIP-Telefonen) die MSN für abgehende Anrufe definiert setzen zu können kann man folgendes Vorgehen einsetzen:
_0.,1,Set(CALLERID(all)=${IF($[${SIPCHANINFO(peername)} = sip100]?12345:54321)})
_0.,n,...
_0.,n,Zap/g1/${EXTEN:1}|30
_0.,n,...
Ist der zum Telefonieren benutzte SIP-Account sip100 ergibt die Bedingung wahr und es wird 12345 als MSN gesetzt. Wurde ein anderer Account benutzt wird 54321 als abgehende MSN gesetzt.
Music On Hold
Um Music-On-Hold in Asterisk aktivieren zu können muss in der modules.conf ein Eintrag load => res_musiconhold.so vorhanden sein. Erst dann sind die notwendigen Routinen in Asterisk verfügbar. Kontrollieren kann man das Vorhandensein der Module bei laufendem Asterisk im CLI durch den Befehl "show applications". Hier sollte eine Zeile "MusicOnHold: Play Music On Hold indefinitely" auftauchen.
Weiterhin ist das Paket MPG123 notwendig um MP3-Files Life streamen zu können.
mpg123 herunterladen
z.B. von
http://mesh.dl.sourceforge.net/sourceforge/mpg123/mpg123-0.59r-gpl.tar.gz oder direkt von
www.mpg123.de
Installation
tar xvfz mpg123-0.59r-gpl.tar.gz
make freebsd
(für ein FreeBSD-System. Ansonsten einfach make eingeben und in der Ausgabe nach dem passenden Systemtyp suchen)
make install
Nun noch das erzeugte Binary linken, da es als /usr/local/bin/mpg123 erstellt wurde und Asterisk unter /usr/bin/mpg123 sucht:
ln -s /usr/local/bin/mpg123 /usr/bin/mpg123
In der Standardversion von Asterisk sind bereits drei MP3-Files enthalten, die sich im Verzeichnis /var/lib/asterisk/mohmp3 befinden.
fpm-calm-river.mp3
fpm-sunshine.mp3
fpm-world-mix.mp3
Aktivierung
In /etc/asterisk/musiconhold.conf folgende Zeilen einfügen:
[classes]
default => quietmp3:/var/lib/asterisk/mohmp3, -Z
Das -Z am Ende der Zeile bewirkt, dass die MP3-Dateien im Verzeichnis /var/lib/asterisk/mohmp3 zufällig wiedergegeben werden.
Eigene MP3's für Music-On-Hold
ACHTUNG: VBR-MP3's werden von den Asterisk-Developern nicht empfohlen! Gegebenenfalls erst umwandeln. Stichwort lame
Um eigene, legale, von Rechten Dritter freie MP3-Dateien in Asterisk einzubinden geht man wie folgt vor:
- unterhalb von /var/lib/asterisk/mohmp3 ein Verzeichnis erstellen (z.B. lambda)
- in dieses Verzeichnis das/die MP3-File(s) legen
- /etc/asterisk/musiconhold.conf erweitern:
z.B. moh-intern => quietmp3:/var/lib/asterisk/mohmp3/lambda
- Konfigurationsdatei der entsprechenden Klasse anpassen (sip.conf, zapata.conf...)
z.B. sip.conf: musicclass=lambda
oder: zapata.conf: musiconhold=default
=> Landet ein SIP-Anruf in der Warteschleife werden die MP3's aus dem Verzeichnis /var/lib/asterisk/mohmp3/lambda als Music-On-Hold abgespielt
Oder:
- extensions.conf anpassen und eine Zeile nach dem Muster
exten => 100,1,SetMusicOnHold(lambda) vor etwaigen Dial-Commands einfügen
exten => 100,2,Dial...