(Kleiner) Fehler im AGI

JoelM

Neuer User
Mitglied seit
18 Feb 2010
Beiträge
20
Punkte für Reaktionen
0
Punkte
0
Huhu,

ich schon wieder :p

Habe irgendwie ein kleines Problem mit meinem AGI-Skript. Ich meine das lief schonmal genauso, aber scheinbar hat sich was an den Randbedingungen geändert (habe auf ISDN umgestellt) oder aber ich habe irgendwo was verändert ...

Folgende Ausgabe auf der CLI bekomme ich, wenn ich die Nummer anrufe:
Code:
Executing Answer("Zap/1-1", "") in new stack
    -- Accepting voice call from '654321' to '123456' on channel 0/1, span 1
    -- Executing Wait("Zap/1-1", "2") in new stack
    -- Executing AGI("Zap/1-1", "sperre_ast.pl") in new stack
    -- Launched AGI Script /var/lib/asterisk/agi-bin/sperre_ast.pl
FAIL (unexpected result 'agi_channel: Zap/1-1')
    -- AGI Script Executing Application: (PLAYBACK) Options: (hello-world)
    -- Playing 'hello-world' (language 'en')
[COLOR="Red"][B]    -- AGI Script Executing Application: (READ) Options: (nummer,beep,1)
    -- User entered '2'[/B][/COLOR]
    -- AGI Script Executing Application: (SAYDIGITS) Options: (0)
[COLOR="Red"][B]    -- Playing 'digits/0' (language 'en')[/B][/COLOR]
    -- AGI Script sperre_ast.pl completed, returning 0
    -- Executing Wait("Zap/1-1", "2") in new stack
    -- Executing Hangup("Zap/1-1", "") in new stack
  == Spawn extension (isdn, 123456, 5) exited non-zero on 'Zap/1-1'
    -- Hungup 'Zap/1-1'


Das AGI-Skript schaut so aus:
Code:
#!/usr/bin/perl


sub checkresult
    {
    my ($res) = @_;
    my $retval;
    $tests++;
    chomp $res;

        if ($res =~ /^200/)
                {
                $res =~ /result=1 \((\d+)\)/;
                if (!length($1))
                        {
                        print STDERR "FAIL ($res)\n";
                        $fail++;
                        }
                else
                        {
                        print STDERR "PASS ($1)\n";
                        $pass++;
                        return $1;
                        }
                }
        else
                {
                print STDERR "FAIL (unexpected result '$res')\n";
                $fail++;
                }
     }


print "EXEC PLAYBACK hello-world\n";
print "EXEC READ nummer,beep,1\n";
my $result = <STDIN>;
print "GET VARIABLE nummer\n";
my $in = <STDIN>;
my $choice = &checkresult($in);


print "EXEC SAYDIGITS $choice\n";
my $say = <STDIN>;


Ich gebe eine '2' ein und er liest aber '0' vor :(
Irgendwo steckt wohl ein kleiner Fehler drin.
Ich hoffe mir kann jemand helfen :)


Gruß Joel
 
Hallo Joel,

mit dem hier ganz am Anfang
Code:
$|=1;

while(<STDIN>) {
	chomp;
	last unless length($_);
	if (/^agi_(\w+)\:\s+(.*)$/) {
		$AGI{$1} = $2;
	}
}

und dem hier

Code:
my $hello = <STDIN>;

nach dem Hello-World bleibt der Puffer schön sauber und Du solltest Deine 2 bekommen.

Svenja
 
Guten morgen Svenja,

danke für die Hilfe.
Das war es aber nicht (allein) :)

Es kam mal wieder auf die Syntax im GET VARIABLE-Befehl an ... das hatten wir doch schonmal :)

Einen schönen Start in die Woche!
 
Zuletzt bearbeitet:
Guten Morgen Joel,

wo denn? Weil bei mir lief's mit den obigen Änderungen sauber durch.

Ich kann mich erinnern, dass da schon mal was in die Richtung war. Aber das war doch deshalb, weil Du früher mal WaitForDigit verwendet hattest, oder?

Svenja
 

Zurzeit aktive Besucher

Statistik des Forums

Themen
246,284
Beiträge
2,249,439
Mitglieder
373,877
Neuestes Mitglied
Bbj
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.