Jugando con Yowsup-cli 2.0 – Recibir mensajes y hacer cosas

Hola raza ñoña que lee estos post, hoy traigo un super post comparado con la caja de pandora, bueno la verdad que la comparación con la caja de pandora solo es para darle dramatismo. Pero este post será de muuucha utilidad.

Primero que nada, Yowsup es una librería en Python que permite desarrollar aplicaciones para usar los servicios y bondades de Whatsapp. Si clonan el repo de github Repo de Yowsup e instalan todas sus dependencias podrá utilizar un cliente de Whatsapp para Cli bastante bueno, entre sus demostraciones incluyen la opción de envio de mensajes, Echo de mensajes y otras cosas.

Anteriormente ya había trabajado con Yowsup, pero deje de usarlo debido al cambio de arquitectura de Whatsapp que gracias a Dios incluyeron cifrado End to End. Desde unos días atras tengo la encomienda de realizar un sistema para notificaciones y pues Whatsapp lo usa todo el mundo, al menos aquí en México todas las compañías de celular lo ofrecen gratuito o por una recarga de saldo al mes, así que me pareció buena opción usar Whatsapp como medio para enviar alertas y usar Yowsup. Que también se puede hacer con Pushbullet, pero eso es harina de otro costal y otro post en el futuro.

Bueno, manos a la obra, primero que nada tenemos que clonar el repo de Yowsup

git clone https://github.com/tgalal/yowsup.git

Debemos suplir unas cuantas depencias y paquetes necesarios para echar a andar correctamente Yowsup.

 

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install python-dateutil
sudo apt-get install python-setuptools
sudo apt-get install python-dev
sudo apt-get install libevent-dev
sudo apt-get install ncurses-dev

Debemos tener un número de celular disponible para darlo de alta en Whatsapp, ya que recordemos que no podemos usar Whatsapp en dispositivos diferentes -.-‘.

Dentro del directorio donde tenemos descargado Yowsup debemos correr el siguiente comando para instalar yowsup.

sudo python setup.py install

Con esto tendremos yowsup-cli como un comando más el linux, ubicado en /usr/local/bin/yowsup-cli. Procedemos a registrar nuestro número en Whatsapp.

yowsup-cli registration –requestcode sms –phone 521xxxxxxxxxx –cc 52 –mcc 334 –mnc 030
yowsup-cli registration –register xxx-xxx –phone 521xxxxxxxxxx –cc 52

Con esto tendremos la contraseña de Whatsapp para nuestro número de celular.

Podemos guardar nuestros datos de configutación en un archivo como el siguiente ejemplo y nombrarlo como querramos.

#############

cc=52
phone=521
password=

#######

Y podemos probar enviando un mensaje a un número de Whatsapp con el siguiente comando

yowsup-cli demos –config yowsup/whatsapp_config.txt –send 5219999999999 “Tu Cola”

Y a nuestro contacto debe llegarle el mensaje  que mandamos :D.

Hasta esta parte todo bien, podemos hacer un choooooooorro de cosas como notificaiones, alertas etc, peeeeero metiendole mano python realmente se habré un abanico de posibilidades 😀

Cliente de Whatsapp para recibir mensajes y ejecutar comandos de Linux

Si somos curiosos podemos ver que Yowsup viene con varas demos y uno muy importante es el EchoClient, el cual cuando lo ejecutamos, podemos enviar un mensaje a de Whatsapp hacia el número que estamos usando con Yowsup. Pues crearemos una nueva carpeta dentro de la carpeta demos y se llamara readclient.

folder

Bueno el código con el que haremos nuestro cliente será el que se usa en el demo EchoClient pero lo modificaremos un poco, quedando así

ReadClient-Yowsup

El código es el siguiente:


import os
from yowsup.layers.interface import YowInterfaceLayer, ProtocolEntityCallback

class ReadEchoLayer(YowInterfaceLayer):

@ProtocolEntityCallback(“message”)
def onMessage(self, messageProtocolEntity):

if messageProtocolEntity.getType() == ‘text’:
self.onTextMessage(messageProtocolEntity)
elif messageProtocolEntity.getType() == ‘media’:
self.onMediaMessage(messageProtocolEntity)

self.toLower(messageProtocolEntity.ack())
self.toLower(messageProtocolEntity.ack(True))

@ProtocolEntityCallback(“receipt”)
def onReceipt(self, entity):
self.toLower(entity.ack())

