Re: [asterisk-users] Call queues on load-balanced asterisks
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
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
_ 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
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
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
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