22
1 Gorka Gorrotxategi – David Santamaría CURSO ASTERISK AGI y PHPAGI – Modulo 2 IRONTEC - http://www.irontec.com Asterisk AGI PHPAGI

CursoAsterisk AGI

Embed Size (px)

Citation preview

Page 1: CursoAsterisk AGI

1 Gorka Gorrotxategi – David Santamaría

CURSO ASTERISK AGI y PHPAGI – Modulo 2IRONTEC - http://www.irontec.com

Asterisk AGIPHPAGI

Page 2: CursoAsterisk AGI

2 Gorka Gorrotxategi – David Santamaría

CURSO ASTERISK AGI y PHPAGI – Modulo 2

Índice de Contenidos

● Introducción a Asterisk AGI.● PGPAGI.● Ejemplos.

Índice

Page 3: CursoAsterisk AGI

3 Gorka Gorrotxategi – David Santamaría

CURSO ASTERISK AGI y PHPAGI – Modulo 2Introducción a Asterisk AGI

AGI (Asterisk Gateway Interface)● Interfaz para que nuestros programas puedan

comunicarse con Asterisk.● AGI es parecido a CGI:

● La comunicación de AGI con Asterisk es vía stdin/stdout.

● AGI, EAGI (audio), FastAGI (remoto), DeadAGI.● Los scripts AGI pueden ser escritos en cualquier

lenguaje. (Perl, Python, PHP, C, ... )

Page 4: CursoAsterisk AGI

4 Gorka Gorrotxategi – David Santamaría

CURSO ASTERISK AGI y PHPAGI – Modulo 2Introducción a Asterisk AGI

AGIScript

Asterisk AGIModule

Ast

eris

k C

hann

el

Inte

rfac

eAsteriskSwitching

Core

Asterisk PBX

TDM E1

ANALOG

SIP

IAX2

MGCP

STDIN/STDOUT

Database

WWW

Coffee Maker

Page 5: CursoAsterisk AGI

5 Gorka Gorrotxategi – David Santamaría

CURSO ASTERISK AGI y PHPAGI – Modulo 2Introducción a Asterisk AGI

Comunicación AGI <--> Asterisk● STDOUT

– Para enviar algo a Asterisk el script AGI escribe algo en stdout.

NOTA: Los comandos deben acabar en (“\n”).● STDIN

– Para recibir información de Asterisk el script AGI usa el stdin.

NOTA: Las respuestas de Asterisk tienen esta forma:200 Result=<numero>510 Invalid or unknow command.

● STDERR– Para escribir información de DEBUG en el CLI el script

usa stderr.NOTA: agi debug 

Page 6: CursoAsterisk AGI

6 Gorka Gorrotxategi – David Santamaría

CURSO ASTERISK AGI y PHPAGI – Modulo 2Introducción a Asterisk AGI

Scripts AGI

● Directorio por defecto:/usr/share/asterisk/agi­bin

Nota: Podemos guardarlos donde queramos, pero deberemos indicar la ruta completa.

● Debe de ser ejecutable:chmod a+x agi.php

Page 7: CursoAsterisk AGI

7 Gorka Gorrotxategi – David Santamaría

CURSO ASTERISK AGI y PHPAGI – Modulo 2Introducción a Asterisk AGI

● Invocarla desde el dialplan:...exten => 1234, n, agi(helloWorld.php)...Nombre completo!!! (con extensión)

● Paso de parámetros...exten => 1234, n, SET Num = 1;exten => 1234,n,agi(agi.php|${NUM}|${CALLERID})...

● Deben existir en la extensión actual:– Variables dadas por el entorno Asterisk– Definidas por nosotros mismos– ...

Page 8: CursoAsterisk AGI

8 Gorka Gorrotxategi – David Santamaría

