Asterisk Asterisk Manager Interface. ASTERISK MANAGER API - Permite a una aplicación cliente...

21
Asterisk Asterisk Manager Interface

Transcript of Asterisk Asterisk Manager Interface. ASTERISK MANAGER API - Permite a una aplicación cliente...

Page 1: Asterisk Asterisk Manager Interface. ASTERISK MANAGER API - Permite a una aplicación cliente conectarse a una instancia de Asterisk vía TCP/IP y ejecutar.

Asterisk

Asterisk Manager Interface

Page 2: Asterisk Asterisk Manager Interface. ASTERISK MANAGER API - Permite a una aplicación cliente conectarse a una instancia de Asterisk vía TCP/IP y ejecutar.

ASTERISK MANAGER API

- Permite a una aplicación cliente conectarse a una instancia de Asterisk vía TCP/IP y ejecutar comandos o leer eventos.

- Generalmente, se utiliza el puerto 5038.- Utiliza un protocolo en modo texto que

consiste en líneas de tipo "clave: valor". - Conjunto de líneas: paquete.

2

Julián Dunayevich, Lázaro Baca, Andrés Brassara, Santiago Alberch,

Antonio Lobo

Page 3: Asterisk Asterisk Manager Interface. ASTERISK MANAGER API - Permite a una aplicación cliente conectarse a una instancia de Asterisk vía TCP/IP y ejecutar.

MANAGER: PROTOCOLO

1) Se debe establecer una sesión con el manager antes de ejecutar comandos.

2) Los paquetes pueden ser transmitidos en ambas direcciones.

3) El orden de las líneas dentro del paquete es indistinto.

4) Las líneas se delimitan con CRLF y una línea en blanco (2 CRLF consecutivos) indica el final del paquete.

3

Julián Dunayevich, Lázaro Baca, Andrés Brassara, Santiago Alberch,

Antonio Lobo

Page 4: Asterisk Asterisk Manager Interface. ASTERISK MANAGER API - Permite a una aplicación cliente conectarse a una instancia de Asterisk vía TCP/IP y ejecutar.

MANAGER: TIPOS DE PAQUETE

El tipo de paquete está dado por las siguientes claves:

Action: paquete originado en el cliente requiriendo llevar a cabo una acción particular. Contiene el nombre de la acción y los parámetros de la misma.

Response: la respuesta del Asterisk a la Acción requerida por el cliente.

Event: datos correspondientes a un evento generado dentro del núcleo de Asterisk o módulo.

4

Julián Dunayevich, Lázaro Baca, Andrés Brassara, Santiago Alberch,

Antonio Lobo

Page 5: Asterisk Asterisk Manager Interface. ASTERISK MANAGER API - Permite a una aplicación cliente conectarse a una instancia de Asterisk vía TCP/IP y ejecutar.

MANAGER: AUTENTICACIÓN Las cuentas de usuario se configuran en /etc/asterisk/manager.conf.

Por ej:

[general]enabled=yes

[admin]secret = claveadmindeny=0.0.0.0/0.0.0.0permit=127.0.0.1/255.255.255.0read = system,call,log,verbose,command,agent,user,originatewrite = system,call,log,verbose,command,agent,user,originate

En este caso, "admin" es el nombre de usuario, la clave es "claveadmin" y sólo se permiten conexiones para este usuario vía localhost. El resto de las líneas establecen permisos (r,w,r/w) para cada clase (system, call, etc.).

5

Julián Dunayevich, Lázaro Baca, Andrés Brassara, Santiago Alberch,

Antonio Lobo

Page 6: Asterisk Asterisk Manager Interface. ASTERISK MANAGER API - Permite a una aplicación cliente conectarse a una instancia de Asterisk vía TCP/IP y ejecutar.

MANAGER: CONEXIÓN

Enviar un mensaje con acción "Login", junto con el usuario y la clave como parámetros. Por ej:

Action: loginUsername: adminSecret: adminclaveEvents: off

(La última línea indica que la conexión no recibirá eventos por parte del Asterisk.)

6

Julián Dunayevich, Lázaro Baca, Andrés Brassara, Santiago Alberch,

Antonio Lobo

Page 7: Asterisk Asterisk Manager Interface. ASTERISK MANAGER API - Permite a una aplicación cliente conectarse a una instancia de Asterisk vía TCP/IP y ejecutar.

MANAGER: CONEXIÓN

Se recibirá por parte del servidor

Asterisk Call Manager/1.0Response: SuccessMessage: Authentication accepted

O, en caso de error:

Asterisk Call Manager/1.0Response: ErrorMessage: Authentication failed

7

Julián Dunayevich, Lázaro Baca, Andrés Brassara, Santiago Alberch,

Antonio Lobo

Page 8: Asterisk Asterisk Manager Interface. ASTERISK MANAGER API - Permite a una aplicación cliente conectarse a una instancia de Asterisk vía TCP/IP y ejecutar.

MANAGER: PAQUETES ACTION

Se pueden proveer parámetros adicionales (por ej, un número a llamar o canal a desconectar).

En el caso que la acción determine la ejecución de una entrada del plan de marcación, también se pueden proveer variables.

