Envío de SMS a email usando chandongle (o cualquier aviso al email desde Asterisk)

 

Cuando empezamos a complicar la instalación de Asterisk, nos podemos plantear en algún momento, poder recibir un aviso al mail por diferentes motivos.

Ya sea el reenvío de un SMS móvil, o la información de un nuevo mensaje de voz guardado, o por ejemplo que nos envíe un correo al llamar a una extensión (usada como alarma)

 

El caso es que de una u otra forma queremos recibir un aviso con una información en modo texto.

 

La primera complicación es encontrar la aplicación que integre Gmail sin problemas de compatibilidad. Aquí nos encontramos el primer problema. Yo he sido incapaz de hacer funcionar ssmtp con Gmail. Así que debemos encontrar una aplicación que sea capaz de mover este gestor de correo.

En este caso usaremos Exim, con este gestor de correo, he podido configurar Gmail sin problemas.

 

Bien pues vamos allá:

 

Nos aseguramos de tener instalado Exim además del paquete mailutils, que aunque por defecto debe de estar en raspbian, puede no incluirse en algunas versiones.

 # apt-get install exim4 exim4-config mailutils

 

Si no aparece una pantalla de configuración ejecutaremos el siguiente comando: 

# dpkg-reconfigure exim4-config

 

Comenzamos a configurar exim…

– Tipo de configuración general del correo
Respondemos «el correo se envía mediante un “SMARTHOST”; se recibe a través de SMTP o fetchmail»
– Escriba el nombre del sistema:
Respondemos con nuestro dominio: miDominio.com
– Escriba la dirección IP desde donde va a atender las conexiones al SMTP:
Respondemos: 127.0.0.1 ; ::1
– Otros destinos para los que se acepta el correo:
Aquí no respondemos nada, lo dejamos en blanco.
– Máquinas para las cuales reenviar correo
No piques, esto también hay que dejarlo en blanco.
– Dirección IP o nombre de equipo para el «smarthost» saliente:
(Aquí escribimos nuestro servidor SMTP remoto, por ejemplo…)
smtp.gmail.com::587
Si queremos utilizar una cuenta de gmail, el servidor SMTP de gmail hay que especificarlo junto con el puerto que va a utilizar, y sería esto: smtp.gmail.com::587 (ojo que lleva dos simbolos de dos puntos antes del puerto)
– ¿Desea ocultar el nombre de correo local en los mensajes salientes?
Pues NO.
– ¿Limitar el número de consultas de DNS (marcación bajo demanda)?
Pues NO.
– Mecanismo de entrega para el correo local:
formato mbox en «/var/mail»
–  ¿Dividir la configuración en pequeños ficheros?
No
–  Destinatario del correo de «root» y «postmaster»:
En blanco

Bien, tras esto vamos a configurar algunos datos importantes sobre la cuenta de correo que va a enviar los mensajes:

 # nano /etc/exim4/passwd.client

gmail-smtp.l.google.com:Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.:contraseña
*.google.com:Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.:contraseña
smtp.gmail.com:Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.:contraseña

Aquí pondremos nuestro correo y contraseña de gmail. Recordad que debemos autorizar un dispositivo de terceros o no tener autenticación de doble factor o seguridad avanzada.

Guardamos la configuración

 

Protegemos el archivo para que nadie tenga acceso a leer nuestros datos:

# chown root:Debian-exim /etc/exim4/passwd.client

 

Si estamos configurando nuestra cuenta de Gmail, hay que indicarle (otra vez) que el envío debe hacerlo por el puerto 587.

# nano /etc/exim4/conf.d/transport/30_exim4-config_remote_smtp_smarthost

y justo encima de la línea que dice algo como: (hosts_try_auth…) añadir lo siguiente:

# port=587

Por último, vamos a configurar nuestra identificación saliente:

# echo "root@localhost: Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo." >> /etc/exim4/email-addresses

Recargamos la configuracion:

# update-exim4.conf 

 

Y probamos a enviar un email como hemos hecho antes…

# echo "Prueba de email" |mail -s "Prueba de email" Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.

 

Bien, ahora vamos a configurar el reenvío de mensajes en Asterisk, en este caso el ejemplo es para el reenvío de SMS recibidos por chan_dongle. Lo primero que hacemos es recibir la información como sms y lo mostramos en consola; después volcamos el sms junto con el numero entrante, la fecha y la hora a un archivo de texto llamado sms.txt (almacenará todos los sms) y acto seguido lo volcamos a sms_temp.txt (que almacena solo el mensaje entrante para su reenvío y luego será borrado); enviamos el mensaje; esperamos 5sg; borramos el mensaje temporal; colgamos.

 

; SMS
exten => sms,1,Noop(SMS entrante de ${CALLERID(num)}: ${SMS})
same => n,System(echo '${STRFTIME(${EPOCH},,%H:%M:%S)} : ${STRFTIME(${EPOCH},,%d-%m-%Y)} - ${DONGLENAME} - ${CALLERID(num)}: ${SMS}' >> /var/log/asterisk/sms.txt)
same => n,System(echo '${STRFTIME(${EPOCH},,%H:%M:%S)} ${STRFTIME(${EPOCH},,%d-%m-%Y)} - ${DONGLENAME} - ${CALLERID(num)}: ${SMS}' >> /var/log/asterisk/sms_temp.txt)
same => n,System(mail -s "Nuevo mensaje de texto Asterisk" Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo. < /var/log/asterisk/sms_temp.txt)
same => n,Wait(5)
same => n,System(rm -f /var/log/asterisk/sms_temp.txt;)
same => n,Hangup()

A disfrutarlo!