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

2011-06-08 Thread Thomas Liu
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@wshuttle.com
MSN:thomas...@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@wshuttle.com]
 Sent: Wednesday, January 12, 2011 12:15 AM
 To: 'asterisk-users@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@wshuttle.com
 MSN:thomas...@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),
 

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

2011-01-13 Thread Pan B. Christensen

Hello Mr. Liu,

I tried searching for more information about FlexQueue, where to download 
etc. Google linked to vicidial.cn, which appears in your signature, but that 
page is all in chinese, and I couldn't find any english link. Where can I 
get more information about it? Is it a commercial product?


With kind regards,
Pan B. Christensen
Ibidium AS
http://www.ibidium.no

- Original Message - 
From: Thomas Liu thomas@wshuttle.com

To: asterisk-users@lists.digium.com
Sent: Tuesday, January 11, 2011 5:14 PM
Subject: Re: [asterisk-users] 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@wshuttle.com
MSN:thomas...@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



--
_
-- Bandwidth and Colocation Provided by http://www.api-digital.com --
New

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

2011-01-11 Thread Danny Nicholas
  _  

From: asterisk-users-boun...@lists.digium.com
[mailto:asterisk-users-boun...@lists.digium.com] On Behalf Of Pan B.
Christensen
Sent: Tuesday, January 11, 2011 5:20 AM
To: asterisk-users@lists.digium.com
Subject: Re: [asterisk-users] Call queues on load-balanced asterisks

 

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

 

IMO your best solution to this is going to be using a database and AGI query
to keep a quasi-real (delayed by a few ms/sec) picture of the queue
activity.  If you kept a database on both machines and ran an AGI with each
incoming call to query queue usage on both machines or better yet, query the
queue on the remote machine and spawn a short local call to keep that agent
busy on the native machine, that would solve this issue.  Let's say that a
typical agent interaction occurs in 60 second chunks.  Call 1 comes in to
machine 1 and is answered by agent 100 as you said.  Call 2 comes into
machine 2 and is answered by 101.  When Call 3 comes in, it sees 101 and 102
as busy on both machines.  

 

You can do this, but isn't this really a Kamailio issue?

--
_
-- Bandwidth and Colocation Provided by http://www.api-digital.com --
New to Asterisk? Join us for a live introductory webinar every Thurs:
   http://www.asterisk.org/hello

asterisk-users mailing list
To UNSUBSCRIBE or update options visit:
   http://lists.digium.com/mailman/listinfo/asterisk-users

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

2011-01-11 Thread Thomas Liu
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@wshuttle.com
MSN:thomas...@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


--
_
-- Bandwidth and Colocation Provided by http://www.api-digital.com --
New to Asterisk? Join us for a live introductory webinar every Thurs:
   http://www.asterisk.org/hello

asterisk-users mailing list
To UNSUBSCRIBE or update options visit:
   http://lists.digium.com/mailman/listinfo/asterisk-users


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

2011-01-08 Thread DHAVAL INDRODIYA
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 p...@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

 --
 _
 -- Bandwidth and Colocation Provided by http://www.api-digital.com --
 New to Asterisk? Join us for a live introductory webinar every Thurs:
   http://www.asterisk.org/hello

 asterisk-users mailing list
 To UNSUBSCRIBE or update options visit:
   http://lists.digium.com/mailman/listinfo/asterisk-users

--
_
-- Bandwidth and Colocation Provided by http://www.api-digital.com --
New to Asterisk? Join us for a live introductory webinar every Thurs:
   http://www.asterisk.org/hello

asterisk-users mailing list
To UNSUBSCRIBE or update options visit:
   http://lists.digium.com/mailman/listinfo/asterisk-users

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

2011-01-07 Thread Pan B. Christensen
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--
_
-- Bandwidth and Colocation Provided by http://www.api-digital.com --
New to Asterisk? Join us for a live introductory webinar every Thurs:
   http://www.asterisk.org/hello

asterisk-users mailing list
To UNSUBSCRIBE or update options visit:
   http://lists.digium.com/mailman/listinfo/asterisk-users