LINUXMAKER, OpenSource, Tutorials

VoicemailBox

voicemail.conf

Eine Telefonanlage ohne intelligentes VoicemailBox-System wäre heute keine richtige Telefonanlage. Deshalb sind hier Beispielkonfigurationen abgebildet, wie sich das VoicemailBox-System unterschiedlich nutzen lässt. Zunächst werden dazu VoicemailBoxen für die Nutzer benötigt. Diese werden über die Datei voicemail.conf generiert.

Anbei ist eine funktionierende voicemail.conf mit zwei Voicemailboxen „5201“ und „5202“ dargestellt.

[general]
format=wav
serveremail=info@example.com
attach=yes
maxmsg=200
maxsecs=300
skipms=3000
maxsilence=10
silencethreshold=128


maxlogins=3 emailsubject=[PBX]: Neue Nachricht von ${VM_CALLERID} in Mailbox ${VM_MAILBOX}
emailbody=Guten Tag ${VM_NAME},\n\nEine neue Voicemail von (${VM_CALLERID})\nist fuer Sie eingegangen.\n\nDie Voicemail erreichte Sie auf der Durchwahl: ${VM_MAILBOX}.\nDatum: ${VM_DATE}\nDauer: ${VM_DUR}\n\nSie finden die Voicemail im Anhang dieser Email.\n\nEs befinden sich jetzt ${VM_MSGNUM} neue Voicemails in Ihrer Mailbox.\n\n---\nDies ist eine automatisierte Nachricht. Bitte antworten Sie nicht auf diese eMail.\n\nAsterisk auf raspberrypi-asterisk
emaildateformat=%A, %d %B %Y, %H:%M:%S
pagerdateformat=%A, %B %d, %Y at %r [zonemessages]
eastern=America/New_York|'vm-received' Q 'digits/at' Imp
central=America/Chicago|'vm-received' Q 'digits/at' Imp
central24=America/Chicago|'vm-received' q 'digits/at' H N 'hours'
military=Zulu|'vm-received' q 'digits/at' H N 'hours' 'phonetic/z_p'
european=Europe/Berlin|'vm-received' a d b 'digits/at' HM [default]
1234 => 4242,Example Mailbox,root@localhost [other]
1234 => 5678,Company2 User,root@localhost [Own-Label]
5202 => secretPassword,Name, user1@example.com,,attachfmt=wav
5201 => secretPassword,Name, user2@example.com,,attachfmt=wav

Die Mailadressen sollten in jedem Fall an die eigenen Bedürfnisse angepasst werden, genauso wie die Texte für emaisubject und emailbody. Allerdings liefert dies bei Eingang einer Nachricht auf der VoiceBox eine informierende Mail mit der Sprachnachricht an den Inhaber der VoiceBox. Unter „Own-Label“ werden der Reihe nach eine Voicebox angelegt, idealerweise als Teilnummer der Originalrufnummer. Dann folgt ein Password oder eine PIN, der Name und die Mailadresse des Nutzers. Der Rest kann wieder übernommen werden.

Individuelle Ansagen und Schaltungen

Zunächst lassen sich mit Audacity ganz leicht eigene Sprachdateien aufnehmen und zusammenschneiden – zum Beispiel mit Hintergrundmusik – und als WAV-Datei abspeichern. Diese WAV-Dateien sollten dann nur noch in ein für Asterisk kompatibles WAV-Format transformiert werden:

sox WAV-Datei -r 8000 -c 1 -e signed-integer Asterisk-WAV-Datei -q

Danach wird diese neue WAV-Datei nach „/var/lib/asterisk/sounds/de“ auf dem Asterisk-Server kopiert, wenn es sich um deutschsprachige Dateien handelt, ansonsten in das äquivalente Sprachverzeichnis.
Uhrzeit- und tageszeitabhängiger Dialplan

Folgendes Szenario ist gewünscht:
Man möchte bei Abwesenheit – funktioniert auch bei dem Status Besetzt – je nach Tageszeit eine andere Begrüßung wie „Guten Morgen“, „Guten Tag“ oder „Leider rufen Sie außerhalb unserer Bürozeiten an“ anbieten. Das lässt sich über eine entsprechende Gestaltung des Dialplans erreichen.
Bei dieser Gelegenheit sei noch gefordert, dass zwei Telefone gleichzeitig klingeln. Zum Beispiel man hat neben dem Hardware-Telefon auch noch ein SIP-Telefon als Zoiper-Client auf dem Desktop oder Smartphone installiert.

/etc/asterisk/extension.conf

[telekom_in]
include => morning-closed,0:00-7:59,mon-fri;*,*
include => morning,08:00-9:59,mon-fri;*,*
include => day,10:00-17:29,mon-fri;*,*
include => evening,17:30-17:59,mon-fri;*,*
include => evening-closed,18:00-20:59,mon-fri;*,*
include => night,21:00-5:59,mon-fri;*,*
include => weekend-morning,06:00-9:59,sat-sun;*,*
include => weekend-day,10:00-17:29,sat-sun;*,*
include => weekend-evening,17:30-20:59,sat-sun;*,*
include => weekend-night,21:00-5:59,sat-sun;*,*
include => morning
include => day
include => evening
include => evening-closed

