asterisk: Mailbox einrichten und nutzen

Diesen Beitrag schrieb ich 13 Jahre und 10 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

Auch hierbei handelt es sich um ein vergleichsweise altes Howto, dass 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 übeprü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. Tip: 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 Attachements 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!