Cómo ejecutar comandos de Asterisk desde la consola
A veces es necesario ejecutar comandos de Asterisk y sacar el resultado por la consola para luego poder procesarlo con un script y poder obtener información útil.
La manera sencilla es mediante la ejecución de Asterisk con la línea:
asterisk -rx 'comando'
Cuando ejecutamos esta línea, lo que realmente ocurre es que nos conectamos a Asterisk, ejecutamos el comando y nos salimos obteniendo por la consola de Linux el volcado de lo que queremos conocer.
Esta es, sin duda una de las mejores maneras cuando queremos obtener el resultado de un comando de forma puntual, pero para «monitorizar» un Asterisk, hay quien crea scripts que utilizan esta forma varias veces cada pocos segundos, lo que provoca que cuando alguien se conecta a la consola de forma natural, se encuentre con estos mensajes molestos:
-- Remote UNIX connection -- Remote UNIX connection disconnected -- Remote UNIX connection -- Remote UNIX connection disconnected -- Remote UNIX connection -- Remote UNIX connection disconnected -- Remote UNIX connection -- Remote UNIX connection disconnected
En cada conexión podemos obtener los usuarios SIP registrados, el número de llamadas actuales, los canales ZAP utilizados, etc, pero claro, este método hace impracticable el hecho de utilizar la consola de Asterisk.
La manera interesante, es realizarlo mediante el AMI (manager), es decir, hacer una aplicación que se conecte al puerto del Manager (5038 por defecto), se autentifique correctamente y envíe los comandos necesarios para obtener los resultados necesarios de una manera transparente para el Asterisk y sin que los usuarios conectados vean el molesto mensaje.
Para evitar esto, Tzafrir Cohen de Xorcom acaba de publicar un parche para evitar estos mensajes y poder ejecutar comandos sin necesidad de que nadie llegue a molestarse.
Este parche está en la versión Trunk y lo podeis descargar de aquí:
http://svn.digium.com/view/asterisk/trunk/contrib/scripts/astcli
Yo por mi parte, tengo un programita en perl muy sencillo que se conecta al manager y con el que obtengo todos los datos necesarios sin tener que molestar a nadie y bastante rápido.
Pese a ser una tontería de script, aquí os lo pongo por si a alguien le interesa:
http://www.sinologic.net/proyectos/asterisk-cmd