Buenos días por la mañana. Ayer me encontre con una aplicación muy útil que todos nos creemos que Asterisk la trae “de serie” pero no es asi. Se trata de ejecutar un script y guardar el resultado en una variable para ser usada en el dialplan. Recordemos que tenemos la aplicacion system, para ejecutar comandos/scripts en el servidor, pero a veces se nos queda corta. Veamos como se utiliza el Backticks.
Necesitamos bajar esta aplicacion de terceros al directorio apps de las fuentes de nuestro Asterisk. Compilamos y listo para usar ¡¡OJO!! La aplicacion no sale al ejecutar make menuselect, pero creeroslo, esta ahí.
Para comprobar que efectivamente se ha compilado sin problemas, ejecutamos en la consola de Asterisk:
ast-pruebas*CLI> core show application BackTicks -= Info about application 'BackTicks' =- [Synopsis]
Execute a shell command and save the result as a variable. [Description]
Backticks(<VARNAME>|<command> ) Be sure to include a full path!
Probemoslo. Creamos un nuevo contexto y nos aseguramos que sea “alcanzable” desde la extensión que vamos a usar para las pruebas:
[outgoing_pruebas]
exten => 123,1,NoOP(prueba de backticks)
exten => 123,n,Answer()
exten => 123,n,Set(variable=)
exten => 123,n,Backticks(variable|/etc/asterisk/prueba.sh)
exten => 123,n,NoOP(la ejecucion del script a devuelto ${variable})
exten => 123,n,Hangup()
El contenido del script puede ser por ejemplo:
#!/bin/sh echo "hola"
Nos conectamos a la consola, un reload y ponemos el verbose a 10. Llamamos desde la extension y veremos:
Verbosity is at least 10
-- Remote UNIX connection
-- Executing [123@outgoing_pruebas:1] NoOp("SIP/1000-082966d8", "prueba de backticks") in new stack
-- Executing [123@outgoing_pruebas:2] Answer("SIP/1000-082966d8", "") in new stack
-- Executing [123@outgoing_pruebas:3] Set("SIP/1000-082966d8", "variable=") in new stack
-- Executing [123@outgoing_pruebas:4] BackTicks("SIP/1000-082966d8", "variable|/etc/asterisk/prueba.sh") in new stack
-- Executing [123@outgoing_pruebas:5] NoOp("SIP/1000-082966d8", "la ejecucion del script a devuelto hola") in new stack
-- Executing [123@outgoing_pruebas:6] Hangup("SIP/1000-082966d8", "") in new stack
== Spawn extension (outgoing_pruebas, 123, 7) exited non-zero on 'SIP/1000-082966d8'
Fácil y muy util, no para esta chorrada, pero seguro que a más de uno le va a resultar muy útil, al menos a mi asi me lo parece.
extraido con amor de: http://www.roboguys.com/index.php?option=com_content&task=view&id=87&Itemid=47
Puto Psicópata.