Formato: Action: <action type><CRLF> <Key 1>: <Value 1><CRLF> <Key 2>: <Value 2><CRLF> ... Variable: <Variable 1>=<Value 1><CRLF> Variable: <Variable 2>=<Value 2><CRLF> ... <CRLF>

8

Julián Dunayevich, Lázaro Baca, Andrés Brassara, Santiago Alberch,

Antonio Lobo

Page 9: Asterisk Asterisk Manager Interface. ASTERISK MANAGER API - Permite a una aplicación cliente conectarse a una instancia de Asterisk vía TCP/IP y ejecutar.

MANAGER: PAQUETES ACTION Algunos ejemplos de acciones

Command: ejecuta un comando (por ej, reload) (privilege: command,all) DAHDIHangup: cuelga un canal DAHDI DAHDIShowChannel: muestra los canales DAHDI DAHDITransfer: transfiere un canal DAHDI Events: controla el flujo de los eventos Hangup: colgar canal (privilege: call,all) IAXpeers: lista los peers IAX (privilege: system,all) ListCommands: lista los comando disponibles del manager Logoff: logoff del manager MailboxCount: verifica la cantidad de mensajes en el mailbox (privilege:

call,all) MailboxStatus: verifica el status del mailbox (privilege: call,all)

9

Julián Dunayevich, Lázaro Baca, Andrés Brassara, Santiago Alberch,

Antonio Lobo

Page 10: Asterisk Asterisk Manager Interface. ASTERISK MANAGER API - Permite a una aplicación cliente conectarse a una instancia de Asterisk vía TCP/IP y ejecutar.

MANAGER: PAQUETES ACTION Algunos ejemplos de acciones (cont.)

Monitor: comienza a monitorear un canal (graba un archivo con el audio) (privilege: call, all).

Originate: origina llamada (privilege: call,all,originate) Park: realiza un parking de la llamada. ParkedCalls: lista las parked calls (privilege: call, all). QueueAdd: agrega un miembro a la cola (privilege: agent,all) Queues: devuelve configuración e información estadística de las colas. QueueRemove: remueve un miembro de la cola (privilege: agent,all) SIPpeers: lista los peers SIP (privilege: system,all) Status: Status (privilege: call,all) Redirect: transfiere una llamada (privilege: call, all) UpdateConfig: actualiza configuración básica del servidor (privilege:

config,all)

10

Julián Dunayevich, Lázaro Baca, Andrés Brassara, Santiago Alberch,

Antonio Lobo

Page 11: Asterisk Asterisk Manager Interface. ASTERISK MANAGER API - Permite a una aplicación cliente conectarse a una instancia de Asterisk vía TCP/IP y ejecutar.

MANAGER: CLI

Los siguientes comandos pueden ser ejecutados en la CLI para obtener información sobre el manager:

manager show command <command>: muestra información sobre el comando <command> del manager

manager show commands: lista todos los comandos del manager

manager show connected: lista los usuarios conectados al manager

manager show users: lista los usuarios configurados para acceder al manager

11

Julián Dunayevich, Lázaro Baca, Andrés Brassara, Santiago Alberch,

Antonio Lobo

Page 12: Asterisk Asterisk Manager Interface. ASTERISK MANAGER API - Permite a una aplicación cliente conectarse a una instancia de Asterisk vía TCP/IP y ejecutar.

MANAGER: EJEMPLO LLAMADA

El cliente envía:ACTION: OriginateChannel: SIP/12345Exten: 1234Priority: 1Context: default

El cliente recibe, en caso de éxito:Event: NewchannelChannel: SIP/12345-ed8fState: DownCallerID:Uniqueid: 1124982019.19157

12

Julián Dunayevich, Lázaro Baca, Andrés Brassara, Santiago Alberch,

Antonio Lobo

Page 13: Asterisk Asterisk Manager Interface. ASTERISK MANAGER API - Permite a una aplicación cliente conectarse a una instancia de Asterisk vía TCP/IP y ejecutar.

MANAGER: EJEMPLO LLAMADA

El cliente recibe, en caso de éxito (cont):

Event: NewchannelChannel: SIP/12345-ed8fState: RingingCallerID:Uniqueid: 1124982019.19157

Event: NewstateChannel: SIP/12345-ed8fState: UpCallerID:Uniqueid: 1124982019.19157

13

Julián Dunayevich, Lázaro Baca, Andrés Brassara, Santiago Alberch,

Antonio Lobo

Page 14: Asterisk Asterisk Manager Interface. ASTERISK MANAGER API - Permite a una aplicación cliente conectarse a una instancia de Asterisk vía TCP/IP y ejecutar.

MANAGER: EJEMPLO LLAMADA

El cliente recibe, en caso de éxito (cont):Event: NewextenChannel: SIP/12345-ed8fContext: defaultExtension: 1234Priority: 1Application: DialAppData: SIP/pepeUniqueid: 1124982019.19157

Response: SuccessMessage: Originate successfully queued

14

Julián Dunayevich, Lázaro Baca, Andrés Brassara, Santiago Alberch,

Antonio Lobo

