Skip to content

Voicemail und Weiterleitungen in Asterisk 11.14.1 und Ubuntu Server 12.04

In meinem Betrieb sowie bei einigen Kunden wird das Telefon durch eine Asterisk-basierende ISDN Telefonanlage gemanaged, in diesem Falle eine Gerdes Primux 2s0 ISDN-Karte via DAHDI auf einem Ubuntu Server 12.04 32bit Kernel 3.13.0. Benutzte Endgeräte sind Hardphones (Gigasets/Grandstreams) sowie Softphones (linphone).

Um Anrufe besser zu verteilen sollte eine Warteschleife eingerichtet werden, welche bei einem Anruf auf der 0 (Zentrale) 3 andere Telefone klingeln lässt. Falls nach 40 Sekunden kein Gerät abhebt, geht eine Mailbox an. Desweiteren soll jeder SIP-Account (bei uns auch gleichbedeutend mit einer Durchwahl) eine Mailbox erhalten, welche nach 40 Sekunden eine Ansage abspielt und eine Aufnahme der hinterlassenen Nachricht mitsamt Metadaten an eine Mailadresse schickt.

Teil 1 – Die Voicemail

In der “voicemail.conf” die von Asterisk generiert wird Werte zum Mailversand etc. nach Bedarf anpassen. Diese selbst ist gut Dokumentiert. Die einzelnen Boxen werden im Kontext “default” folgendermaßen eingerichtet:

[default]
 0 => 1234,Mailbox Zentrale,zentrale@company.de,attach=yes
 1 => 1234,Mailbox Name1,mail1@company.de,attach=yes
 2 => 1234,Mailbox Name2,mail2@company.de,attach=yes
 3 => 1234,Mailbox Name3,mail3@company.de,attach=yes
 4 => 1234,Mailbox Name4,mail4@company.de,attach=yes

Die Zeile setzt sich wiefolgt zusammen: “Mailboxnummer => Mailboxpasswort,Mailboxname,Emfpängeremail,Optionen”. Die vollständigen Konfigurationsmöglichkeiten sind in der “voicemail.conf” gut dokumentiert, in diesem Fall sorgt “attach=yes” für den Anhang der Aufnahme an die Mail. Die Boxen genau wie ihre SIP-counterparts zu benennen wird sich später im Dialplan als sehr praktisch erweisen.

Teil 2 – Der Dialplan

Zuerst die Weiterleitungsschleife – hierbei wird die SIP/0 bzw 227****0 angerufen (227 gehört zum Rufnummernblock der hier aus 1000 Gründen leicht zensiert ist), der Anruf lässt die Geräte 1,3 und 4 klingeln. Zudem soll nach 40 Sekunden eine Nachricht hinterlassen werden können. Dazu wird in der “extensions.conf” – in diesem Fall im Kontext [intern] folgendes hinterlegt:

exten => _227****0,1,AGI(ldaplookup.agi,${CALLERID(num)})
 exten => _227****0,n,Answer
 exten => _227****0,n,Dial(SIP/1&SIP/3&SIP/4&SIP/1,40,tT)
 exten => _227****0,n,VoiceMail(0,us)
 exten => _227****0,n,Hangup()

In der ersten Zeile wird ein Lookupscript aufgerufen, welche die Rufnummer des Anrufers mit einem LDAP abgleicht, dazu vielleicht in einem späteren Posting mehr. Danach antwortet die Anlage, stellt die Anrufe an die SIP/1, /3 und /4 durch und lässt diese 40 Sekunden klingeln. Danach wird via VoiceMail(0,us) die Voicemail “0” mit den Parametern “u” und “s” aufgerufen – diese stehen für die “unavailable”-Ansage sowie “skipping” um die Standardansage zu überspringen und nur die eigene abzuspielen, dazu jedoch in Teil 3 mehr.

Die anderen Durchwahlen werden nach dem gleichen Prinzip angesteuert – die Endziffern vom Nummernblock entsprechen den SIP-Accounts:

exten => _227****[1-8],1,AGI(ldaplookup.agi,${CALLERID(num)})
 exten => _227****[1-8],n,Set(CALLERID(num)=0${CALLERID(num)})
 exten => _227****[1-8],n,Answer
 exten => _227****[1-8],n,Dial(SIP/${EXTEN:-1},40,tT)
 exten => _227****[1-8],n,VoiceMail(${EXTEN:-1},us)
 exten => _227****[1-8],n,Hangup()

Der interessante Teil ist das “${EXTEN:-1}” – dieser sorgt dafür, dass die letzte Ziffer der Rufnummer extrahiert und benutzt wird um das entsprechende SIP-Gerät anzusprechen. Der Rest verhält sich wie im vorherigen Snippet.

Teil 3 – Eigene Ansagen

Asterisk hat von Haus aus modulare Ansagen in Petto, welche jedoch in unserem Fall nicht ausreichend waren. Um sich viel Codierung zu ersparen gibt es die Möglichkeit direkt per Telefon eine Ansage aufzunehmen welche auf dem Server gespeichert wird. Diese ist dann direkt im .gsm Format und kann kopiert werden. In diesem Fall stammt das Snippet von http://limedaley.com/post/asterisk-recording-custom-sound-files – vielen Dank an dieser Stelle.

exten = 500,1,Wait(.5)
 exten = 500,n,Playback(dictate/record)
 exten = 500,n,Playback(then-press-pound)
 exten = 500,n,Set(record-time=${STRFTIME(${EPOCH},,%m%d-%H%M%S)})
 exten = 500,n,Record(/var/lib/asterisk/sounds/custom/asterisk-recording-${record-time}:gsm)
 exten = 500,n,Wait(1)
 exten = 500,n,Playback(/var/lib/asterisk/sounds/custom/asterisk-recording-${record-time})
 exten = 500,n,Playback(thank-you-for-calling)
 exten = 500,n,Hangup

Wenn nun die 500 intern angerufen wird wird nach dem Beep aufgenommen bis die #-Taste gedrückt wird. Danach liegt das File in “/var/lib/asterisk/sounds/custom. Diese Datei  mit “cp soundfile.gsm /var/spool/asterisk/voicemail/default/*MAILBOXNAMEODERNUMMER*/unavail.gsm” kopieren. Dies muss für jede angelegte Mailbox manuell vorgenommen werden. Danach spielt Asterisk die Ansage beim Anruf ab. C’est ca!

 

Published insysadmin

Be First to Comment

Leave a Reply

Your email address will not be published. Required fields are marked *