Kapitel 7. Voicemailsystem

1. Einleitung

In diesem Kapitel beschäftigen wir uns mit den Möglichkeiten des eingebauten Voicemailsystems von Asterisk. Dies ist nicht zu verwechseln mit einem Interactive Voice Response System (IVR), dem Thema von Kapitel 11, Interactive Voice Response Systeme (IVR).

Da jede Telefonanlage einen Anrufbeantworter oder Neudeutsch ein Voicemailsystem[95] benötigt, haben die Asterisk-Entwickler ein solches System als Grundausstattung eingebaut.[96].

2. Beispielanwendungen

Die folgenden Beispiele geben einen schnellen Überblick über typische Konstellationen. Anschließend (in Abschnitt 3, „Applikationen“) wird auf die Besonderheiten und Möglichkeiten von Voicemailsystemen unter Asterisk eingegangen.

Voicemailbox der Familie Meier

Die Familie Meier stellt im Zuge der Modernisierung des Haushaltes auf eine Asterisk-Telefonanlage um. Dies beinhaltet eine moderne Voicemailbox für alle Familienmitglieder.

Aufgabenstellung

Folgende Personen müssen mit einer Voicemailbox ausgerüstet werden:

NameExtensionBemerkung
Horst Meier200Normale Voicemailbox
Eva Meier201Normale Voicemailbox
Peter Meier202Normale Voicemailbox und Benachrichtigung per E-Mail, die Sprachnachricht wird der E-Mail beigefügt
Lisa Meier203Normale Voicemailbox, Benachrichtung per E-Mail (Sprachnachricht wird der E-Mail beigefügt) und danach automatische Löschung der Voicemail im System

Lösung

Die voicemail.conf sieht in diesem Fall wie folgt aus:

[general]
format = wav
attach = yes

[default]
; Die Syntax fuer die Eintraege lautet:
; MailboxNr => Passwort,Name,E-Mail,Pager,Optionen
; (wobei die MailboxNr oft der Extension entspricht)
200 => 1234,Horst Meier
201 => 1234,Eva Meier
202 => 1234,Peter Meier,peter@die-familie-meier.de
203 => 1234,Lisa Meier,lisa@die-familie-meier.de,,delete=yes

Und in der extensions.conf wird auf die Voicemailbox wie folgt verwiesen:

[familie-meier]
; Wenn nach 30 Sekunden niemand abnimmt, geht das Gespraech 
; auf die Voicemailbox, das gleiche bei besetzt:
exten => _20[0-3],1,Set(ZIELNR=${EXTEN})
exten => _20[0-3],n,Dial(SIP/${EXTEN},30)
exten => _20[0-3],n,Goto(s-${DIALSTATUS},1)  ; zum Status (NOANSWER,BUSY,CHANUNAVAIL,CONGESTION,ANSWER)
exten => s-NOANSWER,1,VoiceMail(${ZIELNR},u) ; Ansage "nicht erreichbar"
exten => s-BUSY,1,VoiceMail(${ZIELNR},b)     ; Ansage "besetzt"
exten => s-ANSWER,1,Hangup()                 ; zur Sicherheit nach Gespräch auflegen
exten => _s-.,1,Goto(s-NOANSWER,1)           ; alles andere wie nicht erreichbar behandeln

; auf der Extension 250 kann jeder Teilnehmer mit seinem 
; Telefon seine persoenliche Voicemailbox abrufen:
exten => 250,1,VoiceMailMain(${CALLERID(num)})

Oder schöner so:

[familie-meier]
exten => _20[0-3],1,Macro(normal|SIP/${EXTEN}|${EXTEN})

exten => 250,1,VoiceMailMain(${CALLERID(num)})

[macro-normal];
;  ${ARG1} - anzurufendes(s) Gerät(e) (z.B. SIP/123&SIP/124)
;  ${ARG2} - Mailbox (oft gleich ${MACRO_EXTEN})
exten => s,1,Dial(${ARG1},30)               ; max. 30 Sekunden klingeln
exten => s,n,Goto(s-${DIALSTATUS},1)        ; zum Status (NOANSWER,BUSY,CHANUNAVAIL,CONGESTION,ANSWER)
exten => s-NOANSWER,1,VoiceMail(${ARG2},u)  ; Ansage "nicht erreichbar"
exten => s-BUSY,1,VoiceMail(${ARG2},b)      ; Ansage "besetzt"
exten => s-ANSWER,1,Hangup()                ; zur Sicherheit nach Gespräch auflegen
exten => _s-.,1,Goto(s-NOANSWER,1)          ; alles andere wie nicht erreichbar behandeln

Die Apfelmus GmbH

Die in Kapitel 3, Die große Telefonanlage vorgestellte Apfelmus GmbH benötigt ein umfangreicheres Voicemailsystem. Wir bedienen uns dieses Szenarios, um die Möglichkeiten des Voicemailsystems näher zu erläutern.

Aufgabenstellung

Folgende Einstellungen sollen für jede Voicemailbox als Grundeinstellung vorgegeben werden:

  • Sprachnachrichten werden im WAV-Format abgespeichert.
  • Jede Voicemailbox kann maximal 200 Nachrichten abspeichern.
  • Eine Sprachnachricht darf maximal 5 Minuten lang sein.
  • Sprachnachrichten werden auf dem System gespeichert und dem Nutzer als Attachment per E-Mail zugestellt.