CURSO ASTERISK AGI y PHPAGI – Modulo 2Comandos en AGI

     answer Answer channel    channel status Returns status of the connected channel       database del Removes database key/value database deltree Removes database keytree/value       database get Gets database value       database put Adds/updates database value 

                    exec Executes a given Application               get data Prompts for DTMF on a channel 

    get full variable Evaluates a channel expression          get variable Gets a channel variable             get option Stream file, prompt for DTMF, with timeout                 hangup Hangup the current channel                     noop Does nothing 

       receive char Receives one character from channels supporting it         receive text Receives text from channels supporting it 

           record file Records to a given file             say alpha Says a given character string 

say digits Says a given digittringsay number Says a given number 

Page 9: CursoAsterisk AGI

9 Gorka Gorrotxategi – David Santamaría

CURSO ASTERISK AGI y PHPAGI – Modulo 2Comandos en AGI

                  say phonetic Says a given character string with phonetics                  say date Says a given date                  say time Says a given time           say datetime Says a given time as specfied by the format given             send image Sends images to channels supporting it 

                 send text Sends text to channels supporting it       set autohangup Autohangup channel in some time              set callerid Sets callerid for the current channel              set context Sets channel context          set extension Changes channel extension 

                set music Enable/Disable Music on hold generator                set priority Set channel dialplan priority 

            set variable Sets a channel variable               stream files ends audio file on channel    control stream file Sends audio file on channel and allows the listner to control the stream                 tdd mode Toggles TDD mode (for the deaf) 

                verbose Logs a message to the asterisk verbose log             wait for digit Waits for a digit to be pressed 

Page 10: CursoAsterisk AGI

10 Gorka Gorrotxategi – David Santamaría

CURSO ASTERISK AGI y PHPAGI – Modulo 2Primer script AGI

Un ejemplo:● script (ejemplo.php) :#!/usr/local/bin/php5<?php// Leer cabeceraswhile (fgets(STDIN) != “\n”);echo “SAY NUMBER 42 ‘’\n”;$result = fgets(STDIN);?>

● Dialplan ( extensions.conf ) :...exten => 1234, n, agi(ejemplo.php)...

Page 11: CursoAsterisk AGI

11 Gorka Gorrotxategi – David Santamaría

CURSO ASTERISK AGI y PHPAGI – Modulo 2Primer script AGI

● Cabeceras:Asterisk envía al script una serie de cabeceras:

[agi_request] => ejem1.php[agi_channel] => SIP/ironuser[agi_language] => en             [agi_callerid] => "ironuser" <500>[agi_dnid] => 500[agi_rdnis] => unknown[agi_context] => internal[agi_extension] => 500[agi_priority] => 1

Page 12: CursoAsterisk AGI

12 Gorka Gorrotxategi – David Santamaría

CURSO ASTERISK AGI y PHPAGI – Modulo 2PHPAGI

¿Para qué?

● Se encarga de las cabeceras

● Posee la mayoría de los comandos AGI

● Posee “wrappers” para las funciones● text2wave => festivalNota: Instalar festival en castellano.

apt­get install festival festvox­kallpc16k

Page 13: CursoAsterisk AGI

13 Gorka Gorrotxategi – David Santamaría

CURSO ASTERISK AGI y PHPAGI – Modulo 2Instalación

● Descargar:– Web: http://phpagi.sourceforge.net/

● Sección Descargas.● Descargar phpagi-2.14.tgz● Ejemplos phpagi-examples-2.14.tgz

NOTA (Para servidores sin X):wget http://downloads.sourceforge.net/phpagi/phpagi­2.14.tgzwget http://downloads.sourceforge.net/phpagi/phpagi­examples­2.14.tgz

Page 14: CursoAsterisk AGI

14 Gorka Gorrotxategi – David Santamaría

CURSO ASTERISK AGI y PHPAGI – Modulo 2Instalación

● Descomprimir en el directorio de agi:mv phpagi­2.14.tgz /var/lib/asterisk/agi­bin/tar ­zxvf phpagi­2.14.tgz

● Dar permisos:cd phpagi­2.14chmod a+x *.php

