I have a project. The server which based on a phone PCI-board is responsible for received phone calls from the customer and then redirect the phone calls to the operators.

enter image description here

I have decided to code the server using c++ programming language and qt framework because the PCI-board SDK's interface is c/c++ originated and for the sake of portability.

The server need to send the information of the the customer to the operator while ringing the operator and the ui interface of the operator client should be browser-based.

Now the key problem is how could the server notify the operator that there is a phone call for he/she.

One architecture I have considered is like this, enter image description here

The operator browser client use ajax pooling the web server to check whether there is call to the client; the web server pooling the database server to check whether there is call; the desktop server(c++) wait for the phone calls and set the information in the database.

The other operations such as hang up the phone call from the client, retransfer the phone call to the other operator also use this architecture.

Then, is there any way other than pooling the server(js code setInterval('getDail', 1000)) to decide whether there is a call to the operator?

Is this architecture feasible or should I use some terrific techniques that I do know such as web services,xml-rpc, soap???

The Caller center is for 8~300 operators and the operators do not seperate geographically. Moreover, I have figured out that we need provide interface for customer programmer, so this thing is so called middleware? Then some new questions, how could we expose interface to customer, COM?

Thanks in advance.

  • This is a very broad question as it stands.
    – ChrisF
    Apr 19, 2012 at 15:06
  • 1
    There are some critical missing factors here. Is this a call center for 3 people, or 3000? Do you need to integrate with other applications? Are the CSRs (customer service reps) all in a single office or geographically dispersed?
    – jasonk
    Apr 19, 2012 at 22:25

4 Answers 4


This is basically a workflow/queueing problem.

Incoming requests should be placed on a queue.

Each operator should request (with wait) the next item on the queue.

When a operator gets the item the "do useful work" as they say in all the best code samples.

When the operator is finished he/she requests (with wait) the next item in the queue.

You have chosen C++ for the right reasons so you should stick with that choice. If Java was feasible you could have picked of one of several workflow/queuing frameworks to help you. In the C++ you may end up coding much of this yourself. There are several queue management packages available, but, workflow managers are pretty scarce. Luckily your workflow should start of pretty simple.


Don't you think your trying to apply reverse engineering here? I mean like the architecture should be more like this:

When Server receives the call, it should look for a free operator and pass the database details of that customer (if known) to the operator, if not then play a video tape or something. In mean time it should have some kind of timer that checks for free operator or you can add some kind of event to the browser or operator's phone call task, as when the operator hangs up, event triggers and tell the server that he is free, on when it receives the call another event triggers and tells server that operator is busy.

I haven't worked on big projects of C++ but I did studied it in college and Uni for a year.

Hope it helped somehow!

  • You'll need to get at least 50 rep before you can comment, check out our list of privileges...
    – yannis
    Apr 14, 2012 at 8:58
  • oh okay, thanks, well point was to help the guy not to make him angry as I didn't gave proper answer, so told him that Its a comment. Apr 14, 2012 at 9:03

If you haven't already, read about the architecture of Asterisk, an open source telephony applications platform. Your project seems similar: http://www.aosabook.org/en/asterisk.html

  • It's a tremendously useful tool -- but having poked around in its codebase, I wouldn't necessarily hold up Asterisk as an exemplar of great software design. (Now... could Asterisk be used in place of the thing the questioner is building? I wouldn't be surprised... but that's not always a good answer to tell a client who's decided that they want a bespoke solution).
    – Charles Duffy
    Apr 16, 2012 at 23:47

To send info to the web server from the phone box, I would recommend a RESTful web service. This will keep both of the servers free most of the time. (This is what the company twilio does) REST API

Perhaps you could use websockets to "push" new calls to the operator's browsers. If you are using an older browser (like IE 8), this might not be the best choice. Otherwise, you'll have to do periodic refreshes with ajax. This will reduce the chatter of checking for changes all the time, but it will also keep a lot of connections open. HTML5 WebSockets

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.