Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

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.

share|improve this question
    
This is a very broad question as it stands. –  ChrisF Apr 19 '12 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 '12 at 22:25

4 Answers 4

up vote 1 down vote accepted

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.

share|improve this answer

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!

share|improve this answer
    
You'll need to get at least 50 rep before you can comment, check out our list of privileges... –  Yannis Rizos Apr 14 '12 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. –  Muhammad Raja Apr 14 '12 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

share|improve this answer
    
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 '12 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

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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