Einzelne Abteilungen haben darüber hinaus noch zusätzliche Wünsche und Bedürfnisse für ihre Voicemailboxen:

VoicemailboxFunktionBemerkung
150Hausmeister
  • Eine Benachrichtigung wird nur per Pager zugestellt und nicht per E-Mail.
  • Anrufer dürfen die Sprachnachricht vor dem Abspeichern noch einmal anhören und ggfs. ändern.
  • Nach dem Abhören der Nachricht kann der Anrufer aus dem Menü zurückgerufen werden.
160 - 169IT
  • In der IT-Abteilung bekommt jeder Mitarbeiter eine eigene Voicemailbox.
  • Es wird nur dann auf die Voicemailboxen umgeleitet, wenn kein Mitarbeiter ans Telefon geht. Bei besetztem Anschluss kann hingegen keine Nachricht hinterlassen werden.[a]
802Verkauf Inland
  • Es wird keine E-Mail verschickt.[b]
  • Bei der Abfrage der Voicemailbox muss kein Passwort eingegeben werden.
803Verkauf Ausland
  • Es wird keine E-Mail verschickt.
  • Bei der Abfrage der Voicemailbox muss kein Passwort eingegeben werden.
201Geschäftsführer 1
  • Anrufer dürfen die Sprachnachricht vor dem Abspeichern noch einmal anhören und ggfs. ändern.
  • Nach dem Abhören der Nachricht kann der Anrufer aus dem Menü zurückgerufen werden.
202Geschäftsführer 2
  • Anrufer dürfen die Sprachnachricht vor dem Abspeichern noch einmal anhören und ggfs. ändern.
  • Nach dem Abhören der Nachricht kann der Anrufer aus dem Menü zurückgerufen werden.
804Sekretariat
  • Anrufer dürfen die Sprachnachricht vor dem Abspeichern noch einmal anhören und ggfs. ändern.

[a] Dies ist eine Vorsichtsmaßnahme, die einen Denial-Of-Service im Falle eines großen IT-Problems verhindern soll. Wenn alle Mitarbeiter eine Nachricht auf dem Voicemailsystem hinterlassen würden, dann käme die IT-Abteilung mit dem Abhören dieser Nachrichten nicht mehr nach.

[b] In der Verkäufergruppe sind mehrere Personen, es soll daher nicht eine E-Mail an eine bestimmte Einzelperson geschickt werden. Man könnte aber die Funktion vieler SIP-Telefone nutzen, mit einem Blinklicht anzuzeigen, ob eine Nachricht in der Voicemailbox vorhanden ist.

Lösung

Die voicemail.conf der Apfelmus GmbH sieht wie folgt aus:

[general]
; Die Sprachnachrichten werden im qualitativ hochwertigen 
; WAV Format gespeichert.
format = wav

; Die E-Mails mit den Sprachnachrichten fuer die Nutzer erhalten 
; als Absender: voicemailsystem@apfelmus-gmbh.de
serveremail = voicemailsystem@apfelmus-gmbh.de

; Es duerfen maximal 200 Nachrichten pro Mailbox 
; gespeichert werden.
maxmsg = 200

; Die maximale Laenge einer Sprachnachricht ist 5 Minuten
maxmessage = 300

; Text fuer die Benachrichtigungs-E-Mail.
; Muss in einer Zeile stehen!
emailbody = Guten Tag ${VM_NAME},\n\nSie haben eine neue Nachricht von ${VM_CALLERID} in Ihrer Voicemailbox ${VM_MAILBOX}. Bitte rufen Sie die 800 an, um die Nachricht abzuhoeren.\n\n-- Asterisk Voicemail System\n

; Text fuer die Benachrichtigung per Pager.
; Muss in einer Zeile stehen!
pagerbody = Neue Voicemail von ${VM_CALLERID} um ${VM_DATE}.

; Voice-Nachrichten anhaengen:
attach = yes

[default]
; Die Syntax fuer die Konfigurationszeilen ist:
; MailboxNr => Passwort,Name,E-Mail,Pager,Optionen
150 => 1234,Hans Hausmeister,,pager.hausmeister@apfelmus-gmbh.de,review=yes|callback=interne-gespraeche
802 => 1234,Verkauf Inland
803 => 1234,Verkauf Ausland
201 => 1234,Hans Wichtig,geschaeftsfuehrer1@apfelmus-gmbh.de,,review=yes|callback=interne-gespraeche
202 => 1234,Uwe Wichtig,geschaeftsfuehrer2@apfelmus-gmbh.de,,review=yes|callback=interne-gespraeche
804 => 1234,Sekretariat,sekr@apfelmus-gmbh.de,,,review=yes

Und in der extensions.conf wird auf die Voicemailbox wie folgt verwiesen:

[hausmeister]
include => interne-gespraeche
include => voicemailsystem-hausmeister

[it]
include => interne-gespraeche
include => voicemailsystem-komfort
include => voicemailsystem-normal

[geschaeftsfuehrer]
include => interne-gespraeche
include => voicemailsystem-komfort

[sekretariat]
include => interne-gespraeche
include => voicemailsystem-komfort

[verkauf-national]
include => interne-gespraeche
include => voicemailsystem-verkauf-national

[verkauf-ausland]
include => interne-gespraeche
include => voicemailsystem-verkauf-ausland

[versand]
include => interne-gespraeche
include => voicemailsystem-komfort

[produktion]
include => interne-gespraeche
include => voicemailsystem-komfort

