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



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

Reply via email to