get_variable perl

benkokakao

Neuer User
Mitglied seit
20 Mrz 2006
Beiträge
9
Punkte für Reaktionen
0
Punkte
0
Hallo!

Ich hab gleich fuer mein erstes Posting ein dummes Problem, und zwar versuche ich folgendes simple perl-skript zum laufen zu bekommen:

Code:
#!/usr/bin/perl
use Asterisk::AGI;
 $AGI = new Asterisk::AGI;

$dialstr = $AGI->get_variable("DIALSTRING");
$res = $AGI->exec("DIAL $dialstr");

sollte ja eigentlich problemlos die variable $dialstr auf den DIALSTRING setzen(Den ich zuvor natuerlich im Dialplan gesetzt habe). Einlesen kann ich sie lt. agi-debug schonmal, nur beim setzen der variable scheints zu hapern:

Code:
AGI Rx << GET VARIABLE DIALSTRING
AGI Tx >> 200 result=1 (Zap/G1/015323200300)
AGI Rx << EXEC DIAL  ""
    -- AGI Script Executing Application: (DIAL) Options: ()
Mar 20 14:00:42 WARNING[27259]: app_dial.c:773 dial_exec_full: Dial requires an argument (technology/number)

asterisk bekommt den wert von DIALSTRING zwar und versucht dann das dial command abzusetzen, die variable $dialstr ist aber leer. wenn ich sie manuell mit z.B. "$dialstr = Zap/G1/454353242" setze, funktioniert der befehl und ein call wird abgesetzt. Hat jemand eine idee wo hier der fehler liegt? danke vielmals!
 
Versuch's mal mit:

$res = $AGI->exec('DIAL', $dialstr);


Gruß,
Tin
 
danke fuer die antwort - am dialcommand liegts aber nicht.

folgende version funktioniert problemlos:
Code:
#!/usr/bin/perl
use Asterisk::AGI;
 $AGI = new Asterisk::AGI;

$dialstr = "Zap/G1/089234234";
$res = $AGI->exec("DIAL $dialstr");

es haengt also mit dem einlesen der variable zusammen, keine ahnung warum das nicht klappt, ich habs direkt aus astcc uebernommen...:noidea:
 
Zuletzt bearbeitet:
Hast Du's denn überhaupt ausprobiert mit

$res = $AGI->exec('Dial', $dialstr);

oder ist das jetzt nur eine Vermutung von Dir, dass es damit auch nicht klappt? Obiges ist die korrekte Syntax (Komma beachten) soweit mir bekannt.
Was sagt Debug in diesem Fall?

Nach Deinem Debug-output zu urteilen ist DIALSTRING ja korrekt eingelesen worden...

Gruß,
Tin
 
ja, habs probiert ;-):
Code:
AGI Rx << GET VARIABLE DIALSTRING
AGI Tx >> 200 result=1 (Zap/G1/089234234)
AGI Rx << EXEC DIAL ""
    -- AGI Script Executing Application: (DIAL) Options: ()
Mar 20 15:07:23 WARNING[32536]: app_dial.c:773 dial_exec_full: Dial requires an argument (technology/number)
AGI Tx >> 200 result=-1

die variable $dialstr wird scheinbar nicht gesetzt und bleibt null - ich habs wie gesagt probiert sie manuell zu setzen und dann klappts auch...
 
und hiermit?

#!/usr/bin/perl
use Asterisk::AGI;
$AGI = new Asterisk::AGI;
%input = $AGI->Readparse();

$dialstr = $AGI->get_variable("DIALSTRING");
$res = $AGI->exec('Dial', $dialstr);
 
Zuletzt bearbeitet:
Das Asterisk-Perl Package hast Du installiert, oder? Das brauchst Du auf jeden Fall...

http://asterisk.gnuinter.net/

[Edit]
Auf voip-info.org steht übrigens noch:

1. GET VARIABLE: Does not work with global variables. Does not work with some variables that are generated by modules.

2.$agi->verbose nicht vor get_variable benutzen:
As Nasim said in *-dev list, do not use $agi->verbose before $agi->get_variable.
You still can have debug log in a file, etc....
 
Zuletzt bearbeitet:
danke fuer deine geduld
icon14.gif

die bibliothek ist installiert:
Code:
ls -l /usr/lib/perl5/site_perl/5.8.7/Asterisk/
total 40
-r--r--r--  1 root root 13274 Aug  7  2003 AGI.pm
-r--r--r--  1 root root  6193 Jun 14  2003 Manager.pm
-r--r--r--  1 root root  1968 Jun  9  2003 Outgoing.pm
-r--r--r--  1 root root  1138 Sep 26  2002 QCall.pm
-r--r--r--  1 root root  5533 Jun  9  2003 Voicemail.pm

muss ich die noch irgendwie in asterisk speziell laden oder so? in der readme zum package steht zumindest nix davon...

mit dem Readparse funktionierts ebenfalls nicht, damit bekomm ich aber schon im "trockenlauf"(also beim manuellen starten des scripts) folgende Fehlermeldung:
Code:
Can't locate object method "Readparse" via package "Asterisk::AGI" at ./dialscript.pl line 4.

die variable $DIALSTRING setze ich direkt vor aufruf des deadagi, die verbose-funktion benutz ich auch nicht, sondern 1:1 das 7-zeilen script... irgendwo ist das ein ganz bloeder fisch drin :mad:
 
So, ich hatte jetzt ein bißchen Zeit das selbst auszutesten. Habe die gleichen Probleme wie Du, mit eigener Zuweisung im AGI Skript funktioniert es, mit get_variable nicht. Vielleicht hat sich da eine Inkompatibilität eingeschlichen zu Asterisk 1.2.5...

Eine andere Möglichkeit wäre, die Variable mit an das Skript zu übergeben denke ich.

Gruß,
Tin
 
ok, vielen dank ;-) ich habs derweil mit bash geloest, werd mal schaun obs in ein paar wochen was neues dazu gibt... vielen dank nochmal fuer deine hilfe!

wie funktioniert das eigentlich bei perl, eine variable uebergeben? mit $1 ja mal nicht...
 
Hat mir ja irgendwie keine Ruhe gelassen, habe es doch noch hinbekommen:

extensions.conf
Code:
exten => _X.,1,Answer
exten => _X.,2,Set(DIALSTRING=SIP/xxx@yyy) ;keine Blanks um das "=" 
exten => _X.,3,AGI(MyAGI.agi)
exten => _X.,4,Hangup

Perl Skript MyAGI.agi
Code:
#!/usr/bin/perl

use Asterisk::AGI;

$AGI = new Asterisk::AGI;

my %input = $AGI->ReadParse();
my $ergebnis = $AGI->get_variable("DIALSTRING");

$AGI->exec('Dial', $ergebnis);

Gruß,
Tin
 
Zuletzt bearbeitet:
ah, das "my" kommt mir auch bekannt vor, jetzt wo ichs seh...(von astcc)
super TinTin - du :rock:st ;-)
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.