Aviso telefónico automático por job fallado en TWS (OPC) - Parte 2

Escrito por Javier

En la primera parte estuvimos instalando el sistema AsteriskNow y creando un nuevo usuario para ejecutar los scripts. En esta segunda y última parte, añadiremos los scripts que harán la llamada automática y haremos una prueba desde z/OS para confirma que funciona.

Vamos a empezar a configurar Asterisk. Ponemos la IP que apuntamos al principio (en mi caso, 192.168.1.21) en un navegador y entramos en la web de FreePBX.

NOTA: Podemos entrar desde otros ordenadores que estén en la misma red o desde el propio Linux que acabamos de instalar, aunque habría que instalar un navegador, por ejemplo, Firefox.

Una vez accedamos, nos saldrá un formulario para que creemos un usuario administrador.

Entramos en “FreePBX Administration”.

 

Ponemos los datos de la cuenta de administrador que acabamos de crear.

 

Saldrá el siguiente mensaje, para activar Asterisk. Como es gratuito, lo activamos poniendo nuestra dirección email y pulsamos Intro. Rellenamos los datos que aparecerán en el formulario siguiente para establecer una contraseña y continuamos.

Nos aparecerá la siguiente pantalla, pulsaremos en Activate.

 

Nos pedirá que introduzcamos el email y, en caso de que no que no exista vuestro email, os pedirá más datos. Con poner un nombre y una password es suficiente, no es necesario rellenar más datos.

 

En la siguiente pantalla pulsaremos Activate. Saldrán unos mensajes indicando que se está haciendo la activación.

 

Nos saldrá otra página por si queremos adquirir más funciones. No elegimos ninguna y al final de la página, pulsamos en “Complete”.

 

En siguiente página que saldrá, elegiremos el idioma. Yo dejo el idioma del sistema (System Language) en inglés ya que muchos manuales están en inglés y es más fácil identificar las opciones. Pulsamos en “Submit”.

 

En siguiente página que saldrá, elegiremos el idioma. Yo dejo el idioma del sistema (System Language) en inglés ya que muchos manuales están en inglés y es más fácil identificar las opciones. Pulsamos en “Submit”.

 

En la última página que saldrá, pulsamos en “Not Now”.

 

Ya nos saldrá un panel con el estado general de Asterisk.

 

Vamos a crear una nueva extensión de teléfono en la que se recibirán las llamadas de los errores. Para ello vamos a Applications -> Extensions.

 

Pulsamos en Add Extension y elegimos “Add New Chan_SIP Extension”.

 

Rellenamos los siguientes datos:

User Extension: El número de extensión, por ejemplo, 801

Display Name: El nombre que queramos

Secret: Es la password para conectarse a la extensión.

Language Code: Spanish

 

Ahora vamos a la pestaña Other y ponemos las opciones a NO. Por último pulsamos en Submit (el botón que está abajo a la derecha).

 

Ahora pulsamos en el botón rojo “Apply Config” (arriba a la derecha).

Para transformar los archivos de texto en audio vamos a usar una aplicación llamada “Festival” que ya viene instalada en AsteriskNow. Este audio será el que se reproduzca durante la llamada. Lo que si vamos a hacer es instalar una voz en español para los audios. En nuestro caso instalaremos unas voces de hombre y de mujer de la Junta de Andalucia.

Para instalarlas, vamos a Sistema -> Administración -> Añadir software y buscamos “Andalucia”. Seleccionamos los dos paquetes que aparecen y le pinchamos en el botón “Aplicar”.

NOTA: Estas voces se instalan de forma automática dentro de la carpeta "/usr/share/festival/lib/voices/es/"

 

Vamos a preparar los archivos para poder hacer la autollamada. Consiste en un script para crear los audios de las alertas de forma dinámica y luego un fichero de extensión “.call” que usa el programa Asterisk para hacer la llamada a la extensión deseada.

En esta página hay más información de cómo se realiza este proceso. Yo voy a hacer un ejemplo básico para mostrar cómo funciona y ya quien quiera que lo mejore o le añada más funciones.

https://www.voip-info.org/wiki/view/Asterisk+auto-dial+out+deliver+message

Primero vamos a crear una carpeta nueva donde guardaremos los scripts que se ejecutarán. Yo voy a llamar a la carpeta “avisos” y estará en la raíz del disco (/avisos). Para crearla debemos abrir el Explorador de Archivos en modo root, para ello usamos el comando “sudo nautilus” en un terminal.

 