[sonstige]

[macro-simple];
;  ${ARG1} - anzuklingelnde(s) Gerät(e) (z.B. SIP/123&SIP/124)
;  ${ARG2} - Mailbox (oft gleich ${MACRO_EXTEN})
exten => s,1,Dial(${ARG1},30)               ; max. 30 Sekunden klingeln
exten => s,n,Goto(s-${DIALSTATUS},1)        ; je nach Status springen (NOANSWER,BUSY,CHANUNAVAIL,CONGESTION,ANSWER)
exten => s-NOANSWER,1,VoiceMail(${ARG2},u)  ; Voicemail mit Ansage "nicht erreichbar"
exten => s-BUSY,1,VoiceMail(${ARG2},b)      ; Voicemail mit Ansage "besetzt"
exten => s-ANSWER,1,Hangup()                ; zur Sicherheit nach Gespräch auflegen
exten => _s-.,1,Goto(s-NOANSWER,1)          ; alles andere wie nicht erreichbar behandeln

[interne-gespraeche]
; Wenn der Hausmeister nicht ans Telefon geht, wird
; das Telefonat auf die Voicemailbox 150 geleitet:
exten => _15X,1,Macro(simple|SIP/${EXTEN}|150)

; Die IT hat normale Voicemailboxen:
exten => _16X,1,Macro(simple|SIP/${EXTEN}|${EXTEN})

; Die beiden Geschaeftsfuehrer haben eine eigene Voicemailbox:
exten => _20[1-2],1,Macro(simple|SIP/${EXTEN}|${EXTEN})

; Das Sekretariat hat eine Gruppenmailbox:
exten => _2[3-6]X,1,Macro(simple|SIP/${EXTEN}|804)

; Der Verkauf National hat eine Gruppenmailbox:
exten => _3[0-4]X,1,Macro(simple|SIP/${EXTEN}|802)

; Der Verkauf Ausland hat eine Gruppenmailbox:
exten => _3[5-9]X,1,Macro(simple|SIP/${EXTEN}|803)

; Alle anderen erhalten keine Voicemailbox.
exten => _[4-5]XX,1,Dial(SIP/${EXTEN},30)


[voicemailsystem-komfort]
exten => 800,1,VoiceMailMain(${CALLERID(num)})

[voicemailsystem-normal]
exten => 801,1,VoiceMailMain()

[voicemailsystem-hausmeister]
exten => 800,1,VoiceMailMain(150)

[voicemailsystem-verkauf-national]
exten => 800,1,VoiceMailMain(802,s)

[voicemailsystem-verkauf-ausland]
exten => 800,1,VoiceMailMain(803,s)

Besonderheiten

Die extensions.conf der Apfelmus GmbH sieht jetzt schon etwas aufwendiger aus. Das liegt daran, dass wir verschiedene Voicemailboxarten verwenden. Es gibt einmal die normale Voicemailbox und dann noch die Gruppen-Voicemailboxen für den Verkauf und das Sekretariat. Weiterhin sollen die Mitarbeiter des Verkaufs ihre Voicemailboxen ohne Passwort-Eingabe abrufen können. Das Ganze soll natürlich für den einzelnen Mitarbeiter möglichst komfortabel abgebildet werden. Aus diesem Grund bleibt für alle User des Systems die 800 die Rufnummer der Voicemailbox, unter der sie dieselbige abrufen können.

3. Applikationen

Es gibt zwei Voicemail-Applikationen, die in der extensions.conf aufgerufen werden können:

VoiceMail()
Dieses Programm leitet einen Anrufer an das Voicemailsystem weiter, und dort wird er aufgefordert, eine Nachricht zu hinterlassen.
VoiceMailMain()
VoiceMailMain ist das Abfrageprogramm für die Nutzer der Telefonanlage. Mit diesem Programm können Nutzer selbst Ansagen aufnehmen und Nachrichten abhören.

VoiceMail()

Funktion: Der Anrufer kann eine Nachricht auf dem Voicemailsystem hinterlassen.

Die Applikation VoiceMail() wird immer aus der Datei extensions.conf aufgerufen. Beispiel:

exten => 2000,2,VoiceMail(2000,u)

Syntax

VoiceMail(mailbox[@context][,u|b|s])
mailbox
Das ist der Name der Mailbox (Ziffern). Er muss nicht identisch mit der entsprechenden Extension sein. Dies ist aber aus praktischen Gründen sinnvoll, da die Konfiguration dadurch übersichtlicher wird.
@context

Eine Mailbox kann in einem bestimmten Context ausgeführt werden. Ist kein Context angegeben, so wird der [default]-Context verwendet.

Wenn der Anrufer während der Ansage die 0 (Null) drückt, dann springt die Applikation zu der Extension o (Buchstabe o kleingeschrieben) in diesem Context.
Wenn der Anrufer während der Ansage den * (Stern) drückt, dann springt die Applikation zu der Extension a (Buchstabe a kleingeschrieben) in diesem Context.
[u|b|s]
u
veranlasst, dass die „unavailable“ (nicht verfügbar) Nachricht abgespielt wird. Der Dateiname im Filesystem ist /var/lib/asterisk/sounds/vm-isunavail.gsm[97]
b
veranlasst, dass die „busy“ (besetzt) Nachricht abgespielt wird. Der Dateiname im Filesystem ist /var/lib/asterisk/sounds/vm-rec-busy.gsm.
s
unterdrückt das Abspielen einer Nachricht (Sounddatei) und startet unmittelbar die Aufnahme.

