kcw | journal | 2001 << Previous Page | Next Page >>

The magic that makes screen pops work is Computer Telephony Integration (CTI). CTI is anything that helps a computer "talk" to a telephone and it usually takes the form of software and software APIs that you can code to. With CTI, your program knows when a call arrives at the phone, the caller's ANI (Automatic Number Identification, i.e. phone number), the caller's DNIS (Dialed Number Identification Service, i.e. the number that the caller dialed), and some status information. With CTI you can answer the phone, place calls, and hang up a call, all programmatically without you touching the phone.

But CTI doesn't talk to a phone directly, it talks to a telephony switch. Telephony switches (many times called PBXs, Private Branch Exchange) are found at many small and larger companies. It's a piece of hardware with a T1 line to the phone company. A company's internal phones all plug into the switch. This saves having a bunch of separate phone lines going from the telephone compaany to a business and it allows a business to manage their phone environment. With your own switch you can do things like group phones so that one number can go to a group of phones, or you can reassign numbers without going through the phone company, or you can gather statistics about phone use. Phone companies do have services where they run a PBX for you at their office, but that's kind of pricey.

There are lots of PBX companies and lots of PBX types. I think a couple dozen companies and dozens of different switches. But the big players in the United States are Nortel Networks and Lucent Technologies. Other notable switch vendors are Alcatel in France, Siemens in the US and Europe, and Rockwell in Canada. Every switch has a different switch protocol, different CTI API and features. So writing software that can talk generically to a wide variety of switches is quite an undertaking.

Which brings me to what the CCT group does at Oracle. We handle the CTI stuff for the rest of CRM. What's our job? Our job is to write the APIs that other CRM groups use to telephony-enable their applications. Not only that, but the CCT group also handles telephony related add-on services such as routing calls and call management. So let's dig a bit deeper into the CCT architecture.

In the center, we have the Interaction, Queueing and Distribution (IQD) server. This server is notified about incoming calls and either queues them up for various agents or distributes the call immediately. The IQD talks to the Routing Server (RS), which classifies calls and tells the IQD where to route calls. The IQD and RS are global servers -- only one of each should run in an enterprise. The Oracle Database is also a global server -- you can have multiple database servers, but to all applications it should look like one big server (so the Oracle RDBMS handles caching and replication to maintain the single-view model).

Each call center in an enterprise will run an Oracle Telephony Manager (OTM). The OTM is the server that agents log into for telephony services. The OTM keeps track of calls, processes switch events, and invokes switch functionality. Each call center will probably also run an Inbound Telephony Server (ITS). The ITS is an adjunct that listens to calls arriving at a switch and notifies the IQD of those calls so that the IQD can route the calls appropriately. I only mention it because my team is responsible for the ITS.

The OTM doesn't actually talk to the switch directly. All that low-level communication is run through the Call Center Connectors server (CCC). From the IQD to the ITS, all those servers run in Java (so yes, Java can be used to run near real-time applications that scale to hundreds of users). The CCC server on the other hand is a C++ server which we inherited from a small company we bought. The CCC server conceptually talks to a switch. Really, it talks to the CTI module of a switch -- and the CTI module can be a third party middleware server. But the CCC is as low as we code.

So again, I'm trying to answer what my team does. We have six people in my team and we're responsible for the CCC and ITS servers and the lower half of the OTM. It requires us to know several switches and their ideosyncrasies, C++, Java, client-server programming and some database tools. Our job also requires us to write a lot (technical manuals, API documentation, application notes), upkeep our web site, deal with other groups and customers and a lot of things that don't really come under "what they teach you in college".

Copyright (c) 2001 Kevin C. Wong
Page Created: August 21, 2004
Page Last Updated: August 21, 2004