Variable inkrementieren

rethus

Neuer User
Mitglied seit
7 Jul 2007
Beiträge
137
Punkte für Reaktionen
0
Punkte
16
Ich habe folgendes kleines Script, welches die variable bis 3 hochzählen soll. Leider bekomme ich von der extensions.conf keine Rückmeldung über den Wert der Variable:

PHP:
$pin_entry = $agi->get_variable("PIN_ENTRY");
if($pin_entry['result']<= 3){
	    $i=(int) $pin_entry['result']++;
  	    $agi->set_variable("PIN_ENTRY","$i");
	    $agi->exec_goto("authenticate","1","1");	
            exit;
}

Verwendet wird das PHP-Agi-Script welches für get und set folgende funktionen verwendet:

PHP:
function get_variable($variable)
    {
      return $this->evaluate("GET VARIABLE $variable");
    }
 function set_variable($variable, $value)
    {
      $value = str_replace("\n", '\n', addslashes($value));
      return $this->evaluate("SET VARIABLE $variable \"$value\"");
    }

Wie bekomme ich es hin, dass er die Zählervariable zwischenspeichert, aber auch so, dass wenn 3 oder 5 User gleichtzeitig einen Pin eingeben (also diese max 3 Versuch-variable nutzen) es nicht zu überschneidungen führt?
 
warum löst Du das nicht mit Asterisk-internen Variablen? Das Zauberwort für Deine Anforderung heißt Channel-Variable
 
Kannst du das genauer erklären. Ich glaube das ich das Prinzip nicht ganz gerafft habe. Hate schon etwas mit den Variablen mit führenden _ probiert, ging aber auch alle nicht.

Könntest du da mal ein Beispiel posten. Eigentlich ist ja so ne Variablen-Zuweisung keine Hexerei. Aber momentan blick ich bei Asterisk nicht durch.
 
Das ist doch ganz einfach. Jede Variable, die Du erst im Kontext eines aufgebauten Channels (vereinfacht: während eines Anrufes) definierst, ist nur für diesen einzelnen Anruf zuständig. Einfachstes Beispiel ist die (asteriskeigene) Variable ${EXTEN} die bei 50 gleichzeitigen Anrufen auch 50 Mal einen anderen Wert hat.

Der Unterstrich am Variablennamen hat etwas mit Vererbungsregeln zu tun, was aber in Deiner Aufgabenstellung völlig irrelevant ist.
 
Für mich schaut das nicht schlecht aus. Was sagt denn die CLI dazu? Vielleicht fällt da was auf.

Rentier
 
Also ich definiere die Variable wie oben im Script angezeigt.
Resultat ist, dass beim Anruf die Variable 0 ist, nach der ersten Falscheingabe 1, und danach 1 bleibt.

Ursache ist meiner Meinung, dass die Variable den Wert gar nicht zugeordnet bekommt, und durch das inkrementieren der Variable somit immer von 0 auf 1 gesetzt wird.
 
Genau deshalb würde mich die Ausgabe der CLI (mit verbose 5) interessieren, weil man dann sehen könnte, was Asterisk zum setzen der Variable sagt.
 
Ok, hab verbose 5 eingestellt, und da gibt er mir folgendes aus:

Code:
    -- AGI Script Executing Application: (Goto) Options: (auth,auth,1)
    -- Goto (auth,auth,1)
    -- AGI Script Executing Application: (Goto) Options: (auth,auth,1)
    -- Goto (auth,auth,1)
    -- <SIP/dev-b6eefb40>AGI Script test.php completed, returning 0
    -- Executing [auth@auth:1] AGI("SIP/dev-b6eefb40", "test.php") in new stack
    -- Launched AGI Script /home/contio/htdocs/agi-bin/test.php
    -- <SIP/dev-b6eefb40> Playing '/usr/share/asterisk/sounds/de/conf-getpin.gsm' (language 'de')
 
Da man im CLI keine Fehler sieht, hab ich mir mal das PHPAGI genauer angesehen. Mit ['result'] bekommt man den Rückgabewert des Kommandos, das ist in Deinem Fall die 0, da der Befehl korrekt ausgeführt wird.

Du brauchst aber den Wert, und der steckt in ['data']. Allerdings noch mit dem üblichen Leerzeichen.

So sollte es dann klappen:
PHP:
$pin_entry = $agi->get_variable("PIN_ENTRY");
$i=trim($pin_entry['data']);
if($i <= 3){
    $i++;
    $agi->set_variable("PIN_ENTRY","$i");
    $agi->exec_goto("authenticate","1","1");    
    exit;
}

Rentier
 

Zurzeit aktive Besucher

Statistik des Forums

Themen
246,295
Beiträge
2,249,593
Mitglieder
373,893
Neuestes Mitglied
Kukkatto
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.