このページは役立ちましたか?

サンプル:キューのコール数に応じて処理を変更するAGIスクリプト

目次
ヘッダーがありません

 このスクリプトは、指定したキューに関するコール数を調べ、しきい値と比較した後、任意のサブメニューに移動するスクリプトのサンプルです。Runscript(コマンドを実行)というメニューから利用できます。

#!/usr/bin/perl
use strict;
use Asterisk::Manager;
use Asterisk::AGI;

###################################################################
# 2010 Communication Business Avenue, Inc.
# GoToNextSubMenu Script
# goto_nextsubmenu.agi QUEUE1 CallsNum SUBMENU1 SUBMENU2
# if Calls=<callsnum _x002D_=""> goto SUBMENU1
# if Calls>CallsNum  -> goto SUBMENU2
###################################################################

$|=1;

# Setup some variables
my %AGI; my $tests = 0; my $fail = 0; my $pass = 0;
use vars qw($astagi $astman $filename);
$astagi = new Asterisk::AGI;
$astman = new Asterisk::Manager;

$astagi->verbose("*********** GotoNextSubmenu Check Start......");

# grab the queue1
my $queue1 = shift;        
$queue1 =~ s/([_\-0-9a-zA-Z]*?)/$1/;
$queue1 = trim($queue1);
$astagi->verbose("*********** QUEUE1=".$queue1);

# grab the callNum
my $callnum = shift;        
$callnum =~ s/([0-9]*?)/$1/;
$astagi->verbose("*********** CallNum=".$callnum);

# grab the submenu1
my $submenu1 = shift;        
$submenu1 =~ s/([_\-0-9a-zA-Z]*?)/$1/;
$submenu1 = trim($submenu1);
$astagi->verbose("*********** SUBMENU1=".$submenu1);

# grab the submenu2
my $submenu2 = shift;        
$submenu2 =~ s/([_\-0-9a-zA-Z]*?)/$1/;
$submenu2 = trim($submenu2);
$astagi->verbose("*********** SUBMENU2=".$submenu2);

$astman->user('AMIユーザ名');
$astman->secret('AMIパスワード');
$astman->host('localhost');
$astman->setcallback('DEFAULT', \&default_callback);
$astman->connect || die $astman->error . "\n";
my $res = $astman->sendcommand( Action => 'QueueStatus',
                      Queue  => $queue1,
                      Member => 'dummy111222333444555'
                    );
$astagi->verbose("*********** res==".$res);
$astman->eventloop;
$astman->disconnect;

sub default_callback {
    my $flag = 0;
    my $calls = 0;

	my (%stuff) = @_;

        foreach ( keys %stuff) {
             #$astagi->verbose("## key $_ ==>".$stuff{$_}."\n");
        }

	foreach (keys %stuff) {

		if($stuff{$_} eq "QueueStatusComplete"){
			$flag = 1;
                       $astagi->verbose("***END OF THE DATA***");
		}else {
			my $element = $_;
			if($element){

                            if($element eq "Calls"){
                              $calls = $stuff{$_};
                              $astagi->verbose("**** Found calls:".$calls);
           		      $astman->sendcommand( Action => 'Logoff');
		              $flag = 1;
                            }

                            #$astagi->verbose($element.":".$stuff{$_});
			}
		}
		
	}
	if($flag){
		$astman->sendcommand( Action => 'Logoff');

#################
# Last check
#################
	if($calls < $callnum){
          $astagi->verbose("******** GOTO SUBMENU1:".$submenu1." **********");
          $astagi->exec("GOTO ".$submenu1."|s|1");
        } else {
          $astagi->verbose("******** GOTO SUBMENU2:".$submenu2." **********");
          $astagi->exec("GOTO ".$submenu2."|s|1");
        }
#################
		exit(0);
	}
}

sub trim {
    my @out = @_;
    for (@out) {
        s/^\s+//;
        s/\s+$//;
    }
    return wantarray ? @out : $out[0];
}

sub checkresult {

return;

	my ($res) = @_;
	my $retval;
	$tests++;
	chomp $res;
	if ($res =~ /^200/) {
		$res =~ /result=(-?\d+)/;
		if (!length($1)) {
			print STDERR "FAIL ($res)\n";
			$fail++;
		} else {
			print STDERR "PASS ($1)\n";
			$pass++;
		}
	} else {
		print STDERR "FAIL (unexpected result '$res')\n";
		$fail++;
	}
}
</callsnum>
このページは役立ちましたか?
タグ (タグ編集)
  • No tags

ファイル 0

 
あなたはコメントを投稿するには ログイン しなければなりません。
Powered by MindTouch Core