alix-server:isdn-anrufbeantworter

ISDN-Anrufbeantworter

Hardware und Treiber

Der Anrufbeantworter basiert auf dem USB-ISDN-Adapter Billion tiny USB ISDN TA 128 (Vendor-ID:0x07b0, Product-ID:0x0007). Zu Einsatz kommt das ältere ISDN4Linux, mit dem generischen hisax-Treiber und dem Hardwaretreiber hfc_usb. Diese Treiber werden vom Debian-Standardkernel automatisch beim Anstecken des Adapters oder beim Systemstart geladen. Um das Laden des neuen misdn-Systems zu verhindern, werden dessen Treiber mISDN_core und hfcsusb mithilfe der Blacklist /etc/modprobe.d/blacklist.conf geblockt.

Installation ISDN-Utils

Vorbereitung

Das Paket isdnutils unterstützt leider udev noch nicht, sondern möchte seine ca. 258 Gerätedateien mit dem Skript /sbin/MAKEDEV anlegen, das im Paket makedev enthalten ist. Da ich so viele Gerätedateien aber nicht benötige, erstellte ich diese mit dem Befehl mknod manuell im Verzeichnis /lib/udev/devices. Das Init-Skript /etc/init.d/udev kopiert diese beim Systemstart nach /dev.

Der folgende Kasten zeigt das Ergebnis der Bemühungen.

$ ls -l /lib/udev/devices/
total 0
crw-r--r-- 1 root root 45,   0 Oct 27 23:13 isdn0
crw-r--r-- 1 root root 45,   1 Oct 27 23:13 isdn1
lrwxrwxrwx 1 root root       9 Oct 27 23:25 isdnctrl -> isdnctrl0
crw-r--r-- 1 root root 45,  64 Oct 27 23:14 isdnctrl0
crw-r--r-- 1 root root 45,  65 Oct 27 23:14 isdnctrl1
crw-r--r-- 1 root root 45, 255 Oct 27 23:15 isdninfo
crw-r--r-- 1 root root 43,   0 Oct 27 23:38 ttyI0
crw-r--r-- 1 root root 43,   1 Oct 27 23:38 ttyI1
crw-r--r-- 1 root root 43,   2 Oct 27 23:40 ttyI2
crw-r--r-- 1 root root 43,   3 Oct 27 23:40 ttyI3

Diese Gerätedateien werden nun mittels Startscript nach /dev übertragen:

#/etc/init.d/udev stop
Stopping the hotplug events dispatcher: udevd.
#/etc/init.d/udev start
Starting the hotplug events dispatcher: udevd.
Synthesizing the initial hotplug events...done.
Waiting for /dev to be fully populated...done.

Um die Installationsroutinen des Pakets durchlaufen zu lassen wird eine leere Datei /sbin/MAKEDEV erstellt (touch /sbin/MAKEDEV) und ausführbar (chmod a+x /sbin/MAKEDEV) gemacht.

Ich lasse den Anrufbeantworter unter einem extra dafür eingerichteten Benutzerkonto vbox laufen. Dieses wird mit dem Kommando

$ adduser --system --home /var/spool/vbox/ --group vbox

eingerichtet.

Installation der Pakete

Es werden die Pakete isdnlog für den D-Kanallogger und isdnvbox für den Anrufbeantworter installiert.

Bei der Konfiguration des Pakets isdnvboxserver gibt man als Benutzer unter dem der Dämon laufen soll den oben erstellten Benutzer vbox an. Benutzer und Passwort für Verbindungen des Anrufbeantworters durch die Clientsoftware können beliebig gewählt werden.

Konfiguration

Eine gute deutsche Anleitung für die manuelle Konfiguration steht in /usr/share/doc/isdnvboxserver/vbox.txt.gz.

vboxgetty

Das Programm vboxgetty ist das eigentliche Herz von vbox. Es überwacht die Leitung, nimmt eingehende Anrufe entgegen, spielt Ansagetexte ab und zeichnet die Nachrichten auf.

