miércoles, 27 de marzo de 2013

Gammu y mensajeria de texto (sms) masiva

Wammu es un programa para manejar los datos en el teléfono celular como los contactos, calendario y mensajes. Está creado sobre la biblioteca Gammu, que provee una capa de abstracción para trabajar con diferentes teléfonos celulares de diferentes proveedores (incluyendo Nokia, Sony-Ericsson, Motorola, Samsung, Siemens, Huawei y otros). puedes ir a la pagina oficial y obtener mas informacion http://es.wammu.eu/ instalando
# aptitude install gammu gammu-doc gammu-smsd libgammu7 libgsmsd7
comando para identificar el dispositivo
# gammu -c /etc/gammu-smsdrc --identify
respuesta:
Dispositivo : /dev/ttyUSB0
Fabricante : Huawei
Modelo : unknown (E173)
Firmware : 11.126.85.00.197
IMEI : 352214041427007
IMSI SIM : 734048700255917

NOTA: para las pruebas estoy utilizando un mdoem usb Huawei E173 con un chip de telefono movistar, en la pagina oficial de gammu (http://es.wammu.eu/) puedes ubicar los telefonos y modems soportados ademas del tipo de conexion, para la prueba se utilizo connection = at19200 verificar los puertos del dispositivo que reconoce la pc
# ls -l /dev/tty*
resultado:
crw-rw---- 1 root dialout 188, 0 2013-03-25 14:22 /dev/ttyUSB0
crw-rw---- 1 root dialout 188, 1 2013-03-25 14:22 /dev/ttyUSB1
crw-rw---- 1 root dialout 188, 2 2013-03-25 14:23 /dev/ttyUSB2
crw-rw---- 1 root dialout 188, 3 2013-03-25 14:23 /dev/ttyUSB3
crw-rw---- 1 root dialout 188, 4 2013-03-25 14:23 /dev/ttyUSB4
crw-rw---- 1 root dialout 188, 5 2013-03-25 14:23 /dev/ttyUSB5

Algunos casos solo reconoce ttyUSB0 al ttyUSB3
El archivo de configuracion por modem conectado, si existen multiples modem es necesario crear un archivo por cada modem. Adicional es necesario identificar por cual puerto salen y entran los sms para el caso de la prueba donde se reconocen 6 puertos se utiliza port = /dev/ttyUSB0 si reconoce 4 puertos el puerto de salida es otro, solo queda probar.
# vim /etc/gammu-smsdrc
[gammu]
port = /dev/ttyUSB0
model =
logformat = textalldate
connection = at19200
synchronizetime = yes
use_locking =
gammuloc =

[smsd]
#Para el demonio SMSD
logfile = /home/usuario/smsdlog
debuglevel = 1
commtimeout = 0
sendtimeout = 10
receivefrequency = 60
phoneid = modem1
#Para la Base de Datos
service = sql
driver = native_pgsql
host = 192.168.1.3
pin = 1234
user = u_test
password = pass_server
database = sms4
guardar y salir :wq el parametro phoneid = modem1 cambia por cada dispositivo conectado, asi identificas cada modem; al igual que puedes crear diferentes archivos para los logs de cada dispositivo para probar el modem conectado puedes utilizar el comando:
# echo "prueba" | gammu -c /etc/gammu-smsdrc --sendsms TEXT 04141111111 -> aqui el nuemero al que envias el sms
Como se observa en el archivo de configuracion existe una BD asociada al proceso database = sms4, es donde se registran los mensajes entrantes y salientes, para crear esta bd utiliza el archivo .sql propio para la instalacion de gammu La estructura de la bd para gammu se encuentra en:
/usr/share/doc/gammu/examples/sql/pgsql.sql
Solo queda crear la bd desde el archivo pgsql.sql
# su - postgres
$ psql 
postgres=# create database sms4 with owner u_fmnh;
postgres=# \q

$ psql sms4 u_fmnh -h localhost < /usr/share/doc/gammu/examples/sql/pgsql.sql

para ejecutar el envio de sms automatico solo hay q levantar el proceso
# gammu-smsd -c /etc/gammu-smsdrc
Si existen mas modems conectados y configurados el parametro -c recibe la ruta de cada configuracion Si deseas probar si todo funciona inserta en la bd creada en la tabla outbox query format sms flash
INSERT INTO outbox("DestinationNumber", "TextDecoded", "CreatorID", "Class")
 VALUES ('04141111111', 'prueba', 'Gammu', '0')

query format sms normal
INSERT INTO outbox("DestinationNumber", "TextDecoded", "CreatorID", "Class")
 VALUES ('04141111111', 'prueba', 'Gammu', '-1')
Si tienes multiples dispositivos conectados y quieres enviar sms por cada uno de ellos debes señalar en el insert a cual modem envias utilizando el parametro de configuracion phoneid en los campos SenderID CreatorID
INSERT INTO outbox ("DestinationNumber", "TextDecoded", "SenderID", "CreatorID", "Coding","Class") 
VALUES ('04141111111','prueba modem1','modem1','modem1',''Default_No_Compression'',0)' 


INSERT INTO outbox ("DestinationNumber", "TextDecoded", "SenderID", "CreatorID", "Coding","Class") 
VALUES ('04141111111','prueba modem1','modem2','modem2',''Default_No_Compression'',0)' 
...y listo!!
Solo queda departe de tu codigo controlar la carga por cada modem, debe existir una mejor forma de balancear la carga del envio de sms, pero aun no lo se.. adicional, reiniciar el servicio si falla...

comenten al respecto.. gracias!

38 comentarios:

  1. Hermano, buena noche... tengo el siguiente problema y me gustaría saber si sabe cual sería la causa y su posible solución: El problema es que el dispositivo después de tener horas conectado me deja de recibir y enviar mensajes, al parecer pierde conexión, cual sería la causa ?
    De antemano Gracias!!

    ResponderEliminar
    Respuestas
    1. Saludos! efectivamente eso ocurre! aun no he podido detectar el problema, la solución que he podido conseguir para eso es generar un script que detenga el proceso y lo inicie nuevamente. Si consigues alguna otra solución comentala por aca. Gracias!

      Eliminar
  2. Yo instale Gammu en Windows 7 y tengo el mismo problema. De momentos gammu captura y envia los sms, pero luego deja de hacerlo.
    No se cual sera la solucion.
    Ojala hayan encontrado alguna solucion

    ResponderEliminar
  3. hola,

    alguien sabe el procedimiento para poder dejarlo como servicio,

    actualmente tengo 2 modems conectados y tengo que hacer lo siguiente para que me envie por los dos

    gammu-smsd -c /etc/gammu-smsdrc
    gammu-smsd -c /etc/gammu-smsdrd

    quisiera saber si alguien ha podido dejar mas de un modem conectado pero como demoni, es decir que se pueda iniciar/reiniciar/detener

    por ejemplo

    service smsd start
    service smsd restart
    service smsd stop

    gracias.

    ResponderEliminar
    Respuestas
    1. sudo gammu-smsd --config /etc/gammu-smsdrc --pid /var/run/gammu-smsd.pid --daemon

      Asi queda como demonio, inicia solito, incluso cuando reinicias el equipo

      Eliminar
  4. Saludos! efectivamente seria excelente poder dejarlo como un servicio.. pero no aun no he dado con eso, en realidad no he podido dedicarle mas tiempo.. si consigues la forma puedes dejar el comentario para solucionarlo! Gracias por el comentario.

    ResponderEliminar
  5. ok, estoy investigando, cualquier cosa comento aca =) si alguien mas sabe como hacerlo que comente...

    solo para saber, para iniciar el demonio es por gammu-smsd -c /etc/gammu-smsdrc

    para detenerlo como lo hago?? y para reiniciarlo?? alguien sabe?

    ResponderEliminar
    Respuestas
    1. yo lo que hago para detenerlo es matando el proceso con un kill y vuelvo a ejecutarlo.. seguro que hay una mejor manera...

      Eliminar
  6. y la confirmacion de los mensaje la recibes en el campo DeliveryDateTime solamente en la base o lo puedes identificar de otra forma, ya que envie un mensaje a un movil apagado e igual me lo confirmo.

    ResponderEliminar
  7. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  8. Buenas tardes por favor amigos alguien me puede horientar para isntalar gammu en mi equipo ya que debo utilizarlo como proyecto de grado, y es para este mes por favor se lo pido y disculpe.

    ResponderEliminar
  9. Ya conecte el modem, pero al correr este comando ls -l /dev/tty* no me aparece ttyUSB0 sino /dev/ttyS0. ¿Es lo mismo?.

    Si corro lsusb si me aparece y me da esta ruta /dev/bus/usb/001/003
    Intente poner la ruta en el archivo de configuración pero esa no me funciona

    ResponderEliminar
  10. Buenas como estas Roiman, tengo un evolucion2 CM980 HUAWEI, y no reconoce,poseo ubuntu 14.04, agradezco tu ayuda muchas gracias.

    ResponderEliminar
  11. Hola Amigos. Excelente blog. Bueno yo tengo unos problemas. He probado como demonio y luego de enviar unos 2000 sms le servicio genera errores. Probe usarlo como servicio y use Kalkun, pero peor. El servicio se cuelga cuando va por unos 400 sms. No he podido enviar más de 3000 sms usando el servicio con base de datos. El problema es el modem que pierde la conexion y debo reiniciar el servidor para que vuelva a la vida. Alguien ha tenido estos problemas.????

    ResponderEliminar
  12. Por cierto Carlos, el Evolution 2 no funciona con gammu porque este telefono es CDMA, gammu trabaja solo con telefonos GSM.


    Saludos

    ResponderEliminar
  13. Hola, yo pude conectar gammu con postgres funcionando con un celular Motorola, el problema que tengo es que cuando envío sms masivos, por ejemplo 2000, envía 10 o 20 sms y marca en la tabla sentitem como que los envió a todos sin error. Alguien sabe porque pasa esto y como puedo solucionarlo?

    ResponderEliminar
  14. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  15. ese creo q es el comportamiento que debe tener.. inbox mensajes entrantes, outbox mensajes pendientes por salir, sentitems son los mensajes enviados.. checa esto!
    http://wammu.eu/docs/manual/smsd/tables.html#sentitems

    ResponderEliminar
  16. Buenas tengo un problema al poner "gammu -c /etc/gammu-smsdrc --identify" me tira un error : Error opening device. Unknown, busy or no permissions.
    Ya probe con sudo y sin el, alguna solución?

    ResponderEliminar
  17. Como envio a varios numero en una sola instruccion

    ResponderEliminar
  18. Nadie con la solucion, para cuando se desconecta el modem ????

    Díganme el tiempo que dura activo, para ponerme a desarrollar algo para este problema y les facilito la información. Saludos amigos.

    ResponderEliminar
    Respuestas
    1. Hola! podrías generar un proceso y ejecutarlo por CRON verificando que el módem este activo o ejecutar los comandos para verificar los puertos donde están montados los dispositivos.. si consigues / conseguiste la solución comentala! Gracias!

      Eliminar
  19. Amigos, alguien se a dedicado a modificar la base de dato???
    Quiero eliminar cosas, de la base de dato... Pero me da error, obvio tiene que ser por consultar en el daemon de gammu. Pero quiero saber si alguien se ha dedicado a esto.

    ResponderEliminar
  20. Gracias por tan buen aporte me a servido muchisimo

    ResponderEliminar
    Respuestas
    1. Por nada.. El blog lo he tenido un poco abandonado de contenido, pero no he tenido mucho tiempo de escribir.. Gracias por los comentarios y la buena vibra..

      Eliminar
    2. De un tiempo dejo de funcionar lo tenia bien funcionando, he formateado instalado desde cero pero me sigue dando Desconectado

      Eliminar
    3. me ocurre lo mismo Desconectado

      Eliminar
    4. Lo que hago es recibir mensajes desde la bandeja de entrada de Kalkun

      Eliminar
  21. ¿Alguien sabe cómo hacer en Windows 10?

    ResponderEliminar
  22. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  23. Hola como podria ejecutar un ussd en gammu?

    ResponderEliminar
  24. Gracias a este tutorial he podido solventar muchisimos problemas en cuanto a la gestión de gammu para los que tengan problemas con debian 9 en vez de instalar
    gammu gammu-doc gammu-smsd libgammu7 libgsmsd7

    haganlo de esta forma gammu gammu-doc gammu-smsd python-gammu python3-gammu

    ResponderEliminar
  25. Hola, Excelente tutorial lo he seguido todo, pero hay algo que no he podido resolver, no se si pueden ayudarme, y es el de conectar Modem remotamente, es decir, teniendo 2 servidores, en uno el servidor Gamm, en el otro servidor el MODEM USB, entonces como debería configurar el parametro "port = /dev/ttyUSB1"?.
    De ante mano muchisimas gracias.
    un saludo

    ResponderEliminar