Falls keine Mailbox in der Datei voicemail.conf definiert ist, aber ein Eintrag mit der Priorität n+101 existiert, dann wird dieser angesprungen und ausgeführt.

VoiceMailMain()

Funktion: Stellt Nutzern den Zugang zum Voicemailsystem her.

Die Funktion VoiceMailMain() wird immer aus der Datei extensions.conf aufgerufen. Beispiel:

exten => 300,1,VoiceMailMain()

Syntax

VoiceMailMain([mailbox][@context][,s|p])
mailbox
Der Name (also Nummer) der Mailbox. Wenn kein Name vorgegeben wurde, fragt das System danach.
@context
Definiert den Context, der innerhalb der voicemail.conf angesprochen wird.
[s|p]
s
Wird ein s vor den Mailboxnamen gestellt, dann entfällt die Passwortabfrage.
p
Wird ein p vor den Mailboxnamen gestellt, dann wird der User gebeten, eine Mailbox anzugeben. Aus dem Inhalt von mailbox und dieser Eingabe wird dann der neue Mailboxname. Damit lässt sich eine mandantenfähige Mailboxstruktur realisieren.

Menü

Eine Beschreibung des Sprachmenüs von VoiceMailMain() ist schwierig, da es von den eingesetzten Prompts (Sprachbausteinen) abhängt. Die prinzipiellen Funktionen sind hier aufgelistet. In Klammern finden sich die englischen Beschreibungen.

1Nachrichten abspielen (Read voicemail messages)
 
3Erweiterte Optionen (Advanced options)
 
1Antwort (Reply)
2Rückruf (Call back)
3Zusatzinformationen (Envelope)
4Anruf tätigen (Outgoing call)
4Vorherige Nachricht (Play previous message)
5Wiederholung der aktuellen Nachricht (Repeat current message)
6Nächste Nachricht (Play next message)
7Lösche aktuelle Nachricht (Delete current message)
8Nachricht an eine andere Mailbox weiterleiten (Forward message to another mailbox)
9Nachricht in einem Ordner speichern (Save message in a folder)
*Hilfe; während des Abspielens einer Nachricht: Zurückspulen (Help; during msg playback: Rewind)
#Beenden; während des Abspielens einer Nachricht: Weiter (Exit; during msg playback: Skip forward)
2Ordner wechseln (Change folders)
0Mailbox-Optionen (Mailbox options)
 
1Aufnahme der „nicht erreichbar“-Ansage (Record your unavailable message)
2Aufnahme der „im Gespräch“-Ansage (Record your busy message)
3Aufnahme des Namens (Record your name)
4Aufnahme einer temporären Ansage (Record your temporary message)
 Jeweils nach der Aufnahme:
 
1Akzeptieren (Accept)
2Nochmals abspielen (Review)
3Nochmals aufnehmen (Re-record)
*Hilfe (Help)
#Beenden (Exit)

4. voicemail.conf

In der Datei voicemail.conf wird das Voicemailsystem von Asterisk konfiguriert. Es besteht aus 3 Bereichen:

  • [general]
  • [zonemessages]
  • Freie Contexte

[general]

Im Bereich [general] werden allgemeine Konfigurationen des Voicemailsystems vorgenommen. Es stehen folgende Optionen zur Verfügung:

attach = [yes|no]

Legt fest, ob an die Benachrichtigungs-E-Mails an die Nutzer auch die Sprachnachricht als Sounddatei angehängt wird. Default: yes. Normalerweise wird das erste unter format eingestellte Format verwendet.

Beispiel:

attach = no

callback = [Context]

Legt einen Context fest, der für Rückrufe aus dem System benutzt wird. Ist dieser Wert nicht gesetzt, was per Default der Fall ist, dann kann der User keine Rückrufe aus dem Voicemailsystem machen.

Beispiel:

callback = intern

charset = [Zeichensatz]

Gibt den Zeichensatz (Charset) vor, in dem die E-Mails vom Voicemailsystem kodiert werden.

Beispiel:

charset = ISO-8859-1

delete = [yes|no]

Definiert, ob eine Sprachnachricht nach dem Versenden per E-Mail automatisch gelöscht werden soll. Dies spart Festplattenplatz auf dem Server, falls man Sprachnachrichten nur per E-Mail empfangen will.

Beispiel:

delete = yes

directoryintro = [Dateiname]

Definiert eine Sprachdatei innerhalb des Default-Verzeichnisses /var/lib/asterisk/sounds/, die anstatt der normalen Datei für das Dial-by-Name-System abgespielt wird (siehe Abschnitt 5, „Telefonbuch (Dial-by-Name)“).

Beispiel:

directoryintro = intro-telefonbuch

emailsubject = [Text der Betreffzeile]

Definiert den Betreff (Subject) einer Benachrichtigungs-E-Mail. Für Informationen über Variablen siehe emailbody.

Beispiel:

emailsubject = Neue Sprachnachricht von ${VM_CALLERID}

pbxskip = [yes|no]

Standardmäßig schreibt Asterisk am Anfang der Betreffzeile der E-Mail-Benachrichtigung über eine Sprachnachricht den Text [PBX]: Dies kann mit yes unterdrückt werden.

Beispiel:

pbxskip = yes

emailbody = [Text der Email]

