Wollmilchsau Server: 11. VBOX - Anrufbeantworter im Server
Kapitelübersicht:vbox ist ein - durchaus komfortabler - Anrufbeantworter unter Linux. Er bietet eine ganze Reihe von Optionen und Möglichkeiten, die man sonst nur schwer findet.
11.1. Voraussetzungen für die Installation
- ISDN4Linux muss installiert sein, VBOX setzt auf I4L auf..
- Für einige zusätzliche Anwendungen sollte das Paket sox installiert sein (Audio-Formatkonvertierung)
- tcl (bei den meisten Distributionen ohnehin in der Basisinstalltion).
Bei SuSE ist tcl standardmäßig installiert. Ebenfalls ist das eigentliche vbox-Paket installiert, es ist bei SuSE Bestandteil des ISDN4Linux. Eventuell muss vbox bei anderen Distributionen nachinstalliert werden.
11.2. Verzeichnisstruktur
vbox nutzt das Verzeichnis /var/spool/vbox. Hier wird für jeden User ein Verzeichnis angelegt. In dem Benutzerverzeichnis werden die Unterverzeichnisse incoming und messages abgelegt. (Incoming schreibt sich mit einem "m"! Das hat Nerven gekostet...;-))
- Anlegen der Verzeichnisse (<user> durch den Usernamen oder
gewünschten Verzeichnisnamen ersetzen):
mkdir /var/spool/vbox/<user> mkdir /var/spool/vbox/<user>/incoming mkdir /var/spool/vbox/<user>/messages
- Im Programmpaket vbox gibt es einige vorgefertigte Dateien. Bei
SuSE stehen diese in /usr/share/doc/packages/vbox/example. Folgende
Dateien muß man von dort in das Benutzerverzeichnis kopieren und dabei
das ".example" entfernen:
cp /usr/share/doc/packages/vbox/examples/vbox.conf.example /var/spool/vbox/<user>/vbox.conf cp /usr/share/doc/packages/vbox/examples/standard.tcl.example /var/spool/vbox/<user>/standard.tcl cp /usr/share/doc/packages/vbox/examples/standard.msg.example /var/spool/vbox/<user>/messages/standard.msg cp /usr/share/doc/packages/vbox/examples/beep.msg.example /var/spool/vbox/<user>/messages/beep.msg cp /usr/share/doc/packages/vbox/examples/timeout.msg.example /var/spool/vbox/<user>/messages/timeout.msg
- Die Dateien für globale Konfiguration und Zugriffsrechte müssen unter /etc/vbox abgelegt werden. Bei SuSE liegen sie bereits dort vor. Kompiliert man vbox selbst, kann dieser Pfad auch /etc/isdn heissen, SuSE scheint hier eingegriffen zu haben.
- Rechte setzen
Die Verzeichnisse und Dateien unterhalb von /var/spool/vbox müssen noch die korrekten Zugriffsrechte erhalten. Der User muss laut der vbox-Dokumentation nicht Mitglied der angegebenen Gruppe sein. Wichtiger: Der User "root" darf nicht verwendet werden, dies führt zu Meckermeldungen und Startverweigerungen.chown -R <user> /var/spool/vbox/<user> chgrp -R users /var/spool/vbox/<user> chmod -R 770 /var/spool/vbox/<user>
11.3. /var/spool/vbox/<user>/vbox.conf
Diese Datei hat folgende Funktionen:
- Nummer-zu Name Umwandlung
- Separate Ansagetexte pro Anrufer (wenn die Nummer übermittelt wird.)
- Zeitsteuerung
| vbox.conf |
# CALLERIDS # # Format: PATTERN SECTION REALNAME [CALLERIDS] 9317850413 STANDARD-OWNER Michael Herold 9317830022 - Nicole Sauvage * - *** Unknown *** |
In diesem Teil geht es um die Rufnummern-zu-Namen-Liste. Sie
können hier bestimmte Rufnummern mit bestimmten Ansagen verbinden (Ein
Schelm, wer an die böse Schwiegermutter denkt...)
Die erste Spalte beinhaltet die Rufnummer, die erkannt werden soll. In
der zweiten Spalte kann eine interne Sektion in der vbox.conf
angegeben werden, in der Zeiten und Texte angegeben sind. Wird diese Angabe
weggelassen (statt dessen ein -), gilt die Standardansage (Siehe STANDARD
unter USERSECTIONS). In der letzten Spalte steht schliesslich der
Klartextname des Anrufers.
Wichtig ist die dritte Zeile mit dem "*". Es gilt - wie so oft - dass
die erste zutreffende Regel genutzt wird. Diese letzte Zeile "erwischt" nun
alle Anrufer, die nicht durch vorherige Zeilen abgehandelt werden
konnten. Diese Zeile muss also immer vorhanden sein. Sind mehrere Zeilen
angegeben, muss sie als letzte Zeile stehen. Die Zeile STANDARD-OWNER
bezeichnet hier auch die Rufnummer des angerufenen Anschlusses, also die
eigene Rufnummer.
# RINGS # # Format: TIME DAYS RINGS [RINGS] 23:30-23:59,00:00-08:59 * 1 * * 6Der Abschnitt RINGS gibt die Standardvorgaben für die Anzahl der Klingelzeichen an. In der ersten Zeile werden die Uhrzeiten 23:30 bis 23:59 und 00:00-08:59 an allen Tagen (das "*") auf ein Klingelzeichen eingestellt, der Anrufbeantworter hebt sofort ab. Zu allen anderen Zeiten wird vbox erst beim sechsten Klingeln aktiv. Auch hier muss die Zeile mit dem "*" am Anfang als letzte stehen und vorhanden sein, siehe oben.
# [USERSECTIONS] # # Format: TIME DAYS STANDARD RECTIME [FLAG] [...] [STANDARD] 20:15-22:14 DO aktex.msg 60 RINGS=1 * * standard.msg 90 RINGS=3 TOLLRINGS=4 [STANDARD-OWNER] * * standard.msg 120 RINGS=99Hier sind zwei Einstellungen vorgegeben: STANDARD (gilt für alle nicht identifizierten Anrufer).
Von 20:15 - 22.14 an jedem Donnerstag wird der Ansagetext "aktex.msg" verwendet. Die Aufzeichnungsdauer beträgt 60 Sekunden, der Anrufbeantworter hebt sofort beim ersten Klingeln ab. Zu allen anderen Zeiten wird die Standardansage verwendet, Aufzeichnungsdauer 90 Sekunden, Abnehmen nach dem dritten Klingelsignal.
Als zweiter Eintrag gibts den "STANDARD-OWNER". Dieser wird nur bei einer bestimmten Rufnummer aktiv (siehe oben, Sektion CALLERIDS). Er bekommt die Standardansage mit 120 Sekunden Aufzeichnungsdauer und 99 Klingelzeichen (was in der Praxis niemals erreicht wird).
11.4. /etc/vbox/vboxd.conf
Die vboxd.conf steuert die Zugriffsrechte, die User auf
vbox-Dateien haben.
Wird der vboxd - daemon gestartet, prüft er diese
Listen auf Zugriffserlaubnis des aufrufenden Hosts bzw des Users.
| vboxd.conf |
# Login access list # # All hosts in the login access list (begins with 'L') are checked at # login (server startup) time. If access is 'yes' the host can login # and count messages without special access. L:localhost:Y L:*:N # Full access list # # All hosts in the full access list (begins with 'A') are checked if the # server gets the 'login' command. A:localhost:RW:michael:xxx:/var/spool/vbox/michael:incoming A:localhost:RW:nicole:xxx:/var/spool/vbox/nicole:incoming A:*:!:!:!:!:! |
Für meine Zwecke im Testsystem wird diese Datei nicht weiter verändert, lediglich die Userzeilen ("A:localhost...") werden auskommentiert. Sie ermöglichen den direkten Zugriff auf die Soundfiles, in denen der Anrufer sich verewigt. Ich fand diese Lösung nicht so praktisch und habe eine andere gefunden: Statt einer Mailbenachrichtigung versende ich das Soundfile gleich als Mail-Attachment.
11.5. vboxgetty.conf / inittab
Die Datei vboxgetty.conf steuert die globalen Parameter des Programms sowie die Zuordnung der lokalen MSN zu bestimmten Systembenutzern.
| vboxgetty.conf |
#-------------------------------------------------------------------------- # This is an example for 'vboxgetty.conf'. Please read the documentation for # a complete description of the commands! #-------------------------------------------------------------------------- # Global settings for all ports compression adpcm-4 umask 077 badinitsexit 10 dropdtrtime 400 initpause 2500 commandtimeout 4 echotimeout 4 ringtimeout 6 alivetimeout 1800 freespace 2000000 debuglevel FEWIDJ |
Dies sind allgemeine Einstellungen für vbox. Als Compression-Type
ist standardmäßig ADPCM-4 vorgesehen.
Auch die übrigen Werte entsprechen Standardvorgaben und brauchen
zunächst nicht geändert werden. Die Einstellung "debuglevel" wird
man früher oder später auf einen geringeren Level zurückfahren, wenn
das System kommentarlos läuft. Der Standardwert schreibt ein sehr
ausführliches Protokoll, das schnell grössere Dimensionen annimmt.
# Settings for port ttyI6
port /dev/ttyI6
modeminit ATZ&B512&E46
user administrator
group users
spooldir /var/spool/vbox/administrator
# Settings for port ttyI7
port /dev/ttyI7
modeminit ATZ&B512&E7850413
user michael
group users
spooldir /var/spool/vbox/michael
Es hat sich eingebürgert, als Schnittstelle die Port ttyI6
und Folgende zu verwenden. Jedem Port wird eine MSN zugeordnet.
Dazu gehört immer ein User, eine Gruppe, und das Verzeichnis
des Users. Wichtig: im String
modeminit: ATZ&B512&Exxxxxxmuss anstelle des xxxxxx die MSN eingetragen werden!
Wenn vbox an einen internen S0-Anschluß einer TK-Anlage angehängt wurde, muss man eventuell folgendes beachten: TK-Anlagen setzen in aller Regel eine Rufnummer (externe MSN) per Zuordnungsliste auf die Nebenstellenummer (interne MSN) um. In diesem Fall muss die Nebenstellennummer als MSN eingetragen werden. Die übrigen Angaben im modeminit-String: ATZ sorgt für einen Modem-Reset, &B512 stellt die Blockgröße ein. Diese Angaben können übernommen werden.
11.6. Modifikationen
vbox besteht aus einer Reihe recht einfacher Scripten, die gut
anpassbar sind. Der Ablauf bei einem Anruf ist für jeden User einzeln
steuerbar, dies erledigt die Datei /var/spool/vbox/<use>/standard.tcl.
Diese ruft weitere Scripte auf, die die eigentlichen Funktionen steuern.
Folgende hier genutzte Möglichkeit als Beispiel:
Erfolgt ein Anruf, wird normalerweise eine Mailbenachrichtigung verschickt. Ich möchte die Nachricht gleich als .wav-Datei angehängt haben, der Server soll nach Versand der Datei gleich aufräumen (keine Speicherung der Sounddateien).Hierfür wird SOX benötigt, ein universelles Konvertierungsprogramm zum Umsetzen von Soundformaten.
Das dafür zuständige Script findet sich in /usr/bin/vboxmail.
Die Originaldatei wurde nach vboxmail.org verschoben mit
>> mv /usr/bin/vboxmail /usr/bin/vboxmail.orgund durch die unten abgebildete Version ersetzt. Sie stammt ursprünglich von Jan F. Westerkamp und wurde lediglich für den Mehruserbetrieb umgeschrieben
| vbxomail.org |
#! /bin/sh
##
#----------------------------------------------------------------------------#
# Usage: vboxmail MESSAGENAME CALLERNAME CALLERID MAIL-TO-ADDRESS #
#----------------------------------------------------------------------------#
# Script basiert auf einer Version von Jan F. Westerkamp / SuSE-ISDN-List. Thx.
#
# Anpassungen für Mehruser-System und geänderte Filenames
#
MSNAME="${1}"
CALLER="${2}"
CALLID="${3}"
MAILADDR="${4}"
SENDMAIL='/usr/sbin/sendmail'
SOX='/usr/bin/sox'
VBOXMODE='/usr/bin/vboxmode'
VBOXTOAU='/usr/bin/vboxtoau'
RECODE='/usr/bin/recode'
CAT='/bin/cat'
if (test -f "${MSNAME}")
then
# Zuerst nach au
$VBOXTOAU < $MSNAME > $MSNAME.au
# Dann nach wav
$SOX $MSNAME.au $MSNAME.wav
$RECODE data..base64 $MSNAME.wav
# Mail zusammenbasteln
(MIMEBOUNDARY="NextPart$$"
echo "Mime-Version: 1.0"
echo "Content-Type: Multipart/Mixed; Boundary=\"$MIMEBOUNDARY\""
echo "To: $MAILADDR"
echo "From: Anrufbeantworter <vbox>"
echo "Subject: neuer Anruf"
# echo "Subject: Anruf von $CALLER ($CALLID)"
echo ""
echo "--$MIMEBOUNDARY"
echo "Content-Type: text/plain; charset=US-ASCII"
echo ""
echo "Hallo, Du hast einen Anruf erhalten:"
$VBOXMODE $MSNAME
echo ""
echo "--$MIMEBOUNDARY"
echo "Content-Type: audio/x-wav; name=$MSNAME.wav"
echo "Content-Description: Audio-File (wav)"
echo "Content-Transfer-Encoding: base64"
echo "Content-Disposition: attachment; filename=vbox.wav"
echo ""
$CAT $MSNAME.wav 2>/dev/null
echo ""
echo ""
echo "--$MIMEBOUNDARY--"
) | 2>&1 $SENDMAIL -froot -oi $MAILADDR
rm $MSNAME.wav
rm $MSNAME.au
rm $MSNAME
fi
# Ende
|
Das Script übernimmt die Parameter, die von /var/spool/vbox/<user>/standard.tcl
übermittelt werden. Zunächst wird der Anruf per vboxtoau in das
Sun-Audioformat übertragen. Mit sox wird anschließend in das
wav-Format umgewandelt. Das Script stellt nun den Mailheader und die Mail
zusammen und übergibt das Ganze an sendmail (oder ein anderes Programm
mit Sendmailaufruf.) Wer andere Soundformate haben will oder benötigt,
kann das Script recht einfach "umstricken", die Funktionen sind nicht
schwierig zu erkennen.
Diese Lösung hat einen ganz sinnvollen Vorzug: Anrufe werden als Mail ohne
weiteres z.B. an eine Urlaubsvertretung weitergeschickt. Es erspart dann im
Zweifel eine weitere Rechtevergabe oder ähnliche Urlaubs - "Umbauten",
um evtl. Anrufe abarbeiten zu können.
11.7. Automatisch starten
In der Datei /etc/inittab müssen die Zeilen
I6:35:respawn:/usr/sbin/vboxgetty -d /dev/ttyI6
I7:35:respawn:/usr/sbin/vboxgetty -d /dev/ttyI7
eingetragen bzw. bei SuSE entkommentiert werden. Damit startet vbox
automatisch beim Booten des PCs.In der Datei /etc/inetd.conf muss die Zeile
vboxd stream tcp nowait root /usr/bin/tcps in.midinetd
eingetragen bzw. entkommentiert werden. vboxd wird über inetd
aufgerufen, ohne diese Zeile startet der Daemon nicht.Nach dem nächsten Neustart ist vbox aktiv. Bei Problemen ist es recht nützlich, sich die Logdatei mit
>> tail -f /var/log/vbox/vboxgetty-ttyIx.loganzuzeigen und einen Anruf zu starten. Das Log ist informativ, die Fehleraussagen gut zu deuten.
11.8. Gängige Probleme
Die erste Falle: Bei der hier verwendeten SuSE 7.3 ist die Datei
standard.msg zerschossen, die Dateilänge beträgt null Byte.
vbox erkennt
dies und bricht bei einem Anruf ab. Der Versuch, vbox von einer SuSE 7.1 zu
verwenden, erbrachte dasselbe Ergebnis.
Abhilfe: Die Datei timeout.msg nach standard.msg
kopieren, dann auf dem Anrufbeantworter anrufen und eine eigene Ansage aufsprechen.
Die Datei aus /var/spool/vbox/<user>/incoming nach
/var/spool/vbox/<user>/messages/standard.msg kopieren. Wenn
Sie das o.a. Script verwenden, müssen Sie die letzte Zeile "rm $MSNAME"
solange auskommentieren, sonst löscht das Script die Sounddatei im vbox-Format
sofort wieder.
Ein weiteres Problem: Der Anrufbeantworter reagiert nicht und hebt
nicht ab.
In den meisten Fällen ist die Einwahl blockiert. Dies können Sie im YaST
(Hardware ins System integrieren -> ISDN-Karte -> ISDN-Parameter)
ändern.
Wer seinen Kernel selbst übersetzt, sollte beachten, dass die Audio-Unterstützung für ISDN aktiviert werden muss. Bei den meisten gängigen Standard-Kerneln der Distributoren ist dies der Fall.
vbox wurde bei mir mit dem AVM-CAPI4Linux-Treiber getestet, die beiden vertragen sich problemlos. ISDN4Linux muss allerdings bei Installation der AVM-CAPI bereits installiert und konfiguriert sein. Als Mailer nutze ich postfix anstelle von sendmail, auch dies arbeitet ohne Probleme.
Talkback Area
Enter Own Comment