Page 15: Asterisk Asterisk Manager Interface. ASTERISK MANAGER API - Permite a una aplicación cliente conectarse a una instancia de Asterisk vía TCP/IP y ejecutar.

MANAGER: EJEMPLO LLAMADA

El cliente recibe, en caso de error:

Event: NewextenChannel: OutgoingSpoolFailedContext: defaultExtension: failedPriority: 1Application: SetVarAppData: extension=failedUniqueid: 1124981514.58775

15

Julián Dunayevich, Lázaro Baca, Andrés Brassara, Santiago Alberch,

Antonio Lobo

Page 16: Asterisk Asterisk Manager Interface. ASTERISK MANAGER API - Permite a una aplicación cliente conectarse a una instancia de Asterisk vía TCP/IP y ejecutar.

MANAGER: EJEMPLO LLAMADA

El cliente recibe, en caso de error (cont):

Event: HangupChannel: OutgoingSpoolFailedUniqueid: 1124981514.58775Cause: 0

Response: ErrorMessage: Originate failed

16

Julián Dunayevich, Lázaro Baca, Andrés Brassara, Santiago Alberch,

Antonio Lobo

Page 17: Asterisk Asterisk Manager Interface. ASTERISK MANAGER API - Permite a una aplicación cliente conectarse a una instancia de Asterisk vía TCP/IP y ejecutar.

MANAGER: Ejemplo en PHP<?php

// Apertura del socket

$socket = fsockopen("127.0.0.1","5038", $errno, $errstr, $timeout);

// Login del usuario

fputs($socket, "Action: Login\r\n");

fputs($socket, "UserName: admin\r\n");

fputs($socket, "Secret: amp111\r\n\r\n");

// Lista los comandos disponibles para la clave Action

fputs($socket, "Action: ListCommands\r\n\r\n");

// Logoff del usuario

fputs($socket, "Action: Logoff\r\n\r\n");

17

Julián Dunayevich, Lázaro Baca, Andrés Brassara, Santiago Alberch,

Antonio Lobo

Page 18: Asterisk Asterisk Manager Interface. ASTERISK MANAGER API - Permite a una aplicación cliente conectarse a una instancia de Asterisk vía TCP/IP y ejecutar.

MANAGER: Ejemplo en PHP

// Obtiene la respuesta del manager

while (!feof($socket)) {

$wrets .= fread($socket, 8192);

}

// Cierra el socket

fclose($socket);

// Muestra la salida del manager por pantalla

echo <<<ASTERISKMANAGEREND

ASTERISK MANAGER OUTPUT:

$wrets

ASTERISKMANAGEREND;

?>

18

Julián Dunayevich, Lázaro Baca, Andrés Brassara, Santiago Alberch,

Antonio Lobo

Page 19: Asterisk Asterisk Manager Interface. ASTERISK MANAGER API - Permite a una aplicación cliente conectarse a una instancia de Asterisk vía TCP/IP y ejecutar.

MANAGER: PROBLEMAS

La documentación sobre el protocolo y la funcionalidad del manager está incompleta.

No es estable con el manejo de una cantidad grande de conexiones a la vez.

Es recomendada la utilización de un Proxy (por, ej ProxyAstMan), para sistemas que hagan un uso intensivo del manager, como pueden ser sistemas de monitoreo, panel de control y campañas/encuestas telefónicas.

19

Julián Dunayevich, Lázaro Baca, Andrés Brassara, Santiago Alberch,

Antonio Lobo

Page 20: Asterisk Asterisk Manager Interface. ASTERISK MANAGER API - Permite a una aplicación cliente conectarse a una instancia de Asterisk vía TCP/IP y ejecutar.

Ejercicio 11: AMI

Administrar y utilizar la funcionalidad del servidor Asterisk vía la AMI

20

Julián Dunayevich, Lázaro Baca, Andrés Brassara, Santiago Alberch,

Antonio Lobo

Page 21: Asterisk Asterisk Manager Interface. ASTERISK MANAGER API - Permite a una aplicación cliente conectarse a una instancia de Asterisk vía TCP/IP y ejecutar.

Curso elaborado por Julián Dunayevich, Lázaro Baca, Andrés Brassara,

Santiago Alberch y Antonio Lobo

Detalles de la licencia:http://creativecommons.org/licenses/by-nc-sa/2.5/deed.es_AR

Autores: Julián Dunayevich, Lázaro Baca, Andrés Brassara, Santiago Autores: Julián Dunayevich, Lázaro Baca, Andrés Brassara, Santiago Alberch, Antonio LoboAlberch, Antonio Lobo

(cc) Creative Commons - Attribute Non-Commercial Share-Alike 2.5(cc) Creative Commons - Attribute Non-Commercial Share-Alike 2.5Basándose en: Irontec: [email protected] (CC)Asterisk, The Future of Telephony, Jim Meggelen, Jared Smith, and Leif Madsen, O´REILLY, 2005

[email protected]@gmail.com

[email protected]@gmail.com

[email protected]

21

Julián Dunayevich, Lázaro Baca, Andrés Brassara, Santiago Alberch,

Antonio Lobo