Definiert den E-Mail-Body[98] einer Benachrichtigungs-E-Mail (maximal 512 Zeichen).

Im Betreff und im Body einer solchen E-Mail kann auf folgende Variablen zugegriffen werden:

${VM_NAME}

Name des Mailboxinhabers

${VM_DUR}

Länge der Nachricht

${VM_MSGNUM}

Nummer der Nachricht

${VM_MAILBOX}

Name der Mailbox

${VM_CALLERID}

Telefonnummer und Name des Anrufers

${VM_CIDNUM}

Telefonnummer des Anrufers

${VM_CIDNAME}

Name des Anrufers

${VM_DATE}

Datum und Uhrzeit des Anrufes

${VM_MESSAGEFILE}

Name der Sounddatei, in der die Nachricht abgespeichert ist

Beispiel:

emailbody = Hallo ${VM_NAME},\n\nSie haben eine neue Nachricht von ${VM_CALLERID} in Mailbox ${VM_MAILBOX}.[99]

serveremail = [Absenderadresse]

E-Mail-Adresse, die als Absender der E-Mail vom Voicemailsystem an den User eingestellt wird.

Beispiel:

serveremail = voicemail@apfelmus-gmbh.de

fromstring = [Absendername]

Definiert den Absender (From-Header) in E-Mails vom Voicemailsystem.

Beispiel:

fromstring = AB

mailcmd = [Shell-Befehl]

Definiert das Programm (mit absolutem Pfad und ggf. Parametern), das zum Versenden von E-Mails benutzt werden soll. Default: /usr/sbin/sendmail -t

Beispiele:

mailcmd = /usr/sbin/sendmail -t

mailcmd = /usr/exim/bin/exim -t

externnotify = [Shell-Befehl]

Definiert ein Programm (mit absolutem Pfad), das von Asterisk aufgerufen wird, wenn eine neue Sprachnachricht für einen User vorliegt.

Beispiel:

externnotify = /usr/bin/local/mach-was.sh

externpass = [Shell-Befehl]

Definiert ein Programm (mit absolutem Pfad), das von Asterisk aufgerufen wird, wenn ein User sein Passwort geändert hat.

Beispiel:

externpass = /usr/bin/local/mach-was.sh

forcegreetings = [yes|no]

Definiert, ob ein User vom System dazu gezwungen wird, beim ersten Benutzen des Systems eine Begrüßungsnachricht aufzunehmen. Default: no

Beispiel:

forcegreetings = no

forcename = [yes|no]

Definiert, ob der User vom System dazu gezwungen wird, bei der ersten Nutzung seinen Namen aufzunehmen. Default: no

Beispiel:

forcename = yes

format = [gsm|wav|wav49]

Listet die Codecs auf, mit denen eine Sprachnachricht abgespeichert werden soll. Werden mehrere Codecs aufgeführt, werden auch mehrere Dateien gespeichert. Das kann im Extremfall zu Platzproblemen auf der Festplatte führen. Der Vorteil liegt darin, dass bei einer Abfrage die Nachricht nicht noch einmal neu kodiert werden muss, falls der Abfragende mit einem anderen Codec abfragt, als mit dem, in dem die Nachricht bereits gespeichert wurde.

Bei aktiviertem attach wird das erste Format dieser Liste für E-Mail-Anhänge verwendet.

Beispiele:

format = gsm|wav

Jede Sprachnachricht wird im GSM- und im WAV-Format abgespeichert.

format = wav

Jede Sprachnachricht wird nur im WAV-Format abgespeichert.

[Achtung]Achtung

Wird diese Einstellung im laufenden Betrieb verändert, müssen vorher vom System angelegte Sounddateien manuell gelöscht werden.

searchcontexts = [yes|no]

Standardmäßig werden Voicemailboxen nur im angegebenen Context gesucht. Mit diesem Schalter kann man das Suchverhalten auf alle Contexte erweitern. Default: no

Beispiel:

searchcontexts = no

maxmsg = [Anzahl Nachrichten]

Definiert die maximale Anzahl an Sprachnachrichten in einer Voicemailbox. Default: 100. Danach können keine neuen Nachrichten mehr aufgenommen werden, und der Anrufer hört die Nachricht /var/lib/asterisk/sounds/vm-mailboxfull.gsm[100].

Beispiel:

maxmsg = 50

maxmessage = [Länge in Sekunden]

Definiert die maximale Länge einer Sprachnachricht in Sekunden. Default: unendlich

Beispiel:

maxmessage = 120

minmessage = [Länge in Sekunden]

Definiert die minimale Länge einer Sprachnachricht in Sekunden. Default: 0

Beispiel:

minmessage = 5

maxgreet = [Länge in Sekunden]

Definiert die maximale Länge einer Begrüßungsnachricht in Sekunden. Default: unendlich

Beispiel:

maxgreet=240

maxsilence = [Länge in Sekunden]

Definiert die Anzahl der Sekunden an Stille, die das System wartet, bevor es davon ausgeht, dass die Nachricht zu Ende gesprochen wurde.

Beispiel:

maxsilence=10

silencethreshold = [Schwellenwert]

Definiert, was für Asterisk bei der Einstellung maxsilence Stille (also Silence) ist. Je niedriger dieser Wert ist, desto höher ist die Empfindlichkeit. Default: 128[101]

Beispiel:

silencethreshold = 50

maxlogins = [Anzahl]

