[asterisk-users] Call queues on load-balanced asterisks

Thomas Liu thomas.liu at wshuttle.com
Wed Jun 8 04:55:36 CDT 2011


Hi Pan & Dhaval,

In the past 8 weeks, we have delivered a load-balanced asterisks (1.4) based
call center with our flexqueue application for icson.com. It has the below
features, 

1. 2 x asterisk 1.4 boxes, 1 x mysql db box and 1 x flexqueue box(the two
are failover configured with heartbeat and custom script, and mysql
master-slave replication between two svr), 2 x kamailio boxes(failover
configured), 1 x file server boxes, 1 x app server , run freepbx &
queuemetrics. all 8 server are dell r310. 

2. the gateway is one mx100 with 4 E1 lines plugged, the incoming calls go
to kamailio2 , and routed to ast1/ast2 in round robin mode.

3. all agent phones registered to kamailio 1, and the extensions are still
maintained with freepbx

4.On asterisks, all trunks with destination to pstn or agent phones, go to
kamailio1; and incoming calls trunk from kamailio2.

5.admin also use freepbx to configure inbound routes, ivrs, announcements,
timeconditions, and recordings , etc.  the configuration files are generated
on the fly for flexqueue when apply changes. Dialplans for inbound routes
are also automatically generated and distributed to ast1 & ast2, in these
dialplan, fastagi application is installed as well to point to flexqueue.

6.flexqueue interprets the call flow configured on freepbx, and create the
queues configured on freepbx, but it's shared among all asterisk boxes. 

7.flexqueue interface with queuemetrics , and send all necessary queue logs
to queuemetrics for complete reporting & QA purpose.

8.flexqueue has a agent phone panel, and a supervisor monitoring &
management panel. Agent can logon his/her phone panel to have features like,
incoming call popup, parking, Outbound dial, hold/unhold, transfer
(cold/warm/to another queue), hangup, wrapup , pause/resume, etc. the
supervisor can logon his/her monitoring & management panel, to view realtime
event-driven agent info, queue info, and calls on-going. Besides, supervisor
can also listen to agents, barge agents' talk, and qc call records &
recordings quickly.

9.flexqueue provide web api for customer's CRM, which is asp.net based, to
make agent can click-dial in their web crm application, and playback
recordings to the agent's phone by clicking playback button beside crm
communication records. 


The above system has been put into production from today, it's fully
load-balanced asterisks based call queues or call centers. the gateways ,
the asterisk boxes can be added/removed any time. The fault asterisk box
will be detected, and bypassed from routing destinations. I wish it's a good
reference for your guys who want to create the same infrastructures.

Best Regards,

Thomas Liu
----------------------------------------------------------------------------
-----------------------------
WShuttle Infotech Ltd.  http://www.wshuttle.com / http://www.lookmypc.com 
http://www.vicidial.cn / http://www.call-center-software.com.cn
Tel: +86 20 39230098 39230096
Mobile : +86 1390 3051 930
HK DID: +852 6950 0916, Macau DID: +853 6285 0645
Email: thomas.liu at wshuttle.com
MSN:thomaslly at 21cn.com, QQ: 332148339, Skype:tonylly 
Yahoo Messenger: thomaslly 
Address:  Room# 302, Building T8, Dongmen Plaza, Shuishi Reserved Area, 
Guangzhou Higher Education Mega Center, Guangzhou, 
Guangdong Province, China.   Zip code: 510006
----------------------------------------------------------------------------
--------------