● Copiar phpagi.conf al directorio de configuración de Asterisk.mv /var/lib/asterisk/agi­bin/phpagi­2.14/docs/phpagi.example.conf /etc/asterisk/phpagi.conf

Page 15: CursoAsterisk AGI

15 Gorka Gorrotxategi – David Santamaría

CURSO ASTERISK AGI y PHPAGI – Modulo 2PHPAGI

Un ejemplo sencillo.

● Pasos:– Incluir la librería.require 'phpagi.php';– Crear un objeto “AGI”.$agi = new AGI();$agi= new A GI();– Llamar a sus funciones.$agi­>answer();

Page 16: CursoAsterisk AGI

16 Gorka Gorrotxategi – David Santamaría

CURSO ASTERISK AGI y PHPAGI – Modulo 2PHPAGI

Un ejemplo sencillo.

● script (ejemplo.php) :

#!/usr/bin/php5<?phprequire('phpagi­2.14/phpagi.php')$agi = new AGI();$agi­>answer();$agi­>playback("Hello World");$agi­>hangup();?>

Page 17: CursoAsterisk AGI

17 Gorka Gorrotxategi – David Santamaría

CURSO ASTERISK AGI y PHPAGI – Modulo 2PHPAGI

¿Como funciona?.

– Cuando un método es invocado el resultado se guarda en un array de variables.

– Depende del método a veces el resultado esta en la posición indicada por 'result' o por 'key'.

NOTA: Consultar siempre el código fuente de phpagi.php para conocer el comando (o la ayuda generada).http://phpagi.sourceforge.net/phpagi2/docs/

Page 18: CursoAsterisk AGI

18 Gorka Gorrotxategi – David Santamaría

CURSO ASTERISK AGI y PHPAGI – Modulo 2PHPAGI – Asterisk Manager

Asterisk Manager

● El asterisk Manager Interface es un servidor TCP, capaz de comunicarse con Asterisk, haciendo posible que aplicaciones remotas envíen comandos a AsteriskManager.conf[admin]secret = testread=system,call,log,verbose,command,agent,user,configwrite=system,call,log,verbose,command,agent,user,config

● PHPAGI incluye una librería capaz de manejar este sistema “phpagi_AsteriskManager”

Page 19: CursoAsterisk AGI

19 Gorka Gorrotxategi – David Santamaría

CURSO ASTERISK AGI y PHPAGI – Modulo 2PHPAGI – Asterisk Manager

Asterisk Manager (II)

● Configurar en phpagi.conf[asmanager]server=localhostport=5038username=namesecret=pass

● Y en nuestro script:$asm = $agi­>new_AsteriskManager();$peer = $asm­>command("sip show peer $peer");

$asm­>disconnect();

Page 20: CursoAsterisk AGI

20 Gorka Gorrotxategi – David Santamaría

CURSO ASTERISK AGI y PHPAGI – Modulo 2Consejos

● Consejos:– No hay que hacer todo con AGI, el dialplan

sigue estando ahí :)

– Usa en la medida de lo posible las variables del canal.

Es una manera “elegante” de pasar variables entre distintos scripts.

– Hacer los scripts AGI modulares.Cada script tiene una función, no intentar meter todo nuestro código en un solo AGI.

– Si el AGI crece demasiado --> refactoring

Page 21: CursoAsterisk AGI

21 Gorka Gorrotxategi – David Santamaría

CURSO ASTERISK AGI y PHPAGI – Modulo 2Referencias

Bibliografía

● Asterisk, The Future of Telephony. Jim Van Meggelen, Jared Smith & Leif Madsen – O' Reilly

Sitios Web

● Voip-info: http://www.voip-info.org● Web PHPAGI: http://phpagi.sourceforge.net/

Page 22: CursoAsterisk AGI

22 Gorka Gorrotxategi – David Santamaría

CURSO ASTERISK AGI y PHPAGI – Modulo 2Licencia

Copyright © 2007 Irontec <[email protected]>

● Detalles de la licencia– http://creativecommons.org/licenses/by/2.5/es/de

ed.es