Dentro de la carpeta “avisos” guardamos el siguiente script con el nombre “llamada.sh”.

Este script crea el fichero de audio con los datos recibidos desde el Mainframe (nombre del job, hora y fecha del error).

#!/bin/bash

nombre=$1

hora=$2

#Texto para convertir en audio. Recoge el nombre del job, hora y fecha. Al final repite el nombre del job.

texto="Hola. Ha fallado el yob $1 a las $2 del dia $3. $1"

#echo $texto

graba_audio()

{

#Escribe la variable texto en un fichero.

echo $texto > /avisos/texto_alerta

#Escribe en un fichero las opciones del audio.

echo "(voice_JuntaDeAndalucia_es_pa_diphone)(Parameter.set 'Duration_Stretch 1.6)" > /avisos/temp.scm

#Convierte a audio el fichero de texto

text2wave -o /avisos/aviso.ulaw -otype ulaw -scale 5 -eval /avisos/temp.scm /avisos/texto_alerta

}

hacer_llamada()

{

#Hacemos una copia del fichero que contiene los datos de la llamada

cp /avisos/aviso.call /var/spool/asterisk/tmp/

#Ponemos que el creador sea el usuario "asterisk"

chown asterisk:asterisk /var/spool/asterisk/tmp/aviso.call

#Movemos el archivo de llamada a la carpeta de "outgoing"

mv /var/spool/asterisk/tmp/aviso.call /var/spool/asterisk/outgoing/

}

graba_audio

hacer_llamada

exit

 

 

Ahora vamos a crear el archivo “.call” dentro de la carpeta “avisos” con el nombre “aviso.call”.

Channel: SIP/801

MaxRetries: 3

RetryTime: 15

WaitTime: 30

Callerid: 702

Context: aviso-zos

Extension: s

Priority: 1

 

 

Channel es la extensión a la que vamos a llamar.

MaxRetries es el número de veces que se reintentará la llamada.

RetryTime es el tiempo, en segundos, que espera entre reintentos.

WaitTime es el tiempo, en segundos, que duran los tonos de la llamada.

Callerid es quien llama, si queremos que aparezca alguna extensión que hayamos creado.

Context hace referencia a las instrucciones que se ejecutan cuando hacemos esta llamada, por ejemplo, esperar X segundos, reproducir el archivo de audio /avisos/aviso.ulaw, etc.

Priority es la prioridad para que se realice la llamada.

 

Ahora vamos a la ruta “/etc/asterisk” y vamos a editar el fichero “extesions_custom.conf” para definir las instrucciones que se ejecutarán durante la llamada (parámetro Context de archivo anterior).

[aviso-zos]

exten => s,1,Set(TIMEOUT(digit)=5)

exten => s,2,Set(TIMEOUT(response)=15)     

exten => s,3,Wait(2)

exten => s,4,Background(/avisos/aviso)

exten => s,5,Wait(3)

exten => t,2,Hangup


 

En este caso, cuando se coge la llamada, espera 2 segundos, reproduce el aviso, espera 3 segundos y cuelga.

 

Ya hemos preparado la parte del servidor Linux, ahora vamos a z/OS. Primero vamos a conectar ambos sistemas para que podamos acceder por SSH. En el siguiente enlace ya expliqué cómo hay que hacer la configuración para poder conectar dos máquinas por SSH.

http://emuframe.com/index.php/43-conexiones-ssh-en-z-os

ACLARACIÓN:

En este caso, vamos a planificar el job por TWS (OPC) entonces hay que tener en cuenta que ese JCL se va a ejecutar con el usuario de TWS, en mi caso, START2 y no con el habitual (IBMUSER), por lo tanto, habrá que tenerlo en cuenta a la hora de hacer la configuración de SSH para saber cuál es su directorio “Home”.

Para saber cuál es el directorio “Home” del usuario START2 en la parte de Unix System Services (OMVS) de z/OS, ponemos el comando “TSO ISHELL”.

 

Accedemos al menú Setup y a la opción 2 - “User list”.

 

Vemos que su directorio “Home” es la raíz del sistema de archivos.

 

Si entramos en esa ruta (“/”) veremos que debemos meter los ficheros correspondientes para hacer la configuración SSH dentro de la carpeta .ssh cuya ruta es /.ssh

 

FIN DE LA ACLARACIÓN

 