Definiert die maximale Anzahl von fehlerhaften Einlogversuchen (falsches Passwort durch den User), bevor Asterisk auflegt. Default: 3

Beispiel:

maxlogins = 3

skipms = [Millisekunden]

Setzt die Anzahl an Millisekunden, um die während des Abhörens einer Sprachnachricht mit den Tasten für weiter und zurück in der Nachricht gesprungen wird. Default: 3000

Beispiel:

skipms = 6000

usedirectory = [yes|no]

Erlaubt es dem User von Voicemailboxen, die Einträge eines Dial-by-Name-Systems zur Weiterleitung von Nachrichten zu benutzen. Default: no

Beispiel:

usedirectory = yes

saycid = [yes|no]

Definiert, ob die Telefonnummer des Anrufers beim Abrufen der Nachrichten angesagt werden soll. Default: no

Beispiel:

saycid = yes

cidinternalcontexts = [context,context,...]
Legt die Contexte fest (durch Kommata getrennt), die beim Abrufen einer Voicemail-Nachricht als intern gelten, für die also z.B. nur die Durchwahl (Extension) als Caller-ID angesagt wird. Default: keine
pagerfromstring = [Absendername]

Analog zu fromstring für Nachrichten an Pager.

Beispiel:

pagerfromstring = Apfelmus GmbH

pagersubject = [Betreff]

Analog zu emailsubject für Nachrichten an Pager.

Beispiel:

pagersubject = Neue Voicemail

pagerbody = [Absendername]

Analog zu emailbody für Nachrichten an Pager.

Beispiel:

pagerbody = Neue Voicemail in Mailbox ${VM_MAILBOX} von ${VM_CALLERID}.

Neben den hier aufgeführten Parametern gibt es noch weitere, die genannten sind jedoch die wichtigsten für gängige Konfigurationen. Eine Auflistung aller verfügbaren Parameter findet sich in der Datei voicemail.conf. In der Grundinstallation sind dort alle Parameter mit einer kurzen Beschreibung enthalten.

[zonemessages]

Da es vorkommt, dass sich die User eines Voicemailsystems in unterschiedlichen Zeitzonen befinden, kann im Bereich [zonemessages] für jede Zeitzone ein unterschiedliches Format definiert werden, mit dem dem User die Uhrzeit angesagt wird.[102]

Syntax

zonenname = timezone | format
zonenname
Unter diesem Namen kann man später auf das entsprechende Format zugreifen. Verwenden Sie nur Kleinbuchstaben, Ziffern, Bindestrich (-) und Unterstrich (_).
timezone

In einem normalen Debian-Linux-System finden Sie im Verzeichnis /usr/share/zoneinfo/ eine Auflistung von verschiedenen Regionen. Jede Region wird mit einem Unterverzeichnis dargestellt. In diesem Unterverzeichnis stehen Städtenamen. Ein timezone-Eintrag besteht aus der Region und dem Städtenamen (getrennt durch ein /).

Beispiele:

Europe/Berlin

Australia/Sydney

format

Definiert das Format, in dem die Zeit angesagt wird. Es stehen folgende Variablen zur Verfügung:

AWochentag (Montag bis Sonntag)
asiehe A
BMonat (Januar bis Dezember)
bsiehe B
hsiehe B
dTag des Monats (1. bis 31.)
esiehe d
YJahr (z.B. 2006)
IStunde im amerikanischen 12-Stunden-Format
lsiehe I
HStunde im europäischen 24-Stunden-Format. Dabei wird beim englischen Sprachmenü einstelligen Uhrzeiten eine 0 (englische Aussprache „oh“) vorangestellt.
kStunde im europäischen 24-Stunden-Format
MMinute
PAM oder PM
psiehe P
Qheute“, „gestern“ oder ABdY (Wochentag, Monat, Tag, Jahr)
q “ (also nichts, wenn es heute ist), „gestern“ oder ABdY (Wochentag, Monat, Tag, Jahr)
RStunde:Minute:Sekunde

Daneben gibt es noch die Sonderfälle ${VAR} (Inhalt dieser Variablen wird eingefügt) und 'sprachdatei'. Dabei ist zu beachten, dass 'sprachdatei' ohne „.gsm“ ist. Dieser Sprachbaustein aus dem Verzeichnis sounds/ wird dann abgespielt. Die einfachen Anführungszeichen sind zwingend.

Beispiel:

[zonemessages]
deutschland = Europe/Berlin | 'vm-received' Q 'digits/at' kM
england = Europe/London | 'vm-received' Q 'digits/at' R
military = Zulu | 'vm-received' q 'digits/at' H N 'hours' 'phonetic/z_p'

Freie Contexte

Genau wie in der extensions.conf gibt es auch in der voicemail.conf die Möglichkeit, einen Context zu definieren. Das ist praktisch, um zum Beispiel verschiedene Firmenabteilungen separat zu behandeln. Dadurch können auch unterschiedliche Adress- oder Telefonbücher definiert werden (siehe Abschnitt 5, „Telefonbuch (Dial-by-Name)“).

Der Default-Context

Wenn kein anderer Context eingerichtet wurde, muss zumindestens der [default]-Context existieren. Für die meisten aller Installationen reicht dieser aus.

Mailbox-Definition

In einem Context können beliebig viele Mailboxen definiert werden.

Syntax

mailbox => passwort,name[,e-mail[,pager-e-mail[,optionen]]]

Beispiel:

