IVAM - ISDN Voice Answering Machine


IVAM is intended to be a complete, clean and efficient rewrite of vbox, vbox3 and vgetty. It is an implementation of an answering machine for the ISDN based on isdn4linux.


IVAM consists of two parts. The getty program (called ivgetty) and the answering machine itself, which is realized in and The getty listens on an ISDN phone number and dispatches all incoming calls to new instances of It streams all incoming uLaw audio data to its STDIN and reads all data to be played from its STDOUT. The default answering machine, which is implemented in, features a simple but clean voice box. I you want to create your own answering machine, just subclass and overwrite some event methods.

Starting with Version 0.2 shbuf IPC between ivgetty and is supported, too. Thus the computer reacts much more promptly on your DTMF sequences.


You need Linux. And you need a kernel with isdn4linux enabled. You need those nifty /dev/ttyIxx devices. You need an isdn card. You need Python 2.1 (maybe 2.0 is enough, who knows?). You need gcc. You need GNU make. You need some brain.

Yes, I know. These are way too much dependencies. Especially the last one.

The mpeg compressor lame ( would be nice, if you want to recieve all incoming voice messages by email encoded as MP3-files.

Version 0.2 introduced a new dependency: libshbuf and python-shbuf. It is needed for better latency. You need to install both the python module "python-shbuf" and the C library "libshbuf". Without this library ivam will not compile. You may download this library from

Development platform

Debian Sid on i386 rulez!


First extract the tarball into a directory. You may than compile it by executing "make". You may install it in /usr/local/bin and /var/spool/ivam with a "make install".

WARNING! When updating an old installation this will overwrite all existing sound samples. Save them before installing or do the installtion "by hand".

After that you have to tweak your /etc/inittab. Something like the following would be a good idea:

I10:23:respawn:/usr/local/bin/ivgetty -als -r 1 -d /dev/ttyI10 -p /var/spool/ivam -u /var/spool/ivam/ 08003301000

The number at the end should be replaced with your local MSN you want your voice box listen on. For more options type "ivgetty -h" and see what happens.

It would be good idea to change the default PIN for remote administration of the voice box. Edit /var/spool/ivam/ and change the CORRECT_PIN variable accordingly.

If you want to use some better samples for your voice box, you need to record them by phone and copy the correct file /var/spool/ivam/message-XXXXX.ulaw to e.g. /var/spool/ivam/welcome.ulaw. Another way would be to convert them from wave-files with this neat little utility called sox:

sox foo.wav -t raw -U -b -r 8000 welcome.ulaw

Edit /var/spool/ivam/newmessage for personalized mailings.

You might want to edit the first lines of /var/spool/ivam/*.py for accomodate them to your local python installation.


If you get enlightened to think that IVAM is a terrible program you might want to remove it with "make uninstall".


Yes, I know, the documentation is bad. If somebody wants to contribute...

Default Audio Samples

Yes, I know, the default samples are ugly. And I know that they are in german, my native tongue. If somebdoy wants to contribute: I'd happily accept english samples spoken by a native speaker.

But the beep is nice and sounds professional, doesn't it?

Voice Box User Interface

When a user connects he listens first to welcome.ulaw. Than he gets to beep.ulaw. Than he may say some stuff for some minutes. This is recorded. When the timeout is reached the beep is played again and the connection hung up.

When the user types a "0" into his phone during welcome.ulaw he gets bumped to auth.ulaw. He may enter the PIN now. When he fails the line is hung up. Otherwise he has to listen to authok.ulaw. The recorded messages follow separated by beep.ulaw. The User may jump forward with 6 and 8. He may jump backwards with 2 and 4. He may request a repitition of the current message by pressing 5. He may delete a message with 8.

That's it basically. If you want to find the special hidden features you ought to read


The program shouldn't be run as root. I know. Should be fairly easy to adjust this.


You may download the package from this URL:


Version 0.3 - Fixed some compatibility problems and added libshbuf 0.0.2 compatibility.

Version 0.2 - Many fixes and latency improvements through usage of libshbuf, syslog support, incoming phone number is passed to the newmail-script.

Version 0.1a - Initial published version


As Version 0.2 introduced new shbuf support, the default implementation uses shbuf too. This requires the usage of the -s switch of ivgetty. You should add this to your inittab-entry. The implementation is called As the shbuf implementation might be unstable, version 0.2 of ivam still comes with the old FIFO based implementation in You may select the version used by changing some lines in the header of (You'll find them, they are well commented)

Starting with version 0.2 ivgetty passes the incoming telephone number to and newmessage. Thus you need to update those scripts in your local installation to match the new interface.


[Q] How can I setup multiple answering machines for different phone numbers?

[A] For two numbers 4711 and 0815 you might do the following: Create some directories /var/spool/ivam/4711 and /var/spool/ivam/0815. Create symbolic links for all Python scripts and all .ulaw-message-files from /var/spool/ivam to the specific subdirectory. Now run multiple ivgettys in parallel by adding two distinct lines to /etc/inittab. Use two different devices and two different phone numbers. Replace /var/spool/ivam by one of the subdirectories for each line. After restarting init with "init q" you'll be running two seperate answering machines in parallel. For different welcome messages for the answering machines replace the symbolic link of welcome.ulaw by the new version.

[Q] How can I change the default recording time?

[A] Change the line beginning with RECORD_TIME= in the file in /var/spoool/ivam.

[Q] I want to do special processing of all incoming messages. How can I do this?

[A] Patch the file /var/spool/ivam/newmessage. It is a simple shell script which is called for every new message with the incoming phone number as argument #1 and the new message file as #2. This script creates a MIME mail with the message encoded as MP3 file by default.

[Q] Why aren't you using autoconf/automake for the project?

[A] As ivam only works with isdn4linux there is no need for portability. There are differences between several Linux distributions, but I do not think that they are heavy weighting. The other reason is, that I am not the autoconf freak who would be able to create the correct config files for ivam. I'd happily accept patches for autoconfisation as long as they really work.

[Q] Your default samples suck!
[Q] What's that for a fscking language the default samples are in?

[A] Contribute better ones. My native tongue is german. Thus the default samples are german, too.

[Q] IVAM doesn't work, all I get are messages like "(ERROR) Could not start program (Bad file descriptor)" in my syslog. What is gone wrong?

[A] You need to edit the Python files and AnsweringMachine[Shbuf].py in /var/spool/ivam and adjust them to your local Python setup: change the first line to the path of your local python binary.

Call for Help

Somebody wants to write some documentation? Somebody wants to write some decent autoconf/automake scripts? Somebody wants to contribute some better audio samples?

Any other sensible patch will be happily accepted, too.


This README can be found on

The Sourceforge project page is

The homepage of the author is

Web based CVS at

Lennart Poettering <>, May 2002

$Id: README,v 1.5 2002/05/02 17:01:10 poettering Exp $