viernes, 30 de octubre de 2015

Comando System en Asterisk: Systemstatus devuelve APPERROR

Llevaba tiempo sin publicar. Además, como donde estoy ahora no tengo disponible mi centralita, voy a intentar contarlo lo mejor posible. estaba no tenía disponible la centralita. Después de terminar de escribirlo, he llegado a ella y todo lo que tenía aquí expuesto estaba bien, excepto alguna sintáxis. Sobretodo el poner (o no) comillas, como si de cadenas se trataran, en las llamadas a las funciones de Asterisk

Ahora, tenemos en nuestro home: /home/myUser/ un script, dateFile.sh que hace:

date >> fileDate.log

Con unos permisos:

-rwxr--r-- myUser asterisk

A la hora de trabajar en los contextos en Asterisk, además de usar sus propios comandos, se pueden hacer llamadas al sistema o a scripts que tengamos en él. Por lo que, podríamos tener algo similar a lo siguiente:

[mi_contexto]
exten => s,1,Playback(hello-world)
exten => s,n,System(/home/myUser/dateFile.sh)
exten => s,n,Playback(thank-you-for-calling)
exten => s,n,Hangup

Después, resulta, que miras en los logs y te dice que se ha ejecutado (o, a veces, ni eso), pero mirando en la misma carpeta donde se encuentra el script te encuentras con que no se ha obtenido ningún resultado. Por lo tanto, buscando, te encuentras que el resultado de la operación se guarda en la variable SYSTEMSTATUS.

Por lo tanto, volviendo al contexto (siempre me sale el nombre de ámbito [scope]):

[mi_contexto]
exten => s,1,Playback(hello-world)
exten => s,n,System(/home/myUser/dateFile.sh)
exten => s,n,NoOp("Systemstatus is: " ${SYSTEMSTATUS})
exten => s,n,Playback(thank-you-for-calling)
exten => s,n,Hangup

Y volvemos a pasar el mismo. Ahora, después de lanzarlo, nos devuelve que el resultado es: APPERROR. No es SUCCESS. No es FAILURE.

Resulta, que al buscar qué significa ese error, todos terminan diciendo, más o menos que está indocumentado y que devuelve un resultado distinto de 0 (cero).

¿Y qué hago? No he visto resultados cuando Asterisk ha llamado al script. ¿Y si lo lanzo desde consola? Es importante saber que va a funcionar. Y en efecto, así es. Desde la misma consola funciona.

Bien: para resumir dónde puede estar el problema, volvamos a los permisos asignados. Porque ahí es donde radica el quid de la cuestión.

Nuestro usuario tiene permisos para ejecutar ese script. Asterisk no puede hacerlo. No sólo es cuestión de mirar a qué usuario pertenece dicho fichero, o el grupo al que quieres asignarlo, sino también los permisos de lectura, ejecución, ¿escritura? que quieras asignarle.

Si en vez de tener los permisos de arriba, tuviese:

-rwxr-xr-- myUser asterisk

Y volviésemos a ejecutarlo, ahora ya no nos devolvería ese error tan raro que no da ninguna información. La única pega que alguien podría poner es que lo asigne al grupo de asterisk, en vez de permitir que sean otros. A parte de eso, creo que esto es algo seguro, y, lo más importante de todo: ya hemos obtenido la respuesta de una de las posibles causas de este error.

No hay comentarios:

Publicar un comentario