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

marek cervenka cervajs2 at gmail.com
Thu Dec 15 10:17:07 CST 2016


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?



-------- 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>
Komu: 	Asterisk Users Mailing List - Non-Commercial Discussion 
<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

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.digium.com/pipermail/asterisk-dev/attachments/20161215/d5b822a8/attachment.html>


More information about the asterisk-dev mailing list