PHP innerhalb von AGI?

cheGGo

Neuer User
Mitglied seit
11 Jul 2007
Beiträge
44
Punkte für Reaktionen
0
Punkte
0
Hi,

ich habe gelesen das es moeglich ist PHP Scripte innerhalb des AGI auszuführen und habe mal versucht folgendes Beispiel auszuführen:

PHP:
#!/usr/bin/php 
<?php

ob_implicit_flush(true);

# create file handles if needed
if (!defined('STDIN')) { define('STDIN', fopen('php://stdin', 'r')); }
if (!defined('STDOUT')) { define('STDOUT', fopen('php://stdout', 'w')); }
if (!defined('STDERR')) { define('STDERR', fopen('php://stderr', 'w')); }

while (!feof(STDIN)) {
  $temp = fgets(STDIN);
  $temp = str_replace("\n","",$temp);
  $s = explode(":",$temp);
  $agi[$s[0]] = trim($s[1]);
  if (($temp == "") || ($temp == "\n")) {
     break;
  }
} 

fwrite(STDOUT,"STREAM FILE hello-world \"\"\n";)
fflush(STDOUT);
$result = trim(fgets(STDIN,4096));
checkresult($result);

function checkresult($res) {
  trim($res);
  
  if (preg_match('/^200/',$res)) {
    if (! preg_match('/result=(-?\d+)/',$res,$matches)) {
      fwrite(STDERR,"FAIL ($res)\n");
      fflush(STDERR);
      return 0;
    }
    else {
      fwrite(STDERR,"PASS (".$matches[1].")\n");
      fflush(STDERR);
      return  $matches[1];
    }
  }
  else {
    fwrite(STDERR,"FAIL (unexpected result '$res')\n");
    fflush(STDERR);
    return -1;
  }
}

?>

Ein Beispiel aus dem Asterisk Handbuch.. in der commandline habe ich agi debug enabled und bekomme folgende ausgabe:

Code:
    -- Executing AGI("SIP/user2-08174020", "asterisk-docs.php") in new stack
    -- Launched AGI Script /var/lib/asterisk/agi-bin/asterisk-docs.php
AGI Tx >> agi_request: asterisk-docs.php
AGI Tx >> agi_channel: SIP/user2-08174020
AGI Tx >> agi_language: de
AGI Tx >> agi_type: SIP
AGI Tx >> agi_uniqueid: 1184187353.50
AGI Tx >> agi_callerid: 102
AGI Tx >> agi_calleridname: User2
AGI Tx >> agi_callingpres: 0
AGI Tx >> agi_callingani2: 0
AGI Tx >> agi_callington: 0
AGI Tx >> agi_callingtns: 0
AGI Tx >> agi_dnid: 888
AGI Tx >> agi_rdnis: unknown
AGI Tx >> agi_context: default
AGI Tx >> agi_extension: 888
AGI Tx >> agi_priority: 3
AGI Tx >> agi_enhanced: 0.0
AGI Tx >> agi_accountcode:
AGI Tx >> 1*CLI>
    -- AGI Script asterisk-docs.php completed, returning 0
-- Executing Hangup("SIP/user2-08174020", "") in new stack
  == Spawn extension (default, 888, 5) exited non-zero on 'SIP/user2-08174020'

Mir ist bewusst das ich STDIN auslesen muss bevor ich weitere Commands senden kann, aber wie man sehen kann tut das leider auch nich ;(

php pfad ist /usr/bin/php und die agi-scripts sind ausführbar...

Hat einer ne Idee?
 
Das Script ist vermutlich mit Syntaxfehler abgestürzt. Am besten du startest asterisk mit der -c Option, dann bekommst Du den Fehler angezeigt. Im Moment wird bei Dir STDERR nicht angezeigt.
 
Das Script ist vermutlich mit Syntaxfehler abgestürzt.

So isset! ;o)
Da der Post aber schon ein weilchen her is, is die sache schon lange gegessen...

Nachdem das Test Script endlich lief, bin ich auch auf die PHPagi-Klasse gestoßen.
Die Klasse liesst dann beim erzeugen des Objects automatisch den STDIN aus, nachdem man dann eigene Commandos ueber den STDOUT an den Asterisk uebergeben kann....

Aber du hast recht, ich haette damals auch die loesung noch hier posten koennen - sorry meinerseits fuer das versaeumnis!

PHP AGI -> http://phpagi.sourceforge.net/

Gruß cheGGo
 
geht richtig gut mit agiphp...
Zum debuggen tipp in der Asterisk CLI
Code:
agi debug
ein, hilft ungemein!!!

Sorry, hatte ich übersehen das das schon vorher erwähnt wurde...
 
Zuletzt bearbeitet:
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.