Lo primero que hay que entender es qué es un AGI y qué se puede hacer con él.
AGI (Asterisk Gateway Interface) permite programar funcionalidades en diferentes lenguajes PHP, Perl, Java, C, en fin, mediante una interfaz transparente al usuario haciendo modificaciones a bases de datos, consultando estados de variables, controlar el dIalplan, etc.. haciendo la llamada desde el archivo extensions.conf
Hasta aquí todo claro..se pone bueno cuando intentamos crear un AGI en PHP puesto que no entendemos la estructura de uno y mucho menos encontramos para que sirve cada instrucción.
Aquí veremos poco a poco cada sección y les pido un poco de paciencia porque en un solo mensaje no cabe todo.
ESTRUCTURA DEL PROGRAMA
#!/usr/bin/php --> Permite crear un scrip que será ejecutado por el programa que se encuentra en está ruta.
<?php --> Etiqueta que indica la inclusión de código php. Sin está etiqueta es imposible códificar en el lenguaje PHP.
$stdin = fopen("php://stdin","r"); --> Entradas que se tengan del canal o línea que se está utilizando en ese momento cuando se ejecutó el AGI.
$stdout = fopen("php://stdout","w"); --> Salidas que se hagan hacia el canal o línea que se está utilizando en ese momento cuando se ejecutó el AGI. También sirve para ejecutar comandos del Dial Plan. Pero se creará na función para ello más adelante.
$stdlog = fopen("/var/log/asterisk/my_agi.log","w"); --> Log de errores o novedades que serán guardado en el directorio y archivo especificados.
Hasta ahora no hemos hecho sino definir las variables que contendran entradas y salidas. Pero como hacemos para capturar valores ?
// Permite pasar los encabezados de entrada de las variables AGI dentro de un array y ser asignadas a variables posteriormente.
while (!feof($stdin)) {
$temp = fgets($stdin);
$temp = str_replace("\n","",$temp);
$s = explode(":",$temp);
$agivar[$s[0]] = trim($s[1]);
if (($temp == "") || ($temp == "\n")) {
break;
}
}
Este while toma entrada por entrada y las coloca en el array AGIVAR para consultarlas posteriormente o ser asignadas a otras variables como sigue el ejemplo:
//Captura y define las variables
$request = $agivar['agi_request'];
$channel= $agivar['agi_channel'];
$type= $agivar['agi_type'];
$uniqueid= $agivar['agi_uniqueid'];
$callerid= $agivar['agi_callerid'];
$context= $agivar['agi_context'];
$extension= $agivar['agi_extension'];
$priority= $agivar['agi_priority'];
$accountcode= $agivar['agi_accountcode'];
/** OTRAS VARIABLES **/
$calleridname= $agivar['agi_calleridname'];
$callingpres= $agivar['agi_callingpres'];
$callingani2= $agivar['agi_callingani2'];
$callington = $agivar['agi_callington'];
$callingtns= $agivar['agi_callingtns'];
$dnid= $agivar['agi_dnid'];
$rdnis= $agivar['agi_rdnis'];
$enhanced= $agivar['agi_enhanced'];
Como pueden observar estamos transfiriendo los valores capturados con el WHILE del array AGIVAR a otras variables. Tambien se pueden trabajar directamente desde el array pero personalmente no lo recomiendo por facilidad de manejo.
AGI (Asterisk Gateway Interface) permite programar funcionalidades en diferentes lenguajes PHP, Perl, Java, C, en fin, mediante una interfaz transparente al usuario haciendo modificaciones a bases de datos, consultando estados de variables, controlar el dIalplan, etc.. haciendo la llamada desde el archivo extensions.conf
Hasta aquí todo claro..se pone bueno cuando intentamos crear un AGI en PHP puesto que no entendemos la estructura de uno y mucho menos encontramos para que sirve cada instrucción.
Aquí veremos poco a poco cada sección y les pido un poco de paciencia porque en un solo mensaje no cabe todo.
ESTRUCTURA DEL PROGRAMA
#!/usr/bin/php --> Permite crear un scrip que será ejecutado por el programa que se encuentra en está ruta.
<?php --> Etiqueta que indica la inclusión de código php. Sin está etiqueta es imposible códificar en el lenguaje PHP.
$stdin = fopen("php://stdin","r"); --> Entradas que se tengan del canal o línea que se está utilizando en ese momento cuando se ejecutó el AGI.
$stdout = fopen("php://stdout","w"); --> Salidas que se hagan hacia el canal o línea que se está utilizando en ese momento cuando se ejecutó el AGI. También sirve para ejecutar comandos del Dial Plan. Pero se creará na función para ello más adelante.
$stdlog = fopen("/var/log/asterisk/my_agi.log","w"); --> Log de errores o novedades que serán guardado en el directorio y archivo especificados.
Hasta ahora no hemos hecho sino definir las variables que contendran entradas y salidas. Pero como hacemos para capturar valores ?
// Permite pasar los encabezados de entrada de las variables AGI dentro de un array y ser asignadas a variables posteriormente.
while (!feof($stdin)) {
$temp = fgets($stdin);
$temp = str_replace("\n","",$temp);
$s = explode(":",$temp);
$agivar[$s[0]] = trim($s[1]);
if (($temp == "") || ($temp == "\n")) {
break;
}
}
Este while toma entrada por entrada y las coloca en el array AGIVAR para consultarlas posteriormente o ser asignadas a otras variables como sigue el ejemplo:
//Captura y define las variables
$request = $agivar['agi_request'];
$channel= $agivar['agi_channel'];
$type= $agivar['agi_type'];
$uniqueid= $agivar['agi_uniqueid'];
$callerid= $agivar['agi_callerid'];
$context= $agivar['agi_context'];
$extension= $agivar['agi_extension'];
$priority= $agivar['agi_priority'];
$accountcode= $agivar['agi_accountcode'];
/** OTRAS VARIABLES **/
$calleridname= $agivar['agi_calleridname'];
$callingpres= $agivar['agi_callingpres'];
$callingani2= $agivar['agi_callingani2'];
$callington = $agivar['agi_callington'];
$callingtns= $agivar['agi_callingtns'];
$dnid= $agivar['agi_dnid'];
$rdnis= $agivar['agi_rdnis'];
$enhanced= $agivar['agi_enhanced'];
Como pueden observar estamos transfiriendo los valores capturados con el WHILE del array AGIVAR a otras variables. Tambien se pueden trabajar directamente desde el array pero personalmente no lo recomiendo por facilidad de manejo.
Comentario