[asterisk-dev] app_queue missed calls per agent - caller hangup before timeout

Matthew Jordan mjordan at digium.com
Thu Dec 15 16:11:05 CST 2016


On Thu, Dec 15, 2016 at 10:17 AM, marek cervenka <cervajs2 at gmail.com> wrote:

> i think i foud possible solution. can you confirm if i'm on correct path?
>
> sql data looks
>
> +-----+----------------------------+-----------------+------
> -----+-------+---------+-------+-------+-------+-------+-------+
> | id  | time                       | callid          | queuename | agent |
> event   | data1 | data2 | data3 | data4 | data5 |
> | 165913 | 2016-12-14 11:01:20.965839 | 1481709660.56899  | queue1     |
> NONE  | ABANDON | 1     | 1     | 9     |       |       |
>
> data3 contains ringtime but agent is filled as "NONE"
>
>
> in app_queue there are 2 places which fills ABANDON
>
>
> function queue_exec
>
> stop:
>     if (res) {
>         if (res < 0) {
>             if (!qe.handled) {
>                 record_abandoned(&qe);
> *                ast_queue_log(args.queuename, ast_channel_uniqueid(chan),
> "NONE", "ABANDON",   "%d|%d|%ld", qe.pos, qe.opos,  (long) (time(NULL) -
> qe.start));*
>                 res = -1;
>             } else if (qcontinue) {
>                 reason = QUEUE_CONTINUE;
>                 res = 0;
>             }
>         } else if (qe.valid_digits) {
>             ast_queue_log(args.queuename, ast_channel_uniqueid(chan),
> "NONE", "EXITWITHKEY",
>                 "%s|%d|%d|%ld", qe.digits, qe.pos, qe.opos, (long)
> (time(NULL) - qe.start));
> }
>
>
> BUT
>
> in try_calling function
>
> there is member filled
>
> } else if (ast_check_hangup(qe->chan)) {
>                 /* Caller must have hung up just before being connected */
>                 ast_log(LOG_NOTICE, "Caller was about to talk to agent on
> %s but the caller hungup.\n", ast_channel_name(peer));
> *                ast_queue_log(queuename, ast_channel_uniqueid(qe->chan),
> member->membername, "ABANDON", "%d|%d|%ld", qe->pos, qe->opos, (long)
> (time(NULL) - qe->start));*
>                 record_abandoned(qe);
>                 ast_channel_publish_dial(qe->chan, peer,
> member->interface, ast_hangup_cause_to_dial_status(ast_channel_
> hangupcause(peer)));
>                 ast_autoservice_chan_hangup_peer(qe->chan, peer);
>                 ao2_ref(member, -1);
>                 return -1;
> }
>
>
> why isnt used the try_calling to fill ABANDON?
>
> is it safe fill member (if exist) in queue_exec?
>
>
These two locations are fulfilling two different purposes.

The first, in queue_exec, handles the case where the caller abandons the
queue prior to any queue member being selected. The second, as the comment
suggests, handles the case where the caller abandons the queue after the
queue member has been selected but before the two parties have been
connected.

As such, no, you cannot get a queue member name in queue_exec, as there is
no queue member that has been chosen.





>
> -------- Přeposlaná zpráva --------
> Předmět: app_queue missed calls per agent - caller hangup before timeout
> Datum: Wed, 14 Dec 2016 14:26:21 +0100
> Od: marek cervenka <cervajs2 at gmail.com> <cervajs2 at gmail.com>
> Komu: Asterisk Users Mailing List - Non-Commercial Discussion
> <asterisk-users at lists.digium.com> <asterisk-users at lists.digium.com>
>
>
> hi,
>
> i'm trying get report about missed calls per agent. i'm using queue_log
> and RINGNOANSWER event
> but i found problem described here
>
> ---https://www.thirdlane.com/forum/queue-log-problem
>
> RINGNOANSWER only happens if the call TIMES OUT ringing the agent and it
> returns to the queue. If your agent has a 30 second timeout and the
> caller ABANDONS the call in 5 seconds it will log an ABANDON not a
> RINGNOANSWER.
>
> This is the only time ast_queue_log is executed with RINGNOANSWER. The
> subsequent code of this function goes on to autopause the agent/member
> if autopause is enabled. Not something that happens when callers hang up
> when ringing the agents.
>
> /*! \brief RNA == Ring No Answer. Common code that is executed when we
> try a queue member and they don't answer. */
> static void rna(int rnatime, struct queue_ent *qe, char *interface, char
> *membername)
> {
> if (option_verbose > 2)
> ast_verbose( VERBOSE_PREFIX_3 "Nobody picked up in %d ms\n", rnatime);
> ast_queue_log(qe->parent->name, qe->chan->uniqueid, membername,
> "RINGNOANSWER", "%d", rnatime);
> ---
>
>
> any tips howto detect missed calls where caller hangup before timeout?
> tnx
> Marek
>
>
> --
> _____________________________________________________________________
> -- Bandwidth and Colocation Provided by http://www.api-digital.com --
>
> asterisk-dev mailing list
> To UNSUBSCRIBE or update options visit:
>    http://lists.digium.com/mailman/listinfo/asterisk-dev
>



-- 
Matthew Jordan
Digium, Inc. | CTO
445 Jan Davis Drive NW - Huntsville, AL 35806 - USA
Check us out at: http://digium.com & http://asterisk.org
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.digium.com/pipermail/asterisk-dev/attachments/20161215/8cd06331/attachment.html>


More information about the asterisk-dev mailing list