QueueMetrics > Outbound and QueueMetrics

queueDial.agi not working

(1/2) > >>

tank30:
I am using Asterisk 1.4.11 on Debian etch. I am trying to implement outbound queue but it seems that agi is not executing succesfully:

    -- Executing [dial-SIP@macro-KM-Dialout-base:5] DeadAGI("SIP/391-b5766b60", "queueDial.agi|22693314|SIP/22693314@PRDSER|Outbound|Agent/392") in new stack
[Jan 31 17:15:26] WARNING[19519]: res_agi.c:2089 deadagi_exec: Running DeadAGI on a live channel will cause problems, please use AGI
    -- Launched AGI Script /var/lib/asterisk/agi-bin/queueDial.agi
    -- AGI Script queueDial.agi completed, returning 0


I do not see anything on asterisk console being executed by the agi script.  Script is the untouched file that i got from qm.


cassius:/var/lib/asterisk/agi-bin# cat queueDial.agi
#!/usr/bin/perl
$|=1;

print STDERR "started agi script \n"

#
# Outbound call queue events generator
#      (c) 2006, 2007 Loway - All rights reserved.
#          This software is a part of QueueMetrics.
#          http://queuemetrics.com
#
# $Id: queueDial.agi,v 1.5 2007/04/18 12:07:46 lenz Exp $
#
# This script emulates queue_log events for outgoing calls.
# Use:
# exten => 426,1,DeadAGI(queueDial.agi|34|SIP/34|queue-dps|Agent/101)
#
# The following params must be passed:
# - the caller*ID of the number you are trying to dial. Usually the number itself.
# - the actual dial string, like SIP/34, or IAX2/usr:pass@iax.server/34
# - the outbound queue to be used for accounting. Must be defined in QueueMetrics
# - the agent placing the call. Like Agent/123
#
# RESULTS
# If the call can go through, the events ENTERQUEUE, CONNECT and COMPLETEAGENT or
# COMPLETECALLER will be generated on the system queue_log file.
# If the call is not answered, the events ENTERQUEUE and ABANDON are generated.
#
# Extensive debugging output available at $logfile
#

my $logfile  = "/var/log/asterisk/agi-log.txt";
my $queuelog = "/var/log/asterisk/queue_log";

# Entering the program
logit(0,  "QueueDial ---- " . $ARGV[0] . "- " . $ARGV[1] ."----" . (scalar localtime) );

my $NUMBER  = $ARGV[0];
my $CHANNEL = $ARGV[1];
my $QUEUE   = $ARGV[2];
my $AGENT   = $ARGV[3];

logit( 0, "Dial Num: '$NUMBER' Chan: '$CHANNEL' on Queue: '$QUEUE' Agent: '$AGENT'");

#legge stdin
my %AGI_IN;
while ( my $rl = <STDIN>  ){
        chomp $rl;
        $AGI_IN{$1} = $2 if $rl =~ /^(.+?): (.+)/;
#       logit(0, "In:   $1: '$2'");
        last if length( $rl ) == 0;
}
#logit( 0, "-fine args-");
my $callId = $AGI_IN{'agi_uniqueid'};

#imposta le variabili del canale che saranno lette dal manager
setVar( "QDIALER_NUMBER" , $NUMBER );
setVar( "QDIALER_CHANNEL", $CHANNEL);
setVar( "QDIALER_QUEUE"  , $QUEUE  );
setVar( "QueueName"      , $QUEUE  );
setVar( "QDIALER_AGENT"  , $AGENT  );
#setVar( "CDR(accountcode)", "1234" );


my $nowStart = time();
logQueue( $nowStart, $callId, $QUEUE, "NONE", "ENTERQUEUE", "-", $NUMBER );
logQueue( $nowStart, $callId, $QUEUE, $AGENT, "CONNECT", 0, "" );
#logit( 0, "Chiamo $CHANNEL" );

$whoHung = cmd( "EXEC dial \"$CHANNEL||g\"" );

my $nowEnd = time();
my $asweredTime = getVar( "ANSWEREDTIME" )  ;
my $dialStatus  = getVar( "DIALSTATUS" );
$answeredTime = getVar( "ANSWEREDTIME" ) ;

logit(0, "Hangup: '$whoHung' AT: '$answeredTime' DS: '$dialStatus'" );

if ( $answeredTime == 0 ) {
        my $waitTime = ( $nowEnd - $nowStart );
        logit( 0, "EXITTIMEOUT $nowEnd" );
        logQueue( $nowEnd, $callId, $QUEUE, "NONE", "ABANDON", "1", "1|$waitTime" );
} else {
        my $waitTime = ( $nowEnd - $nowStart ) - $answeredTime;
        my $connectTime = $nowEnd - $answeredTime;
        my $verb = ( $whoHung ? "COMPLETEAGENT" : "COMPLETECALLER" );

        logit( 0, "$connectTime - $nowEnd - $verb - $waitTime - $answeredTime ");

        logQueue( $connectTime, $callId, $QUEUE, $AGENT, "CONNECT", $waitTime, "" );
        logQueue( $nowEnd,      $callId, $QUEUE, $AGENT, $verb, $waitTime, $answeredTime );
}

logit( 0, "Terminating" );

exit;



#
# appoggio
#

sub logit {
        my ($level, $string) = @_;
        open L, ">>$logfile" or die "$! $logfile";
        print L "*" . $string . "\n";
        close L;
}

sub cmd {
        my ( $c ) = @_;
        print $c . "\n";
        my $rIn = <STDIN>;
        my $res = "";
        logit( 1, "Cmd: $c\n" );
        logit( 1, "  A: $rIn\n" );
        $res = $1 if $rIn =~ /^200 result=(.+)/;
        return $res;
}

sub getVar {
        my ( $v ) = @_;
        print "GET VARIABLE $v\n";
        my $rIn = <STDIN>;
        my $rOut = "";
        $rOut = "$1" if $rIn =~ /^200 result=1 \((.+)\)/;
        logit( 0, "GetVar: '$v' = '$rOut'");
        return $rOut;
}

sub setVar {
        my ( $var, $val ) = @_;
        print "SET VARIABLE $var $val\n";
        my $rIn = <STDIN>;
        logit( 0, "SetVar: '$var' = '$val' - $rIn" );
}

sub logQueue {
        my ( $t, $c, $q, $a, $p1, $p2, $p3 ) = @_;
        open F, ">>$queuelog" or die "$!";
        print F "$t|$c|$q|$a|$p1|$p2|$p3\n";
        close F;
}



# ===================================================================
# $Log: queueDial.agi,v $
# Revision 1.5  2007/04/18 12:07:46  lenz
# Copyright messages.
#
# Revision 1.4  2007/04/14 10:09:11  lenz
# Aggiunta var standard QueueName al canale.
#
# Revision 1.3  2007/03/29 21:29:43  lenz
# Channel variables per Manager
#
#

Any help would be appreciated    ;)

KM

QueueMetrics:
See http://queuemetrics.com/faq.jsp#faq-014-agi

tank30:
dos2unix actually made the script being executed, thank you!

I missed this in the faq... ::)

QueueMetrics:
Don't worry, that's why we have FAQs  ;D

Wessel:
Addition to the FAQ
4. Check if the file /var/log/asterisk/agi-log.txt is read/writeable by Asterisk


Wessel

Navigation

[0] Message Index

[#] Next page

Go to full version