[asterisk-users] Realtime Call Queues : call members in certain order

Jonas Kellens jonas.kellens at telenet.be
Thu Feb 27 07:35:19 CST 2014


On 13-02-14 17:33, Steven Wheeler wrote:
>
> *From:*asterisk-users-bounces at lists.digium.com 
> [mailto:asterisk-users-bounces at lists.digium.com] *On Behalf Of *Jonas 
> Kellens
> *Sent:* Thursday, February 13, 2014 7:12 AM
> *To:* Asterisk Users Mailing List - Non-Commercial Discussion
> *Subject:* Re: [asterisk-users] Realtime Call Queues : call members in 
> certain order
>
> On 12-02-14 16:58, Steven Wheeler wrote:
>
>     *From:*asterisk-users-bounces at lists.digium.com
>     <mailto:asterisk-users-bounces at lists.digium.com>
>     [mailto:asterisk-users-bounces at lists.digium.com] *On Behalf Of
>     *Jonas Kellens
>     *Sent:* Wednesday, February 12, 2014 3:46 AM
>     *To:* Asterisk Users Mailing List - Non-Commercial Discussion
>     *Subject:* [asterisk-users] Realtime Call Queues : call members in
>     certain order
>
>     Hello,
>
>     I'm using MySQL realtime Call Queues (table /queues/ and table
>     /queue_members/).
>
>     I would like to ring the members of the call queue in a certain
>     order. Therefore I use ring strategy /lineair /and I put the
>     members into the table /queue_members/ in the order in which they
>     have to be rang.
>
>
>     So I have the queue :
>
>     | name           | musicclass | announce | context | timeout |
>     monitor_type | monitor_format | queue_youarenext | queue_thereare
>     | queue_callswaiting | queue_holdtime | queue_minutes |
>     queue_seconds | queue_lessthan | queue_thankyou | queue_reporthold
>     | announce_frequency | announce_round_seconds | announce_holdtime
>     | announce_position | retry | wrapuptime | maxlen | servicelevel |
>     strategy | joinempty | leavewhenempty | eventmemberstatus |
>     eventwhencalled | reportholdtime | memberdelay | weight |
>     timeoutrestart | periodic_announce | periodic_announce_frequency |
>     ringinuse |
>     +----------------+------------+----------+---------+---------+--------------+----------------+------------------+----------------+--------------------+----------------+---------------+---------------+----------------+----------------+------------------+--------------------+------------------------+-------------------+-------------------+-------+------------+--------+--------------+----------+-----------+----------------+-------------------+-----------------+----------------+-------------+--------+----------------+-------------------+-----------------------------+-----------+
>     | queue6 | default    | NULL     |         |      12 |
>     NULL         | NULL           | NULL             | NULL          
>     | NULL               | NULL           | NULL          |
>     NULL          | NULL           | NULL           | NULL            
>     |                 30 |                   NULL | No               
>     | yes               |     5 |         10 |      0 | NULL |
>     linear   | strict    | strict         | NULL              |
>     NULL            |           NULL |        NULL |   NULL | no
>     |                   |                           0 | no        |
>     +----------------+------------+----------+---------+---------+--------------+----------------+------------------+----------------+--------------------+----------------+---------------+---------------+----------------+----------------+------------------+--------------------+------------------------+-------------------+-------------------+-------+------------+--------+--------------+----------+-----------+----------------+-------------------+-----------------+----------------+-------------+--------+----------------+-------------------+-----------------------------+-----------+
>
>
>     and queue members :
>
>     +----------+----------------+----------------+--------------------+---------+--------+
>     | uniqueid | membername     | queue_name     | interface         
>     | penalty | paused |
>     +----------+----------------+----------------+--------------------+---------+--------+
>     |       44 | queuemem4  | queue6 | SIP/queuemem4  | 0 |   NULL |
>     |       45 | queuemem2  | queue6 | SIP/queuemem2  | 0 |   NULL |
>     |       46 | queuemem5  | queue6 | SIP/queuemem5  | 0 |   NULL |
>     |       47 | queuemem1  | queue6 | SIP/queuemem1  | 0 |   NULL |
>     |       48 | queuemem10 | queue6 | SIP/queuemem10 | 0 |   NULL |
>     |       49 | queuemem18 | queue6 | SIP/queuemem18 | 0 |   NULL |
>     |       50 | queuemem17 | queue6 | SIP/queuemem17 | 0 |   NULL |
>     |       51 | queuemem12 | queue6 | SIP/queuemem12 | 0 |   NULL |
>     |       52 | queuemem16 | queue6 | SIP/queuemem16 | 0 |   NULL |
>     |       53 | queuemem13 | queue6 | SIP/queuemem13 | 0 |   NULL |
>     +----------+----------------+----------------+--------------------+---------+--------+
>
>
>
>     You can see that the member /queuemem4/ is first in line to be
>     rang (has the first and lowest uniqueid in the table).
>
>     But the first member that is being rang, is /queuemem1/. How come ??
>
>
>     Kind regards,
>
>     Jonas.
>
>     Jonas,
>
>     We encountered the same problem. It is a bug in the Queue
>     application. The Queue application actually orders members by
>     their interface value. Here is the bug report I opened
>     https://issues.asterisk.org/jira/browse/ASTERISK-18480
>     <https://issues.asterisk.org/jira/browse/ASTERISK-18480> which was
>     closed as "Not A Bug" by Digium.  We worked around this by
>     prepending an integer (001__, 002__, ...) to the interface in the
>     database table and then removing it later in the dial plan. Hope
>     this helps.
>
>     Steven Wheeler
>
>
> Hello,
>
> thank you for your reply.
>
>
> Is it the "membername" or the "interface" that needs to be sorted to 
> have a certain order in the call queue ?
>
>
> How do you remove the prefix (integer) from a call queue member from 
> dialplan ?
>
> If you call the queue in your dialplan as follow :
>
> exten => s,n,Queue(${queuename},,,,${timeout})
>
> How can you "edit" its members ??
>
>
>
> Kind regards,
>
> Jonas.
>
> Jonas,
>
> When asterisk queries the database for queue members it sorts the 
> results based on the value of the interface column.  We use local 
> channels for calling agents (i.e. Local/001__agent at queue_calling/n) so 
> your mileage may vary. To strip off the prefix we have the following 
> in our queue_calling context.
>
> [queue_calling]
>
> exten => _XXX__[A-Za-z0-9*#].,1,Goto(${EXTEN:5},1)
>
> exten => _[A-Za-z0-9*#].,1,...
>
> ... Logic to call the agent's SIP phone ...
>
>

Hello,

I have tried this logic with Local channels and a prefix for sorting in 
the database, but this creates another problem :

Seemingly my Call Queue is empty, because I get a QUEUESTATUS = JOINEMPTY

This is now my data in my table :

+----------+-------------+--------------+--------------------------------------------+---------+--------+
| uniqueid | membername  | queue_name   | 
interface                                  | penalty | paused |
+----------+-------------+--------------+--------------------------------------------+---------+--------+
|     2381 | 3232323232  | voipq4       | 
Local/01_3232323232 at ExternalCallFromQueue  |       0 |   NULL |
|     2382 | voip1              | voipq4       | 
Local/02_voip1 at ExternalCallFromQueue             |       0 |   NULL |
|     2383 | voip2              | voipq4       | 
Local/03_voip2 at ExternalCallFromQueue             |       0 |   NULL |
|     2384 | 3131313131  | voipq4       | 
Local/04_3131313131 at ExternalCallFromQueue  |       0 |   NULL |
+----------+-------------+--------------+--------------------------------------------+---------+--------+


How can I make the queue members to be logged in to the call queue for 
accepting calls ?


Kind regards,

Jonas.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.digium.com/pipermail/asterisk-users/attachments/20140227/a4771634/attachment.html>


More information about the asterisk-users mailing list