I’ve been wanting to build an interface to the telephone’s Caller ID feature for a long time. My limited attempts to research the protocol and circuits involved intimidated me enough to procrastinate the whole project for years. Recently, I learned about a solution from CallerID.com called Whozz Calling Deluxe 2-line. I opted for the serial version instead of the Ethernet edition because it was less expensive and I only planned to interface it with 1 device. I contacted the company and they provided me with a Developer’s Kit which includes the Serial Unit, Peripheral hardware, all the software on a CD, a Programmers Manual and programming support for a price lower than a stand-alone unit. What a deal!
My first impression of the device was disappointment. I was surprised to discover that the serial port was an older 9-pin connection and not a USB port. It got me thinking that this was probably designed in the 1990’s and hasn’t been updated since. Perhaps they invested in a bulk build and just have a bunch sitting on a shelf? I became skeptical that this would meet my needs. To rectify the issue with the serial port, I invested in an inexpensive 9-pin to USB serial cable from eBay. I had some issues getting the provided drivers to load, but got it working after several attempts.
Next, I started digging into the sample source code provided. There was a VB6 and a VB.NET 2008 version of a sample app that seemed mainly focused on the Ethernet version – I’m using VB.NET 2012. After much tracing, I realized that many antiquated techniques were used in these apps. So, I started building my own test app, borrowing some of the subroutines and functions from the sample app involving parsing the serial data. I threw out the antiquated serial interface software with the .NET serial interface. It occurred to me that earlier versions of the .NET framework did not do a good job with serial interfaces, but later releases did a much better job which might explain the example code. Next, I started digging into the documentation. Wow – I must say, it was very well written. I heavily referenced the documentation during the software build. The documentation helped me appreciate that there were a lot of different configure options to tailor the device to meet the needs of an application.
My test app worked on the first try. It captures data for incoming and outgoing calls. It also has options to record at the beginning and the end of the call. I created a table in the Watchdog database to capture details of all calls. Unfortunately, the actual text information provided by Caller ID varied, but typically only the city/state of the caller. So, I created another database table and filled it with my phone book. I used it as a lookup to provide more information about people I know who call me. I quickly created a SQL Report to show the list of callers, and added it into my report library.
After much testing, things were working well but minor tweaks were required. I ended up adding multiple entries for each name in the phone book: With an area code, without an area code, with a *82 prefix, etc. It was all working, but I just wasn’t satisfied – I wasn’t getting a lot of value out of just logging phone call details. It occurred to me that a nice feature might be to use SARAH’s voice to announce the name of an incoming caller before the phone is answered. So, I added some functionality to listen for an incoming call, lookup the caller’s name, and speak “Incoming call from <name>”. When the phone call ends, it still records the call results in the database.
Now that it’s all working, I must say that my overall opinion of the product has improved significantly. It may be based on older technology, but it is very effective and gets the job done. I would definitely recommend the Whozz Calling solution to anyone looking to interface with Caller ID services.