def onTextMessage(self,messageProtocolEntity):
# just print info
print(“Llego el mensaje %s” % (messageProtocolEntity.getBody()))
os.system(“notify-send ‘Mensaje de Whatsapp’ ‘{mensje}'”.format(mensje=messageProtocolEntity.getBody()))
os.system(“espeak -ves ‘%s'” % (messageProtocolEntity.getBody()))

def onMediaMessage(self, messageProtocolEntity):
# just print info
if messageProtocolEntity.getMediaType() == “image”:
print(“Echoing image %s to %s” % (messageProtocolEntity.url, messageProtocolEntity.getFrom(False)))

elif messageProtocolEntity.getMediaType() == “location”:
print(“Echoing location (%s, %s) to %s” % (messageProtocolEntity.getLatitude(), messageProtocolEntity.getLongitude(), messageProtocolEntity.getFrom(False)))

elif messageProtocolEntity.getMediaType() == “vcard”:
print(“Echoing vcard (%s, %s) to %s” % (messageProtocolEntity.getName(), messageProtocolEntity.getCardData(), messageProtocolEntity.getFrom(False)))

Como se muestra en el código hacemos un import os para poder ejecutar los comandos de linux desde python :D. En el ejemplo original de EchoClient contiene la linea

self.toLower(messageProtocolEntity.forward(messageProtocolEntity.getFrom()))

Para efectos de nuestro cliente borraremos esa linea, ya que esta es la que se encargar de forwardar el mensaje que recibio el cliente.

Modificaremos la función onTextMessage y quedará de la siguiente manera

onTestMessage

Donde la Primera línea imprime el pantall un mensaje mostando el contenido del mensaje que llegó, en la segunda línea ejecutamos la funcion os.system() y le pasamos el comando de linux a ejecutar, en este caso notify-send para lanzar una notificación en el escritorio.

TestMensaje

La tercera línea tambien ejecuta la función os.system() el cual para como parametro un comando para que la consla hable, un tipo loquendo, pero le pasamos el contenido que llego de el mensaje Whatsapp para que el sistema lo lea, un tipo Jarvis ;).

Está vivo, vivooooo !!!

Vídeo demo.

Bueno, con esto se puede realizar unnnnnn chorro de cosas, una implementación genial sería tcp over Whatsapp para tener un proxy en todos lados :D, pero bueno eso es más elavodaro. Espero que les sea util :D.

 

Anuncios

14 comentarios en “Jugando con Yowsup-cli 2.0 – Recibir mensajes y hacer cosas

  1. hey man, do you need copy all files on echoclient to new folder readclient? (_init_.py , layer.py , stack.py ) and the modify layer.py by your new code. is this correct?

  2. Hola perdona pero al seguir los pasos me marca esto
    INFO:yowsup.common.http.warequest:{“status”:”fail”,”reason”:”old_version”}

    status: fail
    reason: old_version

    Tengo esta version
    Finished processing dependencies for yowsup2==2.3.185

  3. Buenos Dias, Yo necesito crear un numero de whatsapp, donde mis contactos puedan mandarme archivos multimedia (sobre todo, fotografias y Videos) y se queden almacenados localmente. De Hardware base, tengo un Banana Pi, convertida en NAS con 5Hdd de 2,5″, y uno de ellos dedicado para esta tarea. La idea, es que el proceso autoarranque al iniciar el sistema, y automaticamente, vaya descargando todo lo que llegue (vamos como en el movil). Actualmente tengo configurado el Wheezy, con Openmediavault para control del NAS a traves de navegador. El sistema operativo no dispone de escritorio, solo linea de comandos. Puedo usar Yowsup? o me recomiendas otra alternativa?

  4. cuando pongo “sudo python setup.py install”
    me sale “””python: can’t open file ‘setup.py’: [Errno 2] No such file or directory”””
    porque dice que el directorio no existe?? alguna ayuda?

  5. Hola bro, hay laguna forma de traer los mensajes manualmente?.
    Es que necesito devolver los mensajes recibidos en un json pero todo lo que encuentro tiene ese loop y por lo tanto no puedo responder.
    PD:Estoy trabajando con un servicio web.

  6. Hola amig@, estoy probando la instalacion siguiendo los pasos de tu pagina, pero nunca ha llegado el sms de registro, Vivo en Mexico, es necesario poner los 10 digitos del celular antes del 52, o es necesario poner solo los 8 digitos?

  7. Yowsup en estos momentos bloquea las cuentas despues de algun tiempo no definido, solo me permitio sacar un mensaje por linea de comandos. Si alguien sabe de alguna solucion se lo agradeceremos millones de usuarios. Salu2

Deja una respuesta:

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

w

Conectando a %s