asterisk: Mailbox einrichten und nutzen
Auch hierbei handelt es sich um ein vergleichsweise altes Howto, das ich mehr oder minder zufällig wiederentdeckt habe und der Netzwelt nicht vorenthalten möchte. Sehr viele landen über entsprechende Suchbegriffe auf meinem Blog, und asterisk
ist offenbar ein begehrtes Thema. Nun denn – viel Spaß… ;)
Jetzt implementieren wir die Mailbox für unseren Testuser mit der Rufnummer <1234>.
## file: "/etc/asterisk/voicemail.conf"
[general]
format = wav49|gsm|wav
serveremail = asterisk@testumgebung.de
attach = yes
maxlogins = 3
fromstring = "Testumgebung Asterisk PBX"
emailsubject = [Testumgebung.PBX] Neue Nachrichten (${VM_MSGNUM}) in Box ${VM_MAILBOX}
emailbody = Hallo ${VM_NAME}!\n\nEs ist eine neue Nachricht eingetroffen!\n\n
Datum: ${VM_DATE}\n
Anrufer: ${VM_CALLERID}\n
Dauer: ${VM_DUR}\n\n
Es befinden sich jetzt insgesamt ${VM_MSGNUM} Nachrichten in der Box ${VM_MAILBOX}.\n\n
Zum Abrufen der Mailbox vom eigenen Apparat die 800 anrufen.
emaildateformat=%d.%m.%Y %H:%M:%S
mailcmd=/usr/sbin/sendmail -t -f asterisk@testumgebung.de
; insert the other mailbox users here!
[default]
1234 => ,Testuser,testuser@testumgebung.de
Bitte beachten: die letzte Zeile beginnt nach dem =>
tatsächlich mit einem Komma! Stellt ihr eine PIN vor das Komma (Bsp. 1234 => 1234,Testuser,testuser@testumgebung.de
), so muss der User jedes Mal diese PIN eingeben, ehe er neue Nachrichten abhören kann!
Wie bereits erwähnt: die Steuerung der Mailbox erfolgt über die interne Rufnummer <800>, diese muss nun also dem Dialplan hinzugefügt werden. In unserem Extensions
-Ordner legen wir hierzu eine neue Konfigurations-Datei an.
## file: "/etc/asterisk/Extensions/voicemail.conf"
[voicemail]
exten => 800,1,Answer
exten => 800,n,Wait(1)
exten => 800,n,VoiceMailMain(${CALLERID(num)})
exten => 800,n,Hangup
Auf diese Art landet man bei Wahl der Rufnummer <800> in der Mailbox des anrufenden Anschlusses (ermittelt anhand von ${CALLERID(num)}
). Da wir keine PIN vergeben haben, könnte so potentiell jeder von diesem Apparat aus unsere Nachrichten abhören – dieses Setup ist also nicht sicher. Jedoch steht hier die schrittweise Heranführung an erster Stelle, und je unkomplizierter unser Test-Setup ist, desto übersichtlicher ist es.
Es gibt viele Möglichkeiten, die Voicebox einzubinden. Eine davon ist, sie on demand über das betreffende Telefon an- und auszuschalten. Und das geht so:
[voicemail-on-off]
; Mailbox einschalten
exten => 81,1,Ringing ; Klingeln lassen
exten => 81,n,Wait(1) ; 1 Sekunde warten
exten => 81,n,Answer ; Annehmen
exten => 81,n,Set(DB(CFNR/${CALLERID(num)})=800); Umleitung setzen
exten => 81,n,Playback(auth-thankyou) ; "Danke" abspielen
exten => 81,n,Wait(1) ; 1 Sekunde warten
exten => 81,n,Hangup ; auflegen
; Mailbox ausschalten
exten => 80,1,Ringing ; Klingeln lassen
exten => 80,n,Wait(1) ; 1 Sekunde warten
exten => 80,n,Answer ; Annehmen
exten => 80,n,Set(DB(CFNR/${CALLERID(num)})=) ; Umleitung loeschen
exten => 80,n,Playback(auth-thankyou) ; "Danke" abspielen
exten => 80,n,Wait(1) ; 1 Sekunde warten
exten => 80,n,Hangup ; auflegen
Und natürlich muss unsere extensions.conf
an die neuen Belange angepasst werden…
#### file: "/etc/asterisk/extensions.conf"
#include Extensions/demo.conf
#include Extensions/voicemail.conf
[default]
include => demo
include => voicemail
include => voicemail-on-off
Wie kann ich nun überprüfen, ob meine Mailbox eingeschaltet ist? Erkennbar ist dies über die astdb
. Wählen wir also die <81>, um die Mailbox zu aktivieren, und beobachten wir parallel das CLI…
CLI>-- Executing [81@default:1] Ringing("SIP/1234-081df5b0", "") in new stack
-- Executing [81@default:2] Wait("SIP/1234-081df5b0", "1") in new stack
-- Executing [81@default:3] Answer("SIP/1234-081df5b0", "") in new stack
-- Executing [81@default:4] Set("SIP/1234-081df5b0", "DB(CFNR/1234)=800") in new stack
-- Executing [81@default:5] Playback("SIP/1234-081df5b0", "auth-thankyou") in new stack
-- <SIP/1234-081df5b0> Playing 'auth-thankyou' (language 'de')
-- Executing [81@default:6] Wait("SIP/1234-081df5b0", "1") in new stack
-- Executing [81@default:7] Hangup("SIP/1234-081df5b0", "") in new stack
== Spawn extension (default, 81, 7) exited non-zero on 'SIP/1234-081df5b0'
CLI> database show
/CFNR/1234 : 800
CFNR
steht übrigens für „Call Forward No Reply“, sprich: der Angerufene nimmt nicht ab – und in diesem Fall wird an die Mailbox weitergeleitet. Diese Weiterleitung können wir entfernen, indem wir von unserem 1234-Apparat aus die <80> anrufen, oder aber, indem wir sie übers CLI hinauswerfen:
CLI> database del CFNR 1234
Database entry removed.
CLI>
Die Konfiguration sieht vor, dass eine Benachrichtigung per E-Mail versendet wird – an die in /etc/asterisk/voicemail.conf
hinterlegte E-Mail-Adresse, was selbstredend einen funktionierenden Mailserver voraussetzt. Tipp: in aller Regel reicht es auf solch einem System völlig aus, einen kleinen nullmailer
zu betreiben, der über einen anderen Mailserver sendet, statt einen kompletten sendmail
oder Vergleichbares aufzusetzen.
Aber hier sind die Möglichkeiten nahezu unbegrenzt. Anstelle einer User-Mailadresse kann in /etc/asterisk/voicemail.conf
natürlich auch eine System-Mailadresse angegeben werden, die direkt an ein Ticketsystem (in meinem Falle RT) gebunden ist. Das Attachement wird als solches an das Ticket angehängt, über die Queue- und User-Verwaltung des Ticketsystems kann bestimmt werden, wer im einzelnen das Ticket erhalten soll, erledigte Dinge können als solche markiert werden… Eine unfassbar nützliche Sache, wenn mehrere Beteiligte an einem Projekt arbeiten…
Angeregt durch einen Suchbegriff, den ich in den Statistiken meines Blogs entdeckte (astdb permission denied
): dieses „permission denied“ im Zusammenhang mit der astdb
tritt dann auf, wenn die Zugriffsrechte innerhalb von /var/lib/asterisk
falsch gesetzt sind!
Hintergrundbild: 849x 500px, Bild genauer anschauen – © Marianne Spiller – Alle Rechte vorbehalten