Je suis nouveau sur Asterisk (VoIP) et je suis plutôt nouveau sur UNIX/Perl. Je m'en remets à un collègue qui a quitté l'entreprise, donc je n'ai pas mis cela en place, j'ai juste besoin de faire quelques changements.Asterisk AGI (script Perl) - Parfois toutes les clés sont ignorées par le script
Je rencontre un problème lorsque j'utilise get_data() pour obtenir l'entrée du clavier de l'utilisateur, mais les clés sont juste ignorées et la fonction get_data() vient à expiration. J'ai essayé de réduire exactement quand cela arrive, mais chaque fois que je pense que je l'ai réduit à "ça n'arrive que quand je ...", je l'essaie à nouveau et ça marche. Le problème survient probablement dans environ 75% des cas, et avec mon manque d'expérience avec Asterisk, je n'ai aucune idée de ce qui pourrait en être la cause. Ci-dessous, un extrait de mon code que j'ai testé et reproduit le problème. Ci-dessous un extrait de mon code. Le problème est remarqué après que le fichier 'thankyouforcalling' soit diffusé au $demoFlag = $AGI->get_data("demoFlag", 10000, 1);
. Est-ce que quelqu'un a une idée de ce qui pourrait causer cela? Merci!
basic.pl:
#!/usr/bin/perl
use Asterisk::AGI;
use LWP::Simple;
use LWP::UserAgent;
use HTTP::Request;
use HTTP::Response;
my $AGI = new Asterisk::AGI;
my %input = $AGI->ReadParse();
my $loop, $env, $demoFlag, $user_id, $password, $type, $mac;
@types = ("", "u", "s");
@environments = ("prod", "test");
($seconds, $minutes, $hours, $day, $month, $year) = localtime();
$year += 1900;
$month += 1;
$date = sprintf("%04d-%02d-%02d %02d:%02d:%02d", $year, $month, $day, $hours, $minutes, $seconds);
$AGI->verbose("Call Received from ". $input{'callerid'} ." ${date}");
$lrepeat = 1;
while ($lrepeat == 1)
{
$env = 0;
$AGI->stream_file('thankyouforcalling');
do
{
$loop = 0;
$demoFlag = $AGI->get_data("demoFlag", 10000, 1); # 1 = yes, 2 = no
if ($demoFlag != 1 && $demoFlag != 2)
{
$AGI->stream_file("invalidKey");
$loop = 1;
}
} while ($loop);
if ($demoFlag == 2)
{
do
{
$loop = 0;
$user_id = $AGI->get_data("userid", 10000, 6);
if (length($user_id) != 6)
{
$AGI->stream_file("invalidEntry");
$loop = 1;
}
} while ($loop);
do
{
$loop = 0;
$password = $AGI->get_data("password", 10000, 6);
if (length($password) != 6)
{
$AGI->stream_file("invalidEntry");
$loop = 1;
}
} while ($loop);
}
do
{
$loop = 0;
$type = $AGI->get_data("type", 10000, 1); # 1 = UNIQUE, 2 = SERIAL
if ($type != 1 && $type != 2)
{
$AGI->stream_file("invalidKey");
$loop = 1;
}
} while ($loop);
do
{
$loop = 0;
my $file;
if ($type == 1) { $file = "uniqueID"; }
else { $file = "serial" }
$mac = $AGI->get_data($file, 10000, 6);
if (length($mac) != 6)
{
$AGI->stream_file("invalidEntry");
$loop = 1;
}
} while ($loop);
$lrepeat = 0;
}
$AGI->stream_file('greatAgreatday');
$AGI->hangup();
exit(0);
Aucune suggestion? Je trouve surprenant que je ne puisse pas trouver d'autres personnes posant cette question, vu que j'ai déjà vu ce problème en appelant d'autres systèmes téléphoniques automatisés, donc je ne peux pas être le premier à avoir ce problème ... – Travesty3