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 dass 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.msgDie Standardansage
beep.msgDer Piep-Ton, der nach einer Ansage abgespielt wird.
timeout.msgDie 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.


Schreibe einen Kommentar