Terminal KVM

wall < "asterisk: Mailbox einrichten und nutzen"

Broadcast message from spillerm@unixe.de (pts/1) (Mi Jun 25 11:38:32 2008):
4
Diesen Beitrag schrieb ich vor 10 Jahren. Behalte das beim Lesen bitte im Hinterkopf.

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 Spass… ;)

Jetzt implementieren wir die Mailbox für unseren Testuser mit der Rufnummer <1234>.

Der Inhalt von /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.

Der Inhalt der /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…

Der (überarbeitete) Inhalt von /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 eMail versendet wird — an die in /etc/asterisk/voicemail.conf hinterlegte eMail-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 Userverwaltung 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.

4
  1. Hallo localwurst! Ich weiss nicht was mich mehr begeistert, dein toller Beitrag über Asterisk (hier ist übrigens meiner: http://www.kammerath.net/asterisk-virtuelle-telefonanlage.html) oder die Tatsache, dass Du die Frauenquote in der männer-verseuchten Technik-landschaft erfreulich anhebst. Es war mir eine Freude einen Beitrag zu lesen! Vg, Jan

Keine weitere Reaktionen mehr möglich.