Dialogic Voice Mail and Auto-Attendant
Subjects I will cover;
Single line voice mail
Nortel Integration Module
Auto Attendant
Most expensive voice mail systems require "integration" via a serial link or special DTMF tones. This system does it all without anything but Plain Old Telephone Service lines (POTS). Your messages can be played from any computer over a network or even e-mailed to you over the Internet! And best of all, ALL the software is Shareware except for the operating system. All you need is an old, dirt cheap 4 port Dialogic Card for each 4 lines that are to be answered. These are available for $20 to $50 each on e-bay. I have even picked up a couple of them for FREE from someone who thought they were some sort of non-working modem cards. Newer Dialogic cards support PCI slots, Wave files, and are much better at detecting tones. In this application we are not using ANY tones, so the old ISA cards will work like the D40A, D40B, D41B, and others. It is a DOS application but Windows for Workgroups or a newer operating system is needed to share the files over a network. We have run this software for over 7 years on WFW 3.11 without a single problem, and it boots in 15 seconds on a Pentium system! Unfortunately Windows 95 or newer is needed for the automatic e-mail software to run.
The voice mail software plays a different greeting for each line (or the same greeting if you want), records the message, and deposits the message in a different directory for each line it that it answers. This program has been tested on 12 lines but should support up to 24 lines. That would require 6 empty ISA slots, this might be available in an old 486 computer! My program will also allow nearly unlimited messages to be recorded separately. Each message is "M" followed by the day of the month, the hour and minute of the start of the recording.
The recipient of the voice messages only needs to have access to the network and use a program that can play Dialogic "vox" files, such as "Cooledit". The unregistered version of "Cooledit" will allow you to play these 6000-CPS VOX files. It also allows you to play it over and over, it will allow you to select a starting point to play it over from, and you can save it as a "wave" file to e-mail it to someone else. Then if you right click on the file you can delete it.
The program "Automailer" is also available for free, and I have tested it with an Linux based e-mail computer and it sent me the message every time within seconds of recording it. You can even tell it to delete the message after it sends it to you. The first time you run "Automailer" the program will also e-mail you your greeting, so be sure not to tell it to delete everything after it sends it the first time it runs.
To change your greeting all you need to do is call yourself and record a new greeting. You can use "Cooledit" to delete the hang up click and the few seconds of silence at the end of your message. Then you need to save the recorded message as "greet" and now you have your own personal greeting. You can save an unlimited number of greetings on the computer and just name them something else when you do not want to use them.
There are two versions of my voice mail software. One version answers on four rings for use directly on incoming analog lines. The second version answers on the first ring for when you have access to your own PBX and can set it up to "forward no answer" and "forward busy" or "hunt" to a second extension that is the voice mail extension. This second extension can also be used by a receptionist to send an incoming caller directly to your voice mailbox.
My favorite motto is "KISS", as in "Keep It Simple Stupid". This is by far the simplest most straight forward voice mail system available. You might have a problem is you are used to installing professional systems, you might want to first forget all the things you know about expensive voice mail systems! On the other hand if you are just an ordinary computer user with a little experience in adding cards to your computer, this will be an easy system for you to set up.
Usually Voice mail systems are "Integrated" into the phone system, or the are even built into the phone system. This system requires neither, yet works as well as some "integrated" systems! With normal voice mail systems the number of "lines" or "ports" refers to how many calls it can process at one time. With this system it is how many lines it can process all together. That means that if you want it to answer 16 extensions, this system must be equipped with 16 lines or 4 four port Dialogic cards..
The main program is written in Microsoft "C" and has less than 250 lines of code. In my opinion the less lines of code the more stable the program is. My aim is to keep the code as short as humanly possible. The program has only 5 states of parallel processing. They are;
1. On hook waiting for a call.
2. Off hook answering a call.
3. Playing the greeting.
4. Recording a message.
5. Hanging up
It is really just that simple. This is the second, improved version of this software. The first version was in use for over 3 years. It was limited to 20 messages per extension. This improved version names the messages by the day of the month the hour and the minute of the call. This means that it can take an unlimited amount of messages for a month. If you are gone for more than that, and a call happens to come in at the same time a month later, it will append any newer message of the same name to the end of the previous one.
This voice mail system offers virtually unlimited messages, as well as unlimited greetings. The only limit is the size of the hard drive on the voice mail "server". The "server" only needs to be a minimal Pentium, or a faster 486, with Windows 95 or Windows 98. Windows for Workgroups 3.11 can be used, but you loose some features. An average message will take 50K, so a 20 meg hard drive can easily hold 400 messages. Think of how many messages a 20 Gig hard drive will hold!
Just mention "voice mail" and it used to conjure up nightmares! We have paid hundreds of dollars for one two line system that simply did not work well enough to be used. I have purchased other systems from 2 companies that sell software over the internet, but they were unusable due to bugs or fancy copy protection schemes. We were once offered a used system for $2500, but it ran on an old 286 computer! All phone based voice mail systems require access codes, remembering key press combinations to delete, replay, Pause, etc. There had to be a simple solution, and this is it! Once it is set up all you have to do is click on the message to play it, rename it as your greeting, or delete it!
I am used to working on Nortel telephone systems, so programming examples will be for Nortel. Other systems will use a similar setup. Some will require the addition of an Analog Terminal adapter to allow you to add analog devices to their phone system.
There are two methods of setting up this voice mail system. One works just like a telephone answerer and it can be either on an incoming line or on an individual extension. The other requires programming your phone system for call forward on no answer and call forward when busy.
The first method is to assign an analog extension identical to a digital extension, unless of course you are already using an analog extension. Then the voice mail answers the call on 4 rings and takes a message. This setup can also be used by connecting the voice mail system directly to your outside lines, assuming they are Plain Old Telephone lines (POTS).
The other setup is a little more complicated. What you need to do is set up is an analog line for each user or group of users. For instance if you want to add voice mail for extension 321 here is what you need to do. First you need to create an analog line (type 500 in load 10) and for an example we will call it extension 8321. The operator will need an easy remember your voice mail line so they can send callers directly into it when you are away. Then we will go into extension 321 and make some changes. They are to add hunt extension of 8321 and enable hunting in the Class of Service settings. Second we need to enable "Call Forward on No Answer" (CFNA) and enter a Flexible Directory Number (FDN) of 8321. These settings will need to be made for each extension that will use the voice mail system.
A group of people can also share one voice mail line. Lets say that your accounting department uses extensions 320 to 325. Each of them can forward no answer and busy to 8321. Then the greeting at 8321 can say "You have reached the accounting department....". Their secretary can then check their calls and e-mail the call to the correct person in the accounting department.
Next you may need to make up an "octopus" of telephone cables. At one end will be a punch down block or a 50 pin, 25 pair telephone system plug. At the other end will be up to 8 two pair telephone plugs to plug into the Dialogic cards. I usually use 4 pair network cables for this and mark them for jacks 1,2, jacks 3,4, jacks 5,6, and jacks 7,8.
The "server" should be any Pentium computer with four ISA slots to hold 4 dialogic cards. Create a directory called "vmail", and copy the voice mail files to it. Create 16 sub directories (for 16 lines) called line1 to line16. You do not need to put anything in them, the program will do that for you.
This system has been tested with Dialogic D/40A, D/40B and D/41B cards. These are 4 line cards, but they have only two jacks. One line is on the center pair, and the second is on the pair on either side of the center pair. Only the first card in the system can have interrupts enabled, the others must have this enable jumper removed. My program is written to use only interrupt 5, because that is usually available. Printer ports and sound cards must use a different interrupt. Interrupt 5 is selected by moving the jumper just to the right of the middle of the interrupt selection header. Finally the address dip switches must be set. They will be all down for the first card at address 0. The next one will be set to down, down, up, down. That is address 1. The next card is set to down, up, down, down, that is address two. The fourth card is set to down, up, up, down for address three.
Here are pictures of typical older Dialogic cards. The first is a D41B, note that the LSI chips are DIP types on the left. In the center note the 4 ceramic audio analog sections. You may also note that one of the audio transformers has been replaced. Next there is a D41D card. Note that the LSI chips are 4 sided surface mount chips. The audio ceramic modules are gone and the transformers are bigger. The interrupt jumper is black and hard to see.
Typical Dialogic card layout;
_________________________________________________________________
| |
| |
| [==] Jack
| |
| Address Switches [==] Jack
| [####] Interrupt Select |
| Interrupt Enable [] :::[]:: |
|______________________________________ __|
|[|[|[|[|[|[|[|[|[|[|[|[|
Once the cards are installed and the computer is running add the vmail batch file to your startup group so it will start automatically. When it runs it will load the dialogic driver d40drv, and then the voice mail program itself. Press "alt" and "enter" to make it run in a window.
Once the voice mail software is running on the server, we need to set up the directories that are to be shared. Right click on network neighborhood and select properties. Make sure "file and printer sharing for Microsoft networks" is installed and enabled. This uses the "NETBEUI" protocol, and needs to be enable on every computer on the network that is to use the voice mail service. Then set up each user directory with access controlled by password and give the password to the person who needs access to the user directory. Double check that each person has the correct directory when you set up "Cooledit" on their computer. You can also use one master password and share the "Vmail" directory.
There are two optional programs for your server. One is called "Nortelmw" and it will scan the user directories and produce a display showing how many messages each user has. This is useful to see if someone is having trouble retrieving messages. If you build the M2008 based Message waiting controller it can light and extinguish your message waiting lights. The next program is another shareware program called "Automailer". It can be installed on the server or on the end users computer. Once set up and installed it can send you an email of each new message when it is recorded. This is great for when you are going to be away for a week and want to get your voice messages.
SETTING UP THE USERS COMPUTERS
A shareware program called "Cooledit" is used to play back the messages. Even the free demo version will work just fine. It does have two bugs however. One is that it thinks all "VOX" files are recorded at 8000 hertz. That problem is solved by calling them "SPC" files instead. The second bug is that is sometimes distorts loud long messages. This can be fixed by playing them back through the phone as though they were a greeting. The newer (D and up) generations of dialogic cards support u-Law PCM files. You likely call them "Wave" files.
The program "Cooledit" comes in a ZIP file called "Cool153.zip". Make a new directory called Cooledit on the end users computer. Copy the cool153.zip file to that directory. Double click on cool153.zip and uncompress it. You will need Winzip or equivalent to unzip it. The unregistered version requires an extra click to play files. Registration for the "light" version was $25 the last I checked.
To be compatible with older cards this voice mail program has to use the default recording rate of 6000 hertz. Cooledit thinks 6000 hertz sample rate "VOX" files are called "SPC" files. After fighting with Cooledit for years I gave up and changed the software to call the "VOX" files "SPC" files and thus made Cooledit happy.
That creates another problem. Windows 9x thinks "SPC" files are something else. To fix this you must break that association and make a new association to use Cooledit. First select "Windows explorer". Under "start", "programs", select "view", "folder options", select "file types". Press the down arrow key until "SPC" (PKCS #7 Certificates) is selected. Click on "remove", "yes" and "close". You now have broken the incorrect association. To create the correct association double click on a Cooledit "SPC" file, like the greeting that comes with this voice mail software. In the "open with" dialogic box select "other". Look in your Cooledit directory and click on "Cooledit" and "OK". Now when you click on any "SPC" message file it will load Cooledit and play the message through your PC’s sound card.
Once Cooledit is set up you need to make a shortcut to the persons voice mail folder on their desktop. This is done by just right clicking and dragging it from "network neighborhood" to the desktop. Windows will ask you if you want to move it there, copy it, or make a shortcut there. Select "Make a shortcut". It then can be renamed "Voice mail" by right clicking on the shortcut and selecting "rename".
If Cooledit distorts a message and it sometimes does, rename your greeting to something else and rename the distorted message to greet.spc. Call your extension and you will now hear the message loud and clear. Once you have done this do not forget to delete or rename the message, and name your greeting back to greet.spc!
Once Cooledit is working call yourself and record your own personal greeting. This will take precedence over the default greeting that is located in the vmail directory. Play it back with Cooledit and if it sounds good rename it as "greet.spc". You can have any number of greetings saved, only the one named "greet.spc" will play. If you delete your personal greeting the software will try to use the default greeting in the vmail directory. If you delete that one also then the program will crash.
The users need to get in the habit of checking their messages at least twice a day. They can delete it by right clicking and selecting "delete". If they want to keep it then it is best to rename it something else that does not start with "M". That way if you are using the "Nortelmw" program it will not see it as a message that is waiting to be retrieved.
I also have a "FoxPro" program that you can run on your desktop which will "Pop up" whenever you get a new message and it will remind you to check voice mail. It requires the FoxPro support library and it will slow your computer down. It might be possible to run it on the Windows timer to run every hour.
KNOWN PROBLEMS
The most common problem is "Cooledit" distorting the "vox" files. To get around this, when it is necessary, rename the distorted message as your greeting and call yourself to listen to the message.
Don’t forget to switch your greeting back afterwards!
Another problem is the lack of an auto-attendant. There are other programs out there like "Big Mouth" that can be used for an auto-attendant. I have a version that uses a dialogic card, but it must be a revision "D" card or newer card to correctly read the touch tones.
Some telephone systems do not provide loss of loop current on hang up. This will result in recording of hang up’s as though they were messages. If you configure the users computers to "view details" on their voice mail directories these will appear as "0 K" files and then they can be deleted. Outside calls are sometimes recorded after they hang up because the "Your phone is off the hook" message appears as a message to the voice mail system.
In some systems running 3 or more voice mail cards a problem sometimes develops where a message is recorded garbled or out of sequence. This may be caused by the cards overheating, but I do not really know the cause. When it happens swapping out the faulty card seems to help cure it. A good cooling fan aimed directly at the cards may help reduce this problem as well
SYSTEM REQUIREMENTS
Server - Pentium (or 486 for more ISA slots) running Windows for Workgroups or newer, network card, dialogic card, and 1 meg of hard drive space.
Users - Pentium running Windows for Workgroups or newer, network card, sound card and speakers, 1 meg of hard drive space.
Network - Must be capable of supporting "NETBEUI" protocol for "File and Printer sharing for Microsoft Networks". All users and server must be connected.
CONCLUSION
Well there you have it. A voice mail system that costs practically nothing. The old Dialogic cards used for this system cost as little as $25 for 4 ports. That is only about $6 per user! That is much less than a telephone answer would cost. What you have instead is a voice mail system that would make many a phone company jealous!
If you are happy with this program, or have any suggestions for improvement contact me at bobdavis@elim.edu. Remember "KISS", "keep it simple stupid" so anyone can set it up and use it. The C source code for vmail and the compiled program, are distributed as "shareware". If you are happy with them and want updates send $25 to the author.
Homemade Nortel Integration Module
The biggest complaint with my voice mail systems is that they lack the ability to light the message waiting lights on the telephones. To resolve this the voice mail computer needs the ability to input information into the telephone system. This can be done with a simulated or a controlled telephone. MCK telebridge makes a M2616 simulator with a serial port that connects to a computer. I have also made a device that gives the computer printer port the ability to control a M2008 telephone.
The newer version of the Nortel M2008 uses a plastic keyboard overlay that connects the to main circuit board via two 10 position connectors. The top one is used for the keyboard, the second one has one pin that is used for the keyboard and the other nine are for the LCD display. Ribbon cables or small wires can be soldered onto these connectors and run to a circuit board with solid state switches to allow it to be controlled from a PC printer port. The black coating must first be removed from the pins.
M2008 keyboard layout Nortel test program
-----------------------------------------Letter to select key. RLS P7 HMute P6 G1 2 3 P5 F4 5 6 P4 E7 8 9 P3 D* 0 # P2 CV< V> P1 B P0 APin Connectors 4051 Input Printer Port--- ----------------------------- ---------------- ------------1 1 3 P4 S0 - 13 2/3/4
2 0 3 5 6 9 # V> Mute LH1500-1 6
3 Mute RLS P7 S1 - 14 2/3/4
4 2 5 P6 S2 - 15 2/3/4
5 0 8 P5 S3 - 12 2/3/4
6 1 2 4 7 8 V< * RLS LH1500-2 7
7 4 6 P3 S4 - 1 2/3/4
8 7 9 P2 S5 - 5 2/3/4
9 * # P1 S6 - 2 2/3/4
10 V< V> P0 S7 - 4 2/3/4
11 P0 to P7 Common LH1500-3 8
12-19 ALL 9 others go to the LCD.
Each solid state switch connects its position on the ten pin connector to one of the three commons, pins 2,6, and 11. Hence two switches must be on at one time to connect the key press circuit to a second key press common and thus appear to have pressed one key on the M2008 telephone. This is the translation table from selected function on the M2008 telephone to the value to be sent to the printer port. The pictures show a modified M2008 circuit board top and bottom views.
Dialogic VOICE MAIL and Auto Attendant
In 1992 someone donated our first touchtone telephone system (PBX). PBX stands for Private Branch Exchange, or a private telephone system. Up until then, we were using a rotary system that was limited to only 70 extensions and 6 outside lines. The rotary system was costing us over $200 a month for a service contract. Parts for it were no longer available, and on far too many occasions we were left sitting with no telephones for several days waiting for someone to fix it. Then someone donated a Northern Tell SL-1 M telephone system. It was quite large, and worked very well, except for one problem. The primary storage device was a tape drive. Every time a tape was eaten it cost us $800 or more for a new tape drive. Since only three tapes came with the telephone system, we were limited on how many tapes it could eat. We then updated to a used SL-1 ST with three shelves, or "tiers". It uses floppy disks which have not failed us yet. Using the old line cards, we could have 120 extensions, and if we bought new ones, we could double that with double density cards, or quadruple that with quad density cards.
With the addition of the touchtone telephone system there came the possibility of an automatic attendant. It could answer calls after the receptionist was closed, and transfer them to the desired extension. At first we used a "Bigmouth" card and software. For only $170 and an old 386 computer this card could answer calls, transfer calls, and take messages. The only drawback was, it was a single line device. It could only process one call at a time. So next we added a second "Bigmouth" and computer. Soon came the idea of having some of our outside lines go through the auto attendant all of the time, in fact 6 of them were added for that purpose. But the "Bigmouth's" were not able to keep up with the calls.
At the Rochester Hamfest / Computer show / Swap meet, I was buying some used CD-ROM drives from a vendor, when in the course of our conversation, he said he had some modem like cards he would give me. On the way back to my van I discovered that the "modem's" had Dialogic D-41B written on them. Realizing Dialogic made multi-line telephone cards, I got really excited, had I just picked up the solution to our problems for free? Soon I found out they were out of date 4 port line cards. Software available today requires D-41D's or newer. In calling around, I came across Alliance telecommunications. They sell new cards, and software. They had a universal C based development package that would still work with the older cards. Microsoft C++ version 1 was available surplus for peanuts so I purchased both software packages.
The Dialogic Development package comes with two demonstration programs with their source code. Their names are "D4xdemo" and "Dial" and they are located in the d4xx demo directory. One allows you to call in and leave messages, and retrieve them later. The second calls numbers and when answered it plays a message. To get the automatic attendant to work, I needed to get both functions to work together. They were written by two different programmers and were totally incompatible with each other. However, after several hours of trying, my assistant Ulinov, (A student form Mexico) managed to bridge the gap so it could receive a number, save it, and then dial the same number. I added some screen design using "Settextposition" of the C library called "graph" to draw boxes on the screen and organize the text into a readable display. This was quite an accomplishment considering the complexity of C, and it was our first programming experience in C.
This version is limited to one card connected to 4 telephone lines, and three digit extensions. All of those parameters can be modified in the C code. The Dialogic card is configured as follows. The red switch block, SW-1 is set with 1,2, and 3 down and switch 4 up. That sets the address at D000. Jumper block JP1 has the 4 the jumper installed, that is the one next to pin 8 of the 74HCT244 on a D41-b board. That jumper block is for interrupts and that setting is for interrupt 5. Dip socket JP-8 has all positions jumpered. I do not know what it does.
To get to the auto attendant, the outside lines dedicated to it, must be programmed to automatically terminate at the automatic attendant's extensions. Each extension must hunt to the next one if it is busy. Each must allow transfers (XFA) and touchtone (DTN).
The caller is greeted after one ring with the main greeting. There are 3 different options that they can select. These valid entries from a caller are as follows;
0xx - dials the operator.
100-899 - dials the extension.
9 - Plays a list of extensions.
If an extension is entered, the auto attendant will flash the hook switch to put them on hold, dial the extension, listen for a busy signal, and if it is not busy, it will hang up, completing the transfer. If the extension is busy, it will flash the hook switch to get the caller back, tell them it is busy, and return to the main greeting to allow them to try another extension. If the caller selects a listing of extensions, it will play the listing, but it will accept an extension, any time the caller enters it.
The Dialogic software has a default of 4 rings at an extension, before it returns to the program. Some complained that, in the dorms, it was not enough time to get to the phone. So instead of recalling the caller after 4 rings, and saying "no one is answering at that extension", it hangs up. This completes the transfer and the phone will ring forever, or until the caller hangs up. The next problem is, what if the caller hangs up during the first 4 rings? The auto attendant then completes the call from no one, and the phone could literally ring forever. Having a Nortel telephone system, we modified each extension to add a "Class of Service"(CLS) of "Forward No answer" (FNA) and the extension of "0". That means, that if no one answered the call after 8 rings, it goes to the receptionist. She could then take a message, or tell them that no one is there to answer that phone. If the receptionist is closed, or in the "Night Mode" the call goes back to the automatic attendant.
The next problem to solve is to record lists of available telephone extensions and the main greeting. The demo program from Dialogic can take messages, and the caller can assign them numbers. So run the d4xdemo program, call the computer, and record the greetings and prompts. Then exit the demo program, and copy the prompts, they appear as "MSG001.VOX", to the correct file names for the automatic attendant. The demo program limits messages to 12 seconds, so you may need to modify it for longer prompts. This modifaction is done in the "record" subroutine. The line that says "d4xrwb.maxsec = 12 should be changed to 30 or 60. To avoid recording a blank at the end press any key on the phone to end the recording. It is also possible to use a sound card, and a wav to vox converter to get higher quality sound.
The names and content of the prompts and main greeting are;
Greeting.vox - "You have reached xyz school, if you know the extension you want, enter it at any time, for a listing of extensions press 9, thank you."
Busy.vox - "I am sorry that extension is busy"
Hold.vox - "Please hold, during the silence, while I try that extension"
list.vox - "extensions are......."
Microsoft C has an option where you can select the environment you are developing your project for. There I selected a DOS environment, at the time I didn't want to use a computer, capable of running Windows, to answer the phones. I also found it was best to make a directory called "d40atndt" and copy all the needed files into it. That includes the library files from the Dialogic development package, that are listed in the "include" section of my program. Then tell C to open a new project, and then add my program "d40atndt" to it. Then tell it to "scan for all dependencies" and it will find other needed files. Then you can tell C to "rebuild all", and it will rebuild all the needed support files and make the needed D40atndt.exe file. Copy that file, the prompts and main greeting. and 40driver.exe from the Dialogic development package, unto your target computer, and give it a run.
NOTE: Auto attendant requires greet.vox, hold.vox, list.vox, and busy.vox.
I set the Dialogic cards to interrupt 5, and address D000. This may conflict with graphics cards that use that interrupt. You can modify your autoexec batch file to bring up the Dialogic auto attendant every time the computer is turned on, by adding "D40drv -H5" and "D40atndt". That tells the computer to load the driver with interrupt 5 and start the attendant program.
Once the auto attendant was in use, we discovered another problem. Some systems send a tone that is not loud enough, or long enough to be detected. To solve this, we re recorded the main greeting at a lower volume, and added 3-4 second pauses between phrases to allow a silence period to better hear the caller entering tones.