Anrufbeantworter unter Linux mit Vbox
Mit Vbox, eine Sammlung von Programmen, kann ein mehrbenutzerfähiger Anrufbeantworter auf Basis einer von Linux
unterstützen ISDN-Karte aufgebaut werden.
Die besonderen Leistungsmerkmale liegen in der Möglichkeit, verschiedene MSN´s wahlweise unterschiedlichen Benutzern
zuzuordnen, so daß mehrere Benutzer eines Systems Nachrichten empfangen können. Zudem bietet Vbox dem Benutzer eine
hohe Flexibilität, z.B. ist es möglich für unterschiedliche Anrufer unterschiedliche Ansagetexte abzuspielen oder zu
unterschiedlichen Zeiten unterschiedliche Ansagetexte zu verwenden.
Vbox ist Teil es I4L-Pakets und gehört zu den sog. ISDN-Utilities (isdn4k-util). Die neueste Version kann jederzeit
unter ftp://ftp.franken.de/pub/isdn4linux heruntergeladen werden. Besser ist es jedoch, die auf der jeweiligen Linux-Distribution enthaltenen Pakete zu verwenden, da diese aufeinander
abgestimmt sind.
In diesem HowTo soll zusätzlich zum eigentlichen Anrufbeantworter noch beschrieben werden, wie der Anruf in eine MP3-Datei umgewandelt und an einen User im LAN per Mail versendet werden kann.
(Damit Ihr nicht alle Scripte mühsam abtippen müsst, könnt Ihr diese am Ende dieser Seite als ZIP-Datei downloaden).
Vorraussetzungen:
Linux (in diesem Fall wird von SuSE ausgegangen).
1 PC mit konfiguriertem ISDN Anschluss.
installiertes I4L-Paket.
Konfiguriertes Sendmail (wird in diesem HowTo nicht behandelt s.
Mailserver einrichten).
Manuelle Konfiguration:
Zunächst sollte die Datei vboxgetty.conf in /etc/vbox/vboxgetty.conf editiert werden (zu editierende Parameter sind fett hervorgehoben).
# Global settings for all ports
compresson adpcm-4
umask 077
badinitsexit 10
droptrtime 400
initpause 2500
commandtimeout 4
echotimeout 4
ringtimeout 6
alivetimeout 1800
freespace 2000000
debuglevel FEWIDj
# Settings for Port ttyI6
port /dev/ttyI6
modeminit ATZ&B512&EMSN
user user01
group users
spooldir /var/spool/vbox/user01
Erklärung:
Für Globale Variablen hier klicken.
Für Port-spezifische Angaben hier klicken.
Erstellen der Datei /etc/vbox/vboxd.conf (zu editierende Parameter sind fett hervorgehoben):
# 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:*:RW:user01:password:/var/spool/vbox/user01:incoming
A:*:!:!:!:!:!
Erstellen der Benutzerverzeichnisse und Anpassung der Benutzerdatei:
Mit der benutzerspezifischen Datei /var/spool/vbox/user/vbox.conf wird das Verhalten von vboxgetty für eingehende Anrufe festgelegt. In dieser Datei kann angegeben werden, wann und wie ein Anruf beantwortet werden soll.
Zunächst aber müssen alle für Vbox-User relevanten Verzeichnisse unter /var/spool/vbox/ angelegt und den jeweiligen Usern mit "chown" übertragen werden. Der Einfachheit halber legen wir aber gleich auch noch die entsprechenden Unterverzeichnisse für Ansagen und eingehende Anrufe mit an. Angenommen der Anrufbeantworter soll für den Benutzer user01 eingerichtet werden, so sind folgende Schritte notwendig:
root@erde:/root # cd /var/spool/vbox
root@erde:/var/spool/vbox # mkdir user01
root@erde:/var/spool/vbox # chown user01 user01
root@erde:/var/spool/vbox # chmod 700 user01
root@erde:/var/spool/vbox # ls -l
drwx------ 4 user01 root 1024 Okt 04 10:51 user01
root@erde:/var/spool/vbox # cd user01
root@erde:/var/spool/vbox/user01 # mkdir messages
root@erde:/var/spool/vbox/user01 # mkdir incoming
root@erde:/var/spool/vbox/user01 # chown user01 messages incoming
root@erde:/var/spool/vbox/user01 # chmod 700 messages incoming
root@erde:/var/spool/vbox/user01 # ls -l
drwx------ 4 user01 root 1024 Okt 04 10:51 .
drwxr-xr-x 4 root root 1024 Okt 04 10:51 ..
drwx------ 4 user01 root 1024 Okt 04 10:51 incoming
drwx------ 4 user01 root 1024 Okt 04 10:51 messages
Nun können wir unter /var/spool/vbox/user01 die Datei vbox.conf anlegen.
Die Datei sollte z.B. folgenden Inhalt haben:
# CALLERIDS
#
# Format: PATTERN SECTION REALNAME
[CALLERIDS]
88956 INTERN Schnurlos
7351189688 GBRIEGEL Guenter Briegel
* - *** Unknown ***
# RINGS
#
# Format: TIME DAYS RINGS
[RINGS]
* * 3
# [USERSECTIONS]
#
# Format: TIME DAYS STANDARD RECTIME [FLAG] [...]
[STANDARD]
* * standard.msg 60 RINGS=10
[GBRIEGEL]
* * gbriegel.msg 30 RINGS=10
Erklärung:
Für Variablen hier klicken.
Anpasssung der Datei /etc/inetd.conf für vbox:
Damit vboxd verwendet werden kann, muß als Benutzer root ein entsprechender Eintrag in den Dateien /etc/services und /etc/inetd.conf vorgenommen werden.
Für die Datei /etc/services muß folgende Zeile eingetragen werden (falls nicht schon enthalten):
vboxd 20012/tcp # for vbox daemon
Entsprechend muß in der Datei /etc/inetd.conf folgender Eintrag vorgenommen werden:
# vbox (Voice Box)
vboxd stream tcp nowait root /usr/bin/tcpd /usr/sbin/vboxd
Anschließend muß dem Prozeß inetd ein HUP-Signal gesendet werden, damit er die veränderte Konfiguration neu einliest:
root@erde:/root # killall -HUP inetd
Erstellen der Ansagen:
Zum Betrieb der Vbox sind verschiedene Nachrichten erforderlich, die im speziellen Vbox-Format vorliegen müssen. Informationen zu diesem Format stehen in der Manual-Seite von vbox. Die Dateien müssen alle in das Benutzerverzeichnis unter /var/spool/vbox/user/messages/ kopiert werden.
Eine einfache Möglichkeit der Erstellung solcher Ansagen ist, sich selber anzurufen und die von vboxgetty aufgezeichnete Nachricht entsprechend umzubennen und in das messages-Verzeichnis zu kopieren.
Notwendige Ansagen:
standard.msg
| Die Standardansage
|
beep.msg
| Der Piep-Ton, der nach einer Ansage abgespielt wird.
|
timeout.msg
| Die Ansage, die abgespielt wird, wenn der Anrufer die max. Aufnahmedauer für eine Nachricht erreicht hat.
|
Editieren des Verbeitungsskripts standard.tcl
Die Arbeit des Anrufbeantworters nach der Annahme des Anrufs wird von dem Skript standard.tcl gesteuert, das sich im Verzeichnis /var/spool/vbox/user/ befinden muss. Grundsätzlich kann dieses Skript an eigene Bedürfnisse angepasst werden, doch für einen normalen Betrieb müssen an dieser Datei keine Veränderungen vorgenommen werden.
# First we clear the touchtone sequences and remove all entries from
# the callerid breaklist.
vbox_init_touchtones
vbox_breaklist rem all
# If variable VBOX_FLAG_STANDARD is TRUE we must play the standard
# message...
if { "$vbox_flag_standard" == "TRUE" } {
set RC [ vbox_put_message $vbox_msg_standard ]
vbox_pause 500
if { "$RC" == "HANGUP" } {
return
}
}
# If variable VBOX_FLAG_BEEP is TRUE we must play the beep
# message...
if { "$vbox_flag_beep" == "TRUE" } {
set RC [ vbox_put_message $vbox_msg_beep ]
vbox_pause 500
if { "$RC" == "HANGUP" } {
return
}
}
# If variable VBOX_FLAG_RECORD is TRUE we must record a new
# message...
if { "$vbox_flag_record" == "TRUE" } {
set VBOX_NEW_MESSAGE "$vbox_var_spooldir/incoming/$vbox_var_savename"
set RC [ vbox_get_message $VBOX_NEW_MESSAGE $vbox_var_rectime ]
vbox_pause 1000
exec -- $vbox_var_bindir/vboxmail "$VBOX_NEW_MESSAGE"
"$vbox_caller_name" "$vbox_caller_id" "$vbox_user_name" "$vbox_var_spooldir" "$vbox_var_savename"
# exec -- $vbox_var_bindir/vboxmail "$VBOX_NEW_MESSAGE"
"$vbox_caller_name" "$vbox_caller_id" "$vbox_user_name"
if { "$RC" == "HANGUP" } {
return
}
if { "$RC" == "TIMEOUT" } {
vbox_put_message $vbox_msg_timeout
vbox_pause 500
}
}
Editieren der Datei vboxmail in /usr/bin/vboxmail
Nun wollen wir erreichen, daß der eingegangene Anruf als Attachement per Mail an User01 gesendet wird. Hierbei ist es notwendig, den Mail-Header selber zu "bauen". Dazu müssen wir die Datei vboxmail wie folgt editieren:
#! /bin/sh
##
## vboxmail v2.0.0BETA5 (17-NOV-98)
#----------------------------------------------------------------------------#
# Script to notify a user about new incoming voice message. This is only a #
# *example* - you can modify it if you like! #
# #
# Usage: vboxmail MESSAGENAME CALLERNAME CALLERID MAIL-TO-ADDRESS #
#----------------------------------------------------------------------------#
MSNAME="${1}"
CALLER="${2}"
CALLID="${3}"
MAILTO="${4}"
SPOOLDIR="${5}"
SAVENAME="${6}"
#if (test -f "${MSNAME}")
#then
/usr/bin/vboxtoau < ${SPOOLDIR}/incoming/${SAVENAME} > /tmp/${SAVENAME}.au
(echo "From: Anfrufbeantworter < root >"^M
echo "To: Anrufbeantworter < ${MAILTO} >"^M
echo "Subject: Neue Nachricht von ${CALLER} (${CALLID})"^M
echo "Mime-Version: 1.0"^M
echo "Content-Type: Multipart/Mixed; Boundary=\"audio/x-au\""^M
echo "Content-Transfer-Encoding: 7bit"^M
echo ""^M
echo "This is a multi-part message in MIME format."^M
echo ""^M
echo "--audio/x-au"^M
echo "Content-Type: text/plain;"^M
echo "charset=\"us-ascii\""^M
echo "Hallo,"^M
echo ""^M
echo "Es hat jemand eine Nachricht für Dich hinterlassen:"^M
/usr/bin/vboxmode $MSNAME^M
echo ""^M
echo ":-) ..."^M
echo ""^M
echo "--audio/x-au"^M
echo "Content-Type: audio/x-au; name=\"$SAVENAME.au\""^M
echo "Content-Description: Nachricht"^M
echo "Content-Transfer-Encoding: base64"^M
echo "Content-Disposition: attachment; filename=\"$SAVENAME.au\""^M
echo ""^M
mimencode /tmp/$SAVENAME.au
echo "--audio/x-au--") | sendmail user01@domain
rm /tmp/$SAVENAME.*^M
#fi
Eintragen von vboxgetty in /etc/inittab:
Nachdem nun alle notwendigen Einstellungen vorgenommen sind, kann vboxgetty gestartet werden. Dies erfolgt am besten über den initd-Prozeß, der dafür sorgt, daß bei Beendigung eines vboxgetty-Prozesses, z.B. nach einem Anruf, autom. ein neuer Prozeß gestartet wird, um den nächsten Anruf entgegenzunehmen. Zu diesem Zweck muß die Datei /etc/inittab angepaßt werden. Für jedes Modem-TTY, das in /etc/vbox/vboxgetty.conf mit Hilfe der port-Anweisung konfiguriert wurde, muß eine Zeile (falls nicht schon vorhanden) eingefügt werden:
I6:2345:respawn: /usr/sbin/vboxgetty -d /dev/ttyI6
I7:2345:respawn: /usr/sbin/vboxgetty -d /dev/ttyI7
Jeder Eintrag besteht aus insgesamt vier Feldern. Das erste Feld ist einfach ein zweistelliges Label. Die folgenden Ziffern geben die Linux-Runlevel an, in denen autom. der im letzten Feld angegebene Prozeß (vboxgetty) gestartet werden soll. Die Bedeutung des dritten Feldes mit dem Wert respawn liegt darin, daß nach der Beendigung eines vgetty-Prozesses, z.B. nach der Aufnahme und Aufzeichnung eines Gespräches, autom. ein neuer Prozeß durch initd gestartet wird. Als Argument erhält vboxgetty die Option -d, mit der die Gerätedatei bestimmt wird, über die das virtuelle Modem angesprochen werden kann. Hier müssen genau die Geräte angegeben werden, die in /etc/vbox/vboxgetty.conf als Argument des port-Kommandos angegeben wurden.
Abschließend muß der initd-Prozeß durch die Anweisung init q, die als root ausgeführt werden muß, von der veränderten Konfigurationsdatei informiert werden. Nach Ausführung von init q sollte jetzt ein oder mehrere vboxgetty-Prozesse laufen. Der Anrufbeantworter ist nun betriebsbereit.
Meldungen werden in die Datei /var/log/vbox/vboxgetty-device.log geschrieben. Hier kann im Fehlerfall nachvollzogen werden, was nicht funktioniert.
Hier könnt Ihr Euch noch die Scripte downloaden: Scripte zu Vbox
Cont@ct:
mail: Thomas Müller