Ahora vamos a crear un JCL que codificaremos para que termine en error y ejecutemos el paso que se conecta a la máquina dónde hemos instalado AsteriskNow y ejecutará el script “/avisos/llamada.sh”. Le pasaremos como parámetros el nombre del job, la hora actual y el día actual. Ese JCL debemos guardarlo dentro de la JOBLIB de TWS porque lo vamos a planificar.

NOTA: El nombre del job está separado por guiones para que cuando se convierta en audio diga las letras separadas en vez de que lo lea como una palabra. La variable “date” es una variable de Unix. Usaremos el comando “sudo” para evitar tener problemas de permisos. Quien quiera puede invertir más tiempo en configurar la seguridad para no tener que usar “sudo”.

 

¡CUIDADO CON LAS MINÚSCULAS AL COPIAR EL JCL! SI SE PONEN COMO MAYÚSCULAS NO FUNCIONARÁ

 

//RTPA155  JOB (9999),'OPCSAMPLES',CLASS=A,MSGCLASS=Q,               

// MSGLEVEL=(1,1),REGION=0M,NOTIFY=&SYSUID                            

//BORRADO   EXEC PGM=IDCAMS                                          

//SYSPRINT  DD SYSOUT=*                                              

//SYSIN DD *                                                         

 SET MAXCC = 8                                                        

//SHELLCMD EXEC PGM=BPXBATCH,REGION=8M,COND=(0,NE)                   

//SHELLCMD EXEC PGM=BPXBATCH                                         

//STEPLIB DD DSN=CEE.SCEERUN,DISP=SHR                                

//STDOUT DD PATH='/u/ibmuser/bin/mystd.out',                         

// PATHOPTS=(OWRONLY,OCREAT,OTRUNC),PATHMODE=SIRWXU                  

//STDERR DD PATH='/u/ibmuser/bin/mystd.err',                         

// PATHOPTS=(OWRONLY,OCREAT,OTRUNC),PATHMODE=SIRWXU                  

//STDPARM  DD   *                                                    

SH nohup /bin/ssh Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo. "                                 

sudo sh /avisos/llamada.sh R-T-P-A-155 `date +%T` `date +%d/%m/%Y`" &

sleep 1                                                               

/*                

 

 

Ahora instalamos en el móvil cualquier aplicación Softphone (por ejemplo, Linphone en Android) para logarnos en la extensión que hemos configurado en Asterisk.

Aquí dejo un video de Youtube que explica cómo configurarlo. Es muy simple, solo hay que seleccionar “USE SIP ACCOUNT”. Después ponemos la extensión en el campo “Username” (801), la password es el código que pusimos en el campo “Secret” (1234abcd) y en “Domain” ponemos la IP de Asterisk (192.168.1.21).

https://www.youtube.com/watch?v=MWf7QIpAagU 

NOTA: Asterisk también permite hacer llamadas a teléfonos móviles y fijos, pero para ello hay que tener configurada una cuenta SIP que te permita hacer este tipo de llamadas. En España, actualmente, si contratas fibra, tendrás una cuenta SIP para realizar las llamadas a través del teléfono fijo de tu casa. Si la operadora (Movistar, Orange, Jazztel…) te facilita los datos, podrías configurar tu cuenta en Asterisk y hacer este tipo de avisos a números externos.

Una vez aparezcamos como “registrados” en la cuenta SIP, planificamos el job RTPA155 para que se ejecute en TWS. Una vez falle, y hayan pasado unos segundos (en mi caso, unos 50 segundos), recibiremos la llamada como aparece en el video de ejemplo que he puesto.

Si la llamada no se llega a realizar, habría que probar si el script “llamada.sh” se ejecuta correctamente, para ello, desde un terminal de Linux lo ejecutamos sin parámetros. Si se hace la llamada, el script está correctamente. En este caso habría que comprobar si la conexión entre máquinas es correcta. También podemos revisar los ficheros “/u/ibmuser/bin/mystd.out” y “/u/ibmuser/bin/mystd.err” para obtener más información del error que se está produciendo.

 

Hasta aquí ha llegado esta explicación para realizar avisos telefónicos automáticos por algún job fallado. En próximas entradas, posiblemente, pruebe el caso contrario, es decir, ejecutar un JCL en z/OS realizando una llamada de teléfono.

 

 

Visto: 1851

Escribir un comentario


Código de seguridad
Refescar