202 => 1234,Peter Meier,peter@familie-meier.de,,attachfmt=wav|delete=yes
mailbox
Name der Mailbox (Ziffern)
passwort
Passwort für die Mailbox (Ziffern oder Buchstaben). Ziffern sind in der Regel praktischer, da sie auch auf normalen Telefonen vom User eingegeben werden können.
e-mail
E-Mail-Adresse, an die Sprachnachrichten gesendet werden sollen
pager-e-mail
E-Mail Adresse des Pagers, an die Benachrichtigungen (eine Textzeile) geschickt werden sollen[103]
optionen

Unterschiedliche Optionen, die durch ein Pipe-Zeichen (|) voneinander getrennt aneinandergereiht werden. Sie können hier die unter [general] (siehe [general]) global festgelegten Einstellungen pro Mailbox verändern. Bitte beachten Sie, dass zwischen Parametername, dem Gleich-Zeichen (=) und dem Wert keine Leerzeichen sein dürfen. Dasselbe gilt für das Pipe-Zeichen (|).

Die wichtigsten Optionen in diesem Zusammenhang sind:

tz=[Zeitzone]

Setzt die gewünschte Zeitzone aus dem vorher definierten [zonemessages] Context (siehe [zonemessages]).

Beispiel:

tz=deutschland

attach=[yes|no]
Legt fest, ob die Sounddatei der Sprachnachricht der E-Mail beigefügt werden soll.
attachfmt=[gsm|wav|wav49]
Legt ggf. ein anderes als das unter [general] mittels format eingestellte Format fest, das für E-Mail-Anhänge verwendet wird.
saycid=[yes|no]
Definiert, ob die Telefonnummer des Anrufers angesagt werden soll.
sayduration=[yes|no]
Definiert, ob die Länge der Nachricht angesagt werden soll. Default: yes
saydurationm=[ab Dauer in Minuten]
Legt die Mindestlänge einer Nachricht in Minuten fest, ab der die Länge angesagt wird. Default: 0
dialout=[context]

Definiert den Context, der zum Rauswählen benutzt werden soll. Ohne diese Angabe kann man aus dem Voicemailsystem heraus keine Telefonate führen.

Beispiel:

dialout=intern

sendvoicemail=[yes|no]
Bestimmt, ob Teilnehmer Sprachnachrichten an andere Teilnehmer des Voicemailsystems schicken können.
callback=[context]
Definiert den Context, der für Rückrufe benutzt wird. Ist er festgelegt, kann man den Anrufer, der eine Sprachnachricht hinterlassen hat, einfach aus dem Voicemailboxsystem zurückrufen.
review=[yes|no]
Legt fest, ob der Anrufer die von ihm hinterlassene Sprachnachricht vor dem Speichern erneut anhören kann. Default: no
operator=[yes|no]
Definiert, ob der Anrufer vor, während oder nach der Aufnahme seiner Sprachnachricht mit der Eingabe von 0 (also Null auf dem Telefon drücken) zum Operator durchgestellt wird. Operator ist immer die Extension o (kleiner Buchstabe o) im aktuellen Context. Default: no
envelope=[yes|no]
Legt fest, ob allgemeine Informationen vor der Sprachnachricht angesagt werden sollen. Wenn dieser Parameter auf no gesetzt ist, dann werden dadurch bestimmte andere Einstellungen (wie zum Beispiel tz) überstimmt. Default: yes
delete=[yes|no]
Definiert, ob Sprachnachrichten nach dem Versenden per E-Mail automatisch gelöscht werden sollen. Default: no
nextaftercmd=[yes|no]
Definiert, ob das System nach dem Löschen oder Abspeichern einer Sprachnachricht automatisch zur nächsten Nachricht springt. Default: no
forcename=[yes|no]
Bestimmt, ob das System den User beim ersten Abruf des Systems dazu zwingt, seinen Namen aufnehmen zu lassen. Default: no
forcegreetings=[yes|no]
Definiert, ob das System den User bei der ersten Nutzung des Voicemailsystems dazu zwingt, eine persönliche Ansage für seine Voicemailbox aufzunehmen. Default: no
hidefromdir=[yes|no]
Definiert, ob dieser Eintrag aus dem Dial-by-Name-Verzeichnis herausgenommen (versteckt) werden soll. Default: no

5. Telefonbuch (Dial-by-Name)

Auch wenn es eigentlich nicht unmittelbar mit der VoiceMail-Funktion von Asterisk zu tun hat, gehört das Dial-by-Name-Directory[104] sinngemäß in dieses Kapitel. Es wurde von den Asterisk-Entwicklern als Teil des Voicemailsystems programmiert und greift auf Daten der Datei voicemail.conf zu.

Wenn wir für das Beispiel in „Voicemailbox der Familie Meier“ die folgende Konfiguration zu Grunde legen:

[general]
format = gsm

[default]
; Ext. => Passw.,Vorname Nachname,E-Mail,P.,Optionen
;                ^^^^^^^^^^^^^^^^
200 => 1234,Horst Meier
201 => 1234,Eva Meier
202 => 1234,Peter Meier,peter@die-familie-meier.de
203 => 1234,Lisa Meier,lisa@die-familie-meier.de,,delete=yes

Dann können wir daraus recht einfach ein Dial-by-Name-Directory generieren. Dies geschieht durch Aufruf des Programmes Directory() in der extensions.conf:

exten => 800,1,Directory(default,from-intern)

Syntax