Eintrag in '/etc/inittab' um vboxgetty durch init im Runlevel 2 zu starten:

I0:2:respawn:/usr/sbin/vboxgetty -d /dev/ttyI0

Es wird der Modememulations-Port /dev/ttyI0 verwendet. Es können prinzipiell mehrere Anrufbeantworter eingerichtet werden, die unterschiedliche Modememulations-Ports verwenden.

Um den Anrufbeantworter abzuschalten, wechselt man zum Beispiel mit telinit 3 in den Runlevel 3.

Konfiguriert wird vboxgetty über die Datei /etc/isdn/vboxgetty.conf:

#--------------------------------------------------------------------------
# This is a 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

# Settings for port ttyI0

port /dev/ttyI0
  modeminit             ATZ&B512&E<MSN>
  user                  vbox   
  group                 vbox 
  spooldir              /var/spool/vbox/ttyI0
  vboxconfig            /etc/isdn/vbox-ttyI0.conf

In dieser Datei sind zuerst die globalen Einstellungen aufgeführt die für alle Anrufbeantworter gelten. Nach der Anweisung port beziehen sich folgende Einstellungen nur auf den Anrufbeantworter des angegebenen Modememulationsports.

Die Anweisung modeminit gibt die Zeichenkette für die Initialisierung der Modememulation an, diese wird dann vboxgetty benachrichtigen, falls auf den dort angegebenen MSN ein Anruf eingeht.

Die Anweisung spooldir gibt das Wurzelverzeichnis des zu diesem Anrufbeantworter gehörenden Dateibaumes an. Er besteht aus folgenden Dateien und Verzeichnissen:

ttyI0/                                       | Das Wurzelverzeichnis dieses Anrufbeantworters
ttyI0/messages                               | Das Verzeichnis für die Ansagen
ttyI0/messages/timeout.msg                   | Standardansage nach Aufzeichnungsende.
ttyI0/messages/beep.msg                      | Der Standardbeep nach Ansage.
ttyI0/messages/standard.msg                  | Die Standardansage nach dem Abheben.
ttyI0/standard.tcl                           | TCL-Programm, das den Anrufbeantworter steuert.
ttyI0/incoming                               | Das Verzeichnis für aufgenommene Nachrichten
ttyI0/incoming/00001256756255-00001351.vmsg  | Eine aufgezeichnete Nachricht

Alle diese Dateien müssen den in der vboxgetty.conf angegeben Benutzer/Gruppe entsprechen.

Die Anweisung vboxconfig gibt die Konfigurationsdatei des Anrufbeantworters an.

/etc/isdn/vbox-ttyI0.conf

In dieser Datei wird festgelegt bei zu welchem Zeitpunkt der Anrufbeantworter arbeitet. Und bei welchem Anrufer, welche Ansage usw. durchgeführt wird. Diese Datei ist in verschiedene Sektoren unterteilt. Für eine genaue Beschreibung siehe man vbox.conf oder /usr/share/doc/isdnvboxserver/vbox.txt.gz

Diese Datei ist die Konfiguration des Anrufbeantworters. Sie ist in verschiedene Sektoren unterteilt.

[CALLERIDS]

In dieser Sektion wird definiert, welche Caller-ID welcher Person gehört und welche Einstellungen für diese verwendet werden sollen.

[CALLERIDS]
# Format: PATTERN SECTION REALNAME
1722537766       WHITE                   Mustername

Legt fest, dass für die Person Mustername, die die Rufnummer 01722537766 übermittelt, die Einstellungen unter der Benutzersektion WHITE gelten. Leider werden führende Nullen hier nicht beachtet, so dass diese nicht angegeben werden dürfen. Hierbei können Unix-Pattern verwendet werden (also *[246], für alle Nummern die auf 2,4 oder 6 enden).

Die letzte angegebene Zeile, ist für alle Anrufer, die vorher nicht behandelt wurden, maßgebend.

 *            -                 *** Unknown ***