> -----Original Message-----
> From: Thomas Liu [mailto:thomas.liu at wshuttle.com]
> Sent: Wednesday, January 12, 2011 12:15 AM
> To: 'asterisk-users at lists.digium.com'
> Subject: RE: Call queues on load-balanced asterisks
> 
> Hi Pan & Dhaval,
> 
> We have implemented a FastAGI based queue with Erlang for a inbound call
> center, and call this new application as FlexQueue.
> All calls distributed on multiple asterisk boxes go through and are
controlled by
> that same remote fastagi server.
> 
> It can routing calls to any destination, by any business rules. It don't
rely on the
> db for agent/call status store & query.
> It's event driven and dict based agent/call store & query, with very good
> performance, and low cpu power consumption.
> 
> I think for your requirement, app_queue could not fulfill that.
> 
> Best Regards,
> 
> Thomas Liu
>
----------------------------------------------------------------------------
-----------------------------
> WShuttle Infotech Ltd.  http://www.wshuttle.com /
> http://www.lookmypc.com
> http://www.vicidial.cn / http://www.call-center-software.com.cn
> Tel: +86 20 39230098 39230096
> Mobile : +86 1390 3051 930
> HK DID: +852 6950 0916, Macau DID: +853 6285 0645
> Email: thomas.liu at wshuttle.com
> MSN:thomaslly at 21cn.com, QQ: 332148339, Skype:tonylly
> Yahoo Messenger: thomaslly
> Address:  Room# 302, Building T8, Dongmen Plaza, Shuishi Reserved Area,
> Guangzhou Higher Education Mega Center, Guangzhou,
> Guangdong Province, China.   Zip code: 510006
>
----------------------------------------------------------------------------
--------------
> 
> 
> > Hello Dhaval (and others),
> >
> > As far as I can tell, realtime queue will not solve my problem. I can
statically
> > define the same queue with the same members on two machines as well. I
> was planning
> > to use realtime anyway. The issue is the actual queueing of the incoming
> calls.
> >
> > Let?s say I define the queue "IT-support" with members Local/100 and
> Local/101
> > on both machines. The first call comes in and is distributed by Kamailio
to
> Asterisk
> > A, and answered by 100. The next call comes in to Asterisk B, and is
> answered by
> > 101. At this point, both members are busy. Call 3 now comes in and is
sent to
> Asterisk
> > A, where it waits for a free member. Call 4 comes in and is also sent to
> Asterisk
> > A, as is Call 5. Then call 6 is sent to Asterisk B. At this point 100
finishes
> > his call and becomes free. Which call is delivered to 100? As far as I
can tell,
> > that?s a 50/50 chance between call 3 and call 6. This is not correct
behaviour!
> > Call 6 should wait until calls 3, 4 and 5 (from the other server) have
all been
> > delivered.
> >
> > In the example above: When call 3 comes in, Asterisk A may even try to
> deliver
> > it to 101, who gets call waiting indication. He will now have two
simultaneous
> > calls from the same queue!
> >
> > I have not found any way to share information about calls waiting in the
> queue,
> > wait times, member states and so on between the two servers.
> >
> > Unless you guys know of a way, I think I'm going to have to ask the
customer
> to
> > change their design to master-slave (with failover) instead of
load-balanced.
> >
> > With kind regards,
> > Pan
> >
> > > Hello Pan,
> > >
> > > You can user DB for this just make real time configuration of Queue
and
> make
> > > all asterisk server connected to Same DB if more load then use
replication
> > > for different server on DB, also So that Quque name should be same for
all
> > > server and asterisk can call same agent.
> > >
> > > you didnot mentioned that which purpose youwere use queue other wise i
> can
> > > give answer in better way.
> > >
> > > regards
> > > Dhaval
> > >
> > > On Fri, Jan 7, 2011 at 5:08 PM, Pan B. Christensen <pan at ibidium.no>
> wrote:
> > >
> > >>  Hello,
> > >>
> > >> I have been asked to implement the following design:
> > >>
> > >> Load-balanced Kamailio servers handling registrations and routing.
> > >> Load-balanced asterisk feature servers handling voicemail and other
> things
> > >> Kamailio cannot do. Plus several load-balanced gateways, but they are
not
> > >> relevant to my question.
> > >>
> > >> All this is working fine.
> > >>
> > >> I've now been asked to start implementing calling queues, and my
> question
> > >> is this:
> > >> How can I implement the same queue on multiple Asterisk servers?
> > >>
> > >> Let's say that 10 people call the same queue. These calls would then
> > >> currently be distributed 5 to Asterisk A and 5 to Asterisk B. How can
I
> make
> > >> Asterisk A respect the 5 people queued on the other server and vice
> versa?
> > >>
> > >> Will the customer need to change their design to make the feature
servers
> > >> master-slave with failover instead of load-balanced?
> > >>
> > >> Mvh
> > >> Pan




More information about the asterisk-users mailing list