[morning-closed]
exten => 021156215202,1,GotoIf($[${DEVICE_STATE(PJSIP/15202)}=UNAVAILABLE]?unavail15202)
 same => n,GotoIfTime(0:00-7:59,mon-fri,*,*?unavail15202)
 same => n,Dial(PJSIP/15202&PJSIP/6002,1)
 same => n(unavail15202),Playback(Closed-Morgen)
 same => n,VoiceMail(5202@voicebox2,s)
 same => n,Hangup()

[day]
exten => 021156215202,1,GotoIf($[${DEVICE_STATE(PJSIP/15202)}=UNAVAILABLE]?unavail15202
….

Man definiert in dem Abschnitt für eingehende Gespräche – hier [telekom_in] – neue Abschnitte, die unter bestimmten zeitlichen Bedingungen angesteuert werden - include => morning-closed,0:00-7:59,mon-fri;*,* - und legt diese neuen Abschnitte [morning-closed] mit den entsprechenden Regeln an.

Mit GotoIf() lassen dann Bedingungen mit Verzweigungen generieren. Die erste Zeile nach [morning-closed] prüft zuerst, ob das Telefon mit der ID 15202 überhaupt angemeldet und somit erreichbar ist. Wenn es nicht erreichbar ist, dann springt es zu dem Label unavail15202, das weiter unten direkt nach der Priorität n eingefügt ist und macht dort im Ablauf weiter. Bei einer Erreichbarkeit würde die Asterisk-PBX die zweite GotoIf()-Funktion prüfen, ob die Zeitspanne zutrifft. Wenn dies positiv beantwortet wird, folgt wieder ein Sprung zu dem angegebenen Label, andernfalls klingeln (Dial()) das Hardware-Telefon 15202 und das zweite Telefon mit der Definition 6002, zum Beispiel ein Zoiper-Client auf dem Desktop oder dem Smartphone, wenn aktiv. Lässt man jetzt die Zeile mit VoiceMail() weg, dann würde man eine typische Ansageschleife erhalten, bis der Anrufende wieder auflegt. Auf diese Art und Weise lassen sich auch bequem automatische Ansage- und Anrufbeantworter generieren für die Feiertage und Urlaubszeiten.

exten => 021156215202,1,GotoIf($[${DEVICE_STATE(PJSIP/15202)}=UNAVAILABLE]?unavail15202)
  same => n,Dial(PJSIP/15202&PJSIP/6001,20,m[To_of_us])
  same => n(unavail15202),GotoIfTime(8:00-9:59,*,6,jan?holiday1) ;Neujahr
  same => n(unavail15202),GotoIfTime(8:00-9:59,*,31,mar?holiday1) ;Karfreitag
  same => n(unavail15202),GotoIfTime(8:00-9:59,*,1,apr?holiday1) ;Ostersonntag
  same => n(unavail15202),GotoIfTime(8:00-9:59,*,2,apr?holiday1) ;Ostermontag
  same => n(unavail15202),GotoIfTime(8:00-9:59,*,1,may?holiday1) ;1.Mai
  same => n(unavail15202),GotoIfTime(8:00-9:59,*,25,may?holiday1) ;Himmelfahrt
  same => n(unavail15202),GotoIfTime(8:00-9:59,*,5,jun?holiday1) ;Pfingstenmontag
  same => n(unavail15202),GotoIfTime(8:00-9:59,*,15,jun?holiday1) ;Fronleichnam
  same => n(unavail15202),GotoIfTime(8:00-9:59,*,3,oct?holiday1) ;Deutsche Einheit
  same => n(unavail15202),GotoIfTime(8:00-9:59,*,31,oct?holiday1) ;Reformationstag
  same => n(unavail15202),GotoIfTime(8:00-9:59,*,1,nov?holiday1) ;Allerheiligen
  same => n(unavail15202),GotoIfTime(8:00-9:59,*,25,dec?holiday1) ;Weihnachten
  same => n(unavail15202),GotoIfTime(8:00-9:59,*,26,dec?holiday1) ;Weihnachten
  same => n(unavail15202),GotoIfTime(8:00-9:59,*,1-14,jul?holidays) ;Urlaub
  same => n(holiday1),Playback(Holiday-Morgen)
  same => n(holidays),Playback(Urlaub-Morgen)
  same => n,VoiceMail(5202@voicebox2,s)
  same => n,Hangup()

Freizeichen gegen individuelle Musik austauschen

Das typische Freizeichen beim Klingeln lässt sich ebenfalls durch eine Kleinigkeit austauschen.

Dial(PJSIP/15202&PJSIP/6001,20,m[To_of_us])

Der Parameter m[] nach der Anzahl der Klingelzeichen hier 20, verweist auf eine WAV-Datei hier „To_of_us.wav“, die statt des Klingelzeichens abgespielt wird. Der Fantasie sind hier tatsächlich keine Grenzen gesetzt.