Der Bindestrich in der zweiten Spalte, ist mit Sektion STANDARD gleichzusetzen. Diese wird auch aufgerufen, wenn keine Caller-ID übermittelt wird.

[RINGS]

In dieser Sektion wird eingestellt, wann und nach wieviel mal Klingeln ein Anruf angenommen wird.

[RINGS]
# Format: TIME DAYS RINGS

# Standardeinstellung: Nicht rangehen
*              *                 99

Bei meiner Konfiguration soll der Anrufbeantworter standardmäßig zwar aktiv sein, aber nicht abheben. Dazu wird er einfach auf 99x mal Klingeln konfiguriert. Je nach Caller-ID wird diese Einstellung dann überschrieben.

[USERSECTIONS]

Dies sind nun die oben bereits besprochenen Usersektionen (mittlere Spalte unter [CALLERIDS]). Hier kann man je nach Zeit und Anrufer verschieden Klingelzeiten, Ansagesprüche und Aufnahmezeiten definieren.

#[USERSECTIONS]
# Format: TIME DAYS STANDARD RECTIME [FLAG] [...]

[UNKNOWN]
# Bei unbekannten Personen Werktags von 8:30 bis 19:45 rangehen, sonst nicht.
8:00-19:45      Mo,Di,Mi,Do,Fr,Sa       standard.msg    120     RINGS=1 NOBEEPMSG
*               *                       standard.msg    120     NOANSWER

[STANDARD]
# Bei nicht "ubermittelter Caller-ID Werktags von 8:30 bis 19:45 rangehen, 
# sonst nicht.
8:00-19:45      Mo,Di,Mi,Do,Fr,Sa       standard.msg    120     RINGS=1 NOBEEPMSG
*               *                       standard.msg    120     NOANSWER

Die Benutzersektion STANDARD muss vorhanden sein, da diese immer benötigt wird, wenn keine CALLER-ID übermittelt wurde.

/etc/isdn/vboxmail

Das Shell-Skript /etc/isdn/vboxmail wird immer ausgeführt wenn eine Nachricht aufgezeichnet wurde. Es konvertiert die Aufzeichnung ins MP3-Format und versendet diese per Mail.

Dieses Skript entspricht dem Beispiel in der Datei /usr/share/doc/isdnvboxserver/vboxmail.enhanced mit einigen Änderungen, die es erst unter Debian lauffähig machten. Um es ausführen zu können, müssen die Pakete sox, mime-construct und lame (letzteres von debian-multimedia.org) installiert sein.

Diese Skript ist insofern wichtig, da bei einem Stromausfall durch die aufs-Installation die Nachricht verloren geht.

Die Nachricht wird an den in der vboxgetty.conf angegebenen Benutzer verschickt. Diese wird dann wie alle andere Mail per /etc/aliases weitergeleitet.

Ablauf

  1. Nach dem Start des vboxgetty stellt dieses Programm die Modememulation mit der Initialisierungszeichenkette ein, so dass er benachrichtigt wird, wenn auf der dort angegebenen MSN ein Anruf eingeht.
  2. Ist dies der Fall liest es die Konfigurationsdatei ein und entscheidet anhand der Einstellungen, der Uhrzeit und der Caller-ID, ob er den Anruf annimmt sowie welche Ansagen und Aufzeichnungsmodi für den Anruf gelten.
  3. Dann startet er einen TCL-Interpreter und führt die Datei standard.tcl aus, welche den eigentlichen Anrufbeantworter darstellt. Die in dieser Datei enthaltenen Anweisungen spielen die Ansagen ab, zeichnen die Nachricht auf und rufen nach dem Ende des Anrufs gegebenenfalls das Shellskript /etc/isdn/vboxmail auf, das die Aufzeichnung ins mp3-Format konvertiert und per Mail verschickt.
alix-server/isdn-anrufbeantworter.txt · Zuletzt geändert: 2014/09/13 19:12 (Externe Bearbeitung)

Seiten-Werkzeuge