y que no se nos quede ninguno por el camino
Voy a completar un poco el post anterior. Si ya lo has puesto en funcionamiento, posiblemente te hayas dado cuenta de que si envías muchos seguidos, algunos whatsapp se quedan por el camino. Para evitar esto, vamos a hacer un par de scripts en nuestro RaspberryPi.
Veamos el problema al que nos enfrentamos. Usando el script envia_whatsapp.sh del post anterior:
root@raspberrypi:~# for n in $(seq 1 10); do envia_whatsapp.sh 666777888 "prueba $n" ; done
Llega lo siguiente (varia mucho):
No sería un problema muy preocupante, sino fuera porque la idea de esto, es usarlo como alarmas en con Nagios (por ejemplo). Haciendo algunas pruebas, veo que no hay problemas, siempre y cuando se envíe un whatsapp cada dos segundos. Como ya sabéis soy bastante perro programando, así que empiezo así:
/usr/local/bin/demonio_whatsapp.sh
#!/bin/bash while ((1)); do sentencia=$(head -1 /var/spool/whatsapp/colawhatsapp.col) if [ $(echo $sentencia | wc -c) -gt 8 ]; then echo se hace; destino=$(echo $sentencia | cut -f2 -d\ | cut -f1 -d\_ ) ; mensaje=$(echo $sentencia | cut -f2 -d\_) ; orden=$(echo $sentencia | cut -f1 -d\ ) ; echo number=$destino smsencode=$mensaje; /bin/bash /usr/local/bin/envia_whatsapp.sh $destino "$mensaje" ; cat /var/spool/whatsapp/colawhatsapp.col | grep -v $orden > /var/spool/whatsapp/colawhatsapp.col2 ; mv /var/spool/whatsapp/colawhatsapp.col2 /var/spool/whatsapp/colawhatsapp.col ; fi sleep 2; done
ese script mira la primera línea del archivo /var/spool/whatsapp/colawhatsapp.col, donde se irán registrando los nuevos mensajes por enviar. De haber uno lo envía y lo borra de la cola. Se repite esto cada dos segundos. A continuación el script para encolar los envíos:
/usr/local/bin/encola_whatsapp.sh
#!/bin/bash echo movil: $1 echo mensaje: $2 let ultimo=$(cat /var/spool/whatsapp/ultimo.col)+1 echo $ultimo > /var/spool/whatsapp/ultimo.col echo whatsapp$ultimo:::whatsapp $1_$2 | sed 's/\:\:\://g' >> /var/spool/whatsapp/colawhatsapp.col echo mensaje $ultimo encolado
Este script, crea la cola de envíos y lleva un contador. Y este el script del post anterior, con algunos cambios:
/usr/local/bin/envia_whatsapp.sh
#!/bin/bash # programado por Juanmol para http://rsppi.blogspot.com echo se recibe: $@ >> /tmp/enviawhatsapp.log ruta=/usr/src/WhatsAPI-master/src/php/ cat $ruta/testprotocol.php | sed "s/destino/$1/g" | sed "s/mensaje/$2/g" > $ruta/elphp.php estado=$(php $ruta/elphp.php | wc -l ) # ademas de enviarlo guarda el estado if [ $estado -gt 1 ]; then echo el mensaje no se ha enviado, se reencola; /bin/bash /usr/local/bin/encola_whatsapp.sh $1 \"$2\" & else echo parece que el mensaje se ha enviado; fi rm $ruta/elphp.php
Creamos la ruta y los archivos, ajustamos permisos:
mkdir -p /var/spool/whatsapp touch /var/spool/whatsapp/colawhatsapp.col echo 0 > /var/spool/whatsapp/ultimo.col chmod +x /usr/local/bin/demonio_whatsapp.sh
chmod +x /usr/local/bin/encola_whatsapp.sh
Para que arranque el demonio, lo voy a hacer con screen, añadimos al /etc/rc.local :
screen -d -m -S demoniowhatsapp /usr/local/bin/demonio_whatsapp.shpodemos reiniciar, o simplemente ejecutar la línea anterior para poner en marcha el demonio. Y ahora lo probamos, para enviar uno nuevo:
root@raspberrypi:~# encola_whatsapp.sh 666777888 "hola caracola"y llega (pos claro). Ahora enviamos 10 seguidos:
root@raspberrypi:~# for n in $(seq 1 10); do encola_whatsapp.sh 666777888 "prueba $n" ; doney el móvil vemos como llegan todos, poco a poco.
muchas gracias!! por cierto creo que al manual primero del whatsapp la falta alguna cosa, porque lo hice la primera vez y bien, pero ahora que formateado de nuevo el raspberry me da error.
ResponderEliminarMe ecanta tu blog :)
y ... que error te da?
EliminarEste comentario ha sido eliminado por el autor.
EliminarPego lo que sale en la terminal:
Eliminarhttp://pastebin.com/6sKVQvY1
Mi testprotcol.php
http://pastebin.com/cateBs0k
Lo tengo puesto asi para poder testearlo, luego cambiare las variables para el script, pero no funciona, pienso que cambiaron algo en la api porque recuerdo que la version de la ultima vez que lo hice no salia esos mensajes en la terminal al ejecutar el php.
si que lo han cambiado, pero con un poco de ojo seguro que encontramos como solucionarlo para la nueva versión. Cuando tenga un rato me pongo con esto.
Eliminarya he descubierto el problema, tenia una version de whatsapp mas moderna y no me dejaba hacer login, he bajado una mas antigua y ahora funciona correctamente.
Eliminarla version de 2 campos de 3 digitos no funciona pero si funciona la de 1 campo con 3 digitos.
gracias por la observación!
EliminarMuchas gracias Juan
ResponderEliminarYo no consigo que envíe... se queda como bloqueado al enviar, aunque los mensajes los encola bien. Adjunto una prueba de envío:
ResponderEliminarroot@Rasp:/usr/src/whatsapp/src/php# envia_whatsapp.sh 666777888 "TEST"
^C
root@Rasp:/usr/src/whatsapp/src/php# envia_whatsapp.sh 34666777888 "TEST"
^C
root@Rasp:/usr/src/whatsapp/src/php#
root@Rasp:/usr/src/whatsapp/src/php# cat /tmp/enviawhatsapp.log
se recibe: 666777888 hola caracola
se recibe: 666777888 prueba 1
se recibe: 666777888 prueba 1
root@Rasp:/usr/src/whatsapp/src/php# /usr/local/bin/demonio_whatsapp.sh
se hace
number=666777888 smsencode=prueba 1
root@Rasp:/var/spool/whatsapp# cat /var/spool/whatsapp/colawhatsapp.col
whatsapp1whatsapp 666777888_prueba 1
whatsapp2whatsapp 666777888_prueba 2
Por supuesto, el nº es inventado, pero es para que se vea que se prueba con 34 y sin 34 y con un nº nacional y todo eso....
¿Podría ser problema de permisos, de que no encuentre el GW o algo así, algo nat estático que necesite? La máquina navega ok, tiene PHP5 instalado y funcionando.
¿Me queda algo por comprobar?
La línea:
ResponderEliminarecho 0 > /var/spool/whatsapp/ultimo.col
Me dá este error, con sudo y sin sudo:
-bash: /var/spool/whatsapp/ultimo.col: Permiso denegado
Ni puta idea que es el -bash xD :___(
a mi tambien me ha dado ese error. Lo que he hecho ha sido irme con el navegar del escritorio como root y sobre el archivo darle a propiedades luego a permision y lo he puesto todo de lectura y escritura.
Eliminardespues he puesto la linea en el terminal de nuevo y no me ha dado el error.
no se si es correcto pero bueno
es correcto como dice @Rusty, pero si estas por consola sin X, hazle un:
Eliminarchmod 777 /var/spool/whatsapp/ultimo.col
Ah, o sea que solo es darle todos los permisos de lectura/escritura.
ResponderEliminarLo que pasa que para asignar los permisos 777 primero tiene que existir el archivo, ¿creo un archivo vacío con el nano y luego le doy los permisos y ya está?
Es que no entiendo muy bien que hace el "0 >" después del echo (que sirve para crear un archivo, no?)
En mi caso el archivo estaba creado
EliminarEste comentario ha sido eliminado por el autor.
ResponderEliminarapt-get install screen
ResponderEliminarme he dado cuanta despues. Pero nada sigue sin funcionarme, no me da error pero no me llegan. Mira que le he dado vueltas a todo mil veces ya
ResponderEliminarJuanmol deberia tener alguna libreria en especial o algo instalado que pueda hacerme falta para que funcione aparte del php5?
ResponderEliminarA mi tampoco me da error y tampoco me llegan xD
ResponderEliminarSe ponen a la cola y nada más.
Y he probado el número de FonYou y sí que está activo.
Cuando envías un mensaje de prueba:
ResponderEliminarencola_whatsapp.sh 666777888 "hola caracola"
¿en la consola tiene que salir lo siguiente?:
movil: 666777888
mensaje: hola caracola
mensaje 1 encolado
¿o tiene que poner?:
"parece que el mensaje se ha enviado"
por que a mi me salen los 3 mensajes anteriores, pero voy a ultimo.col y allí solo hay un número escrito, el "1"
Voy a tirar la raspi por la ventana >_<
ya somos 2.
EliminarYo si lo mando como encola_whatsapp.sh me sale lo mismo que ha ti, si lo mando con envia_whatsapp.sh me sale "parece que el mensaje se ha enviado"
en ninguno de los casos llegan, y ademas con el encola sale muy rapido el resultado y con el envia parece como que hiciera algo más
Y además en el Whatsapp aparece la hora del último mensaje enviado desde la Pi pero nunca llega xD
EliminarEstoy pensando que igual no nos funciona porque nos falte algo de instalar que Juanmol tenga y nosotros no, ya que él ha ido instalando todos los superpoderes con sus respectivos recursos para cada uno, sin embargo nosotros sólo habremos instalado los que nos interesaban, dejando cosas en el tintero.
ResponderEliminarA ver si saco tiempo un día e instalo todo desde el primer tutorial (menos asterisk, que no lo usaría)
Hola, no creo que sea eso xd. Lo que pasa es que han cambiado la API y la manera de resolver la clave (eso creo). Yo lo he probado tambien y creo que donde falla es en la funcion de login despues de conectar, me da un error justo en esa linea.
EliminarHaber si alguien consigue que le funcione ...
Hola,
ResponderEliminarComprobado que el problema es del login, han cambiado la forma de generar la password. He creado un usuario nuevo con BlueStacks y no he conseguido que funcionase. Pero tras modificar el script "testprotocol.php" creado por Juanmol y usando el número de teléfono e imei de un equipo que tenía instalado el Whatsapp desde hace unos meses, está funcionando. Está modificado para utilizar la última versión del API
http://pastebin.com/7piMtrBg
Hola,
ResponderEliminarAlgo han cambiado en el Whatsapp, ¿le funciona a alguien?
Un saludo
Ayer por la noche cambiaron algo. A mi me fallo ayer, no me avisaba las descargas automaticas de los Torrents, y eso que en el log marcaba como enviada sin errores.
ResponderEliminarEsperaremos a ver si lo solventan, pero por si acaso estoy poniendo 2 avisos en mis scripts. El WhatsApp y el de Gtalk (por si acaso falla uno)
El whatsapp desde la Raspberry ha dejado de funcionar.
ResponderEliminarSin embargo, desde BlueStacks funciona ok
Parece que desde la RaspBerry falla la validación del usuario o algo así porque ni siquiera llega a conectar con whatsapp
en el wahssap cada usuario tiene un codigo secreto para poder enviar mensajes:
ResponderEliminar- en iOS se crea poniendo la mac del movil al reves y pasandolo por MD5
- en el resto de moviles (android, WindowsPhone.... poniendo al reves el IMEI y pasandolo por MD5.
¿Habeis escuchado que los iphones 3G se han quedado sin wasap? La cosa que han cambiado la manera de crear el codigo secreto para enviar los mensajes ya que se han llegado a registrar mas de 10.000 envios por persona/dia (SPAM).
Encontré la nueva manera para crear el codigo secreto pero estaba en pyton en el gitHub de la API sale en el foro.