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



  • [Zurück] [Zurück zu Tom's Ecke] [Startseite]


    Die unter diesem Kapitel liegenden Seiten wurden erstellt von Thomas Müller