ok. i understand

but the use case is

- the call is ringing to agent (queue member selected)

- caller hangs

- queue_log is run from queue_exec (but i expected queue_log from try_calling)

i'll try investigate it deeper and fill bug if it looks like a bug

Dne 15/12/2016 v 23:11 Matthew Jordan napsal(a):

On Thu, Dec 15, 2016 at 10:17 AM, marek cervenka <[email protected] <mailto:[email protected]>> 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 <[email protected]> <mailto:[email protected]>
    Komu:       Asterisk Users Mailing List - Non-Commercial Discussion
    <[email protected]>
    <mailto:[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
    <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
<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

-- 
_____________________________________________________________________
-- 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