Directory(vm-context[,dial-context[,options]])
vm-context
Das Directory wird immer aus einem bestimmten Context generiert (alle Einträge aus diesem und nur diesem Context werden zur Auswahl gestellt). In den meisten Fällen kann man den default-Context nehmen. In großen Firmen kann man für bestimmte Abteilungen eigene Contexte definieren und somit Unter-Directories erstellen.
dial-context

Das Directory wird benutzt, um eine bestimmte Person anzurufen, entsprechend muss auch ein Context definiert werden, aus dem (in der extensions.conf) der Anruf geführt werden soll. Ist dial-context nicht definiert, wird automatisch der Context von vm-context benutzt.

Drückt der User des Systems die Taste 0 (Null), so wird er in diesem Context auf die Extension o (kleiner Buchstabe o) geleitet. Bei Eingabe des * (Stern) wird er zur Extension a (kleiner Buchstabe a) geleitet.

options
Mit der Option f kann man das Directory so einstellen, dass nach Vornamen und nicht nach Nachnamen gesucht wird.

Siehe auch Directory()

Funktionsweise

Der Anrufer wird vom Directory aufgefordert, die ersten 3 Buchstaben des Nachnamens (beim Aufruf mit der Option f, des Vornamens) mit dem Tastenfeld des Telefons einzugeben. Das Programm sucht dann den entsprechenden Eintrag aus dem Directory und verbindet den Anrufer auf Wunsch.

6. voicemail.conf als Passwortspeicher

Nicht nur als internes Rufnummernverzeichnis kann die voicemail.conf sehr nützlich sein, sondern auch als Speicherort für Passwörter. Sie werden vielleicht eine Situation haben, in der sich Ihre internen Benutzer aus welchem Grund auch immer am System authentifizieren sollen - ein konkreter Fall wären Call-Center-Agenten, die sich anmelden.

Es bietet sich in solchen Fällen manchmal an, für die betreffenden User einen Eintrag in der voicemail.conf anzulegen, obwohl diese vielleicht gar keine Mailbox brauchen. Und keine Angst: auf den so angelegten Mailboxen wird niemand versehentlich eine Nachricht hinterlassen können, solange Sie nicht im Dialplan mit VoiceMail() (oder VoiceMailMain()) darauf verweisen.

Sie könnten beispielsweise die Voicemail-Boxen

1001 => 1234,Hans Glueck,,,hidefromdir=yes
1002 => 1234,Peter Pech,,,hidefromdir=yes

im Abschnitt [call-center-agenten] anlegen und die User an geeigneter Stelle im Dialplan mit VMAuthenticate (VMAuthenticate()) dem System gegenüber authentifizieren:

exten => 988,n,Read(agentennr,agent-user,10,,3)
exten => 988,n,VMAuthenticate(${agentennr}@call-center-agenten)

Betrachten Sie das aber nur als Denkanstoß bzw. Beschreibung einer von vielen Möglichkeiten zur Authentifizierung. Eine Speicherung der Passwörter in der AstDB oder einer anderen Datenbank wäre diesem Ansatz in den häufigsten Fällen vorzuziehen.



[95] In diesem Buch wird das Wort Voicemailsystem oder kurz Voicemail benutzt anstelle von Anrufbeantworter. Ein „Anrufbeantworter“ ist nach allgemeinem Verständnis eher ein schwarzer Kasten mit einem Kassettenrekorder neben dem Telefon. Ein Voicemailsystem bietet viel mehr Möglichkeiten als ein Anrufbeantworter im herkömmlichen Sinne.

[96] Das Voicemailsystem wurde übrigens von den Asterisk-Entwicklern scherzhaft Comedian Voicemail genannt und meldet sich im englischen Original auch so.

[97] Falls Sie ein fertiges Asterisk-Paket verwenden, kann der Pfad z.B. auch /usr/share/asterisk/sounds/ sein.

[98] Textteil einer E-Mail

[99] Es muss alles in eine Zeile geschrieben werden. Durch \n wird in der E-Mail ein Zeilenumbruch eingefügt.

[100] Pfad abhängig von der Installation, z.B. auch /usr/share/asterisk/sounds/

[101] Es lässt sich selbst im Source-Code von Asterisk keine Information finden, in welchem Rahmen sich dieser Wert sinnvoll bewegen kann (es handelt sich um einen Int). Ggf. ist also Ausprobieren erforderlich.

[102] Beachten Sie, dass Sie eine wie hier beschrieben definierte Zeitzone noch für die User aktivieren müssen. Siehe „Mailbox-Definition“

[103] Bitte beachten Sie, dass diese Nachrichten ebenfalls E-Mails sind. Sollten Sie SMS-Nachrichten verschicken wollen, suchen Sie im Internet nach „sms gateway“ oder „asterisk sms gateway“.

[104] Anstelle des deutschen Wortes Verzeichnis verwenden wir der Einfachheit halber das englische Wort Directory.


Version 1.2, November 2002

Neue Version verfügbar

Sie betrachten gerade die alte Version des Buches (Version 1.0). Wir empfehlen Ihnen für Asterisk 1.4 und 1.6 die neue Version des Buches.

Asterisk-Tag 2008

Lernen Sie Mark Spencer (den Erfinder von Asterisk) kennen! Viele Vorträge, Case-Studies und Workshops rund um das Thema VoIP. Asterisk-Tag.org

Das gedruckte Buch

Werbung