Yowsup-cli 2.0.2, Linux WhatsApp Nachrichten verschicken

„Über die Kommandozeile WhatsApp Nachrichten zu verschicken.“, das wäre was, habe ich mir vor zwei Wochen gedacht. Kurz gegooglet und yowsup entdeckt. Klingt sehr spannend und ich war sofort begeistert.

Vorwort

Die Installation klingt recht simpel, da nur einige Python Pakete installiert werden müssen und schon sollte es gehen. Also habe ich eine Debian VM installiert um yowsup zu installieren. Folgende Schwierigkeiten habe ich dabei festegestellt:

  • Mit Python 3.0 ist es extrem schwierig, da die Pakete sowohl über „aptitude“, wie auch über „pip“ nicht automatisch installiert werden können. Auch findet man diese zum Download stellenweise nur in der Alphaversion.
  • Mit Python 2.6 sollte es gehen. Man kann es auch über aptitude installieren. Aber, installiert man die verschiedenen Pakete über aptitude oder man installiert pip, so wird automatisch Python 2.7 installiert. Mit Python 2.7 funktioniert yowsup nicht!
  • Alle Anleitungen, die ich bisher gefunden habe, beschreiben den alten yowsup Client. Mit der momentanen Version (yowsup-cli v2.0.2, yowsup v2.0.53) funktionieren die Anleitungen nicht mehr, da sich anscheinend viel im Background getan hat. Ich glaube, dass es mit der Ende-zu-Ende Verschlüsselung zu tun hat.

Nun zu meiner Lösung:

Python installieren

Es sollten alle Pakete manuell installiert werden! Nur so hat es bei mir funktioniert.

Geforderte Python Pakete installieren

Nachdem Python installiert wurde, müssen folgende Pakete heruntergeladen werden und installiert werden (Installation von Python Paketen kann unter der Liste nachgelesen werden).

Das waren bei mir alle Abhängigkeiten. Sowohl die, die yowsup fordert, als auch die, die von den einzelnen Paketen gefordert werden. Die Reihenfolge muss für die Installation der Pakete stimmen.

Entpackt werden die Pakete mit folgendem Befehl:

Nachdem das Paket entpackt wurde, in das Verzeichnis wechseln und mit der „setup.py“ Datei das Paket installieren.

Yowsup installieren

Das yowsup git Repository wird mit dem Befehl

auf die Linuxmaschine geklont. Danach kann mit „cd“ in das Verzeichnis gewechselt werden.

In diesem befindet sich wiederum eine „setup.py“ Datei. Diese wie oben installieren

Sollte es hier zu einem Fehler kommen, müssen ggf. noch Python Pakete nachinstalliert werden. Diese können in den letzten Zeilen des Fehlers herausgefunden werden („Import Error: xyz“).

Yowsup konfigurieren

Die Konfigurationsdatei kann z.B. im Homeverzeichnis des Benutzers erstellt werden.

Der Inhalt der Datei sollte folgend aussehen:

 Yowsup registrieren

WhatsApp muss die Handynummer erst registrieren. Dies funktioniert über einen SMS Code, der von WhatsApp an die angegebene Handynummer in der Konfigurationsdatei geschickt wird.

Nach kurzer Zeit sollte eine SMS mit dem benötigten Code auf dem Handy ankommen. Dieser Code muss über die Kommandozeile eingetragen werden:

Die „000-000“ steht hierbei für den Code.

Nachdem der Registrierung Befehl durchgeführt wurde und die Authentifizierung durchgeführt wurde, zeigt die Ausgabe ein Passwort an. Dieses Passwort muss an die vorgesehene Stelle in der Konfigurationsdatei kopiert werden.

Yowsup Client benutzen

Nachdem die Registrierung erfolgreich durchgeführt wurde, kann der Yowsup Client benutzt werden.

Den Client starten:

Sobald der Client gestartet wurde, kann man diesen mit bestimmten Kommandos bedienen. Ich habe hier als Beispiel das Kommando „/help“ eingegeben und folgende Ausgabe erhalten:

Mit „/L“ kann man sich in den in der Konfigurationsdatei angegebenen Account einloggen.

Nachrichten werden automatisch empfangen und können gelesen werden. Allerdings ohne Nicknamen. Es steht immer nur die Nummer dabei.

Nachrichten direkt von der Kommandozeile verschicken

Nun zum eigentlichen Punkt, warum ich das Thema überhaupt bearbeitet habe:
Ich mögchte die Möglichkeit haben, Nachrichten einfach durch einen Cronjob oder ein Monitoring System zu verschicken. Zur Auswahl stand bei mir noch der Versand von SMS. Allerdings ist dies ein teurer Spaß. Also per WhatsApp Nachrichten verschicken. Nun kann ich schon Nachrichten an andere schicken und auch empfangen. Nachrichten empfangen brauche ich nicht. Also habe ich ein wenig recherchiert und bin auf folgenden Befehl gestoßen:

Super Sache! Die Nachricht kommt genauso an, wie alle anderen. Mehr benötige ich nicht, da ich die Nachrichten nicht beantworten möchte.

Schwierigkeiten beim Verschicken

Mit WhatsApp kann man sich Nachrichten einfach selber zusenden. Alleridings nur auf einem Gerät. WhatsApp ist nur dazu konzipiert, auf einem Gerät installiert und benutzt zu werden. Sprich ich kann meine Nummer entweder auf dem Handy oder auf dem Server benutzen.

Achtung! Ich hatte mich selbst für 30 Minuten von meinem Handy ausgeschlossen, das es min. 30 Minuten dauert, bis ein neuer Code angefordert werden kann.

Bestimmt gibt es bei diversen Anbietern aber SIM-Karten, die man einmal benutzen kann, um den SMS Code abzurufen. 🙂

10 Gedanken zu „Yowsup-cli 2.0.2, Linux WhatsApp Nachrichten verschicken“

  1. Prima Anleitung. Nur so zur Info:
    Ich konnte die Reihenfolge der Pakete zur Installation nicht einhalten. ( Fehlermeldung)
    Nach Python2.6 musste ich mit setuptools anfangen.
    Dann lief es glatt bis phyton-dev -das wollte nicht.
    Habs dann mit“ apt-get install python2.6-dev „installiert bekommen.
    Schlussendlich funktioniert es jetz bei mir. Hat aber auch fast 2 Stunden gedauert
    Danke.

  2. Ich bekomme die folgende Fehlermeldung. Was muss ich machen?

    [offline]:/L
    Auth: Logged in!
    Traceback (most recent call last):
    File „/usr/local/bin/yowsup-cli“, line 5, in
    [connected]: pkg_resources.run_script(‚yowsup2==2.3.185‘, ‚yowsup-cli‘)
    File „/usr/lib/python2.7/dist-packages/pkg_resources.py“, line 499, in run_script
    self.require(requires)[0].run_script(script_name, ns)
    File „/usr/lib/python2.7/dist-packages/pkg_resources.py“, line 1235, in run_script
    execfile(script_filename, namespace, namespace)
    File „/usr/local/lib/python2.7/dist-packages/yowsup2-2.3.185-py2.7.egg/EGG-INFO/scripts/yowsup-cli“, line 327, in
    if not parser.process():
    File „/usr/local/lib/python2.7/dist-packages/yowsup2-2.3.185-py2.7.egg/EGG-INFO/scripts/yowsup-cli“, line 231, in process
    self.startCmdline()
    File „/usr/local/lib/python2.7/dist-packages/yowsup2-2.3.185-py2.7.egg/EGG-INFO/scripts/yowsup-cli“, line 259, in startCmdline
    stack.start()
    File „/usr/local/lib/python2.7/dist-packages/yowsup2-2.3.185-py2.7.egg/yowsup/demos/cli/stack.py“, line 25, in start
    self.stack.loop(timeout = 0.5, discrete = 0.5)
    File „/usr/local/lib/python2.7/dist-packages/yowsup2-2.3.185-py2.7.egg/yowsup/stacks/yowstack.py“, line 167, in loop
    asyncore.loop(*args, **kwargs)
    File „/usr/lib/python2.7/asyncore.py“, line 216, in loop
    poll_fun(timeout, map)
    File „/usr/lib/python2.7/asyncore.py“, line 156, in poll
    read(obj)
    File „/usr/lib/python2.7/asyncore.py“, line 87, in read
    obj.handle_error()
    File „/usr/lib/python2.7/asyncore.py“, line 83, in read
    obj.handle_read_event()
    File „/usr/lib/python2.7/asyncore.py“, line 449, in handle_read_event
    self.handle_read()
    File „/usr/local/lib/python2.7/dist-packages/yowsup2-2.3.185-py2.7.egg/yowsup/layers/network/layer.py“, line 73, in handle_read
    self.receive(data)
    File „/usr/local/lib/python2.7/dist-packages/yowsup2-2.3.185-py2.7.egg/yowsup/layers/network/layer.py“, line 80, in receive
    self.toUpper(data)
    File „/usr/local/lib/python2.7/dist-packages/yowsup2-2.3.185-py2.7.egg/yowsup/layers/__init__.py“, line 55, in toUpper
    self.__upper.receive(data)
    File „/usr/local/lib/python2.7/dist-packages/yowsup2-2.3.185-py2.7.egg/yowsup/layers/stanzaregulator/layer.py“, line 28, in receive
    self.processReceived()
    File „/usr/local/lib/python2.7/dist-packages/yowsup2-2.3.185-py2.7.egg/yowsup/layers/stanzaregulator/layer.py“, line 51, in processReceived
    self.processReceived()
    File „/usr/local/lib/python2.7/dist-packages/yowsup2-2.3.185-py2.7.egg/yowsup/layers/stanzaregulator/layer.py“, line 51, in processReceived
    self.processReceived()
    File „/usr/local/lib/python2.7/dist-packages/yowsup2-2.3.185-py2.7.egg/yowsup/layers/stanzaregulator/layer.py“, line 51, in processReceived
    self.processReceived()
    File „/usr/local/lib/python2.7/dist-packages/yowsup2-2.3.185-py2.7.egg/yowsup/layers/stanzaregulator/layer.py“, line 51, in processReceived
    self.processReceived()
    File „/usr/local/lib/python2.7/dist-packages/yowsup2-2.3.185-py2.7.egg/yowsup/layers/stanzaregulator/layer.py“, line 48, in processReceived
    self.toUpper(oneMessageData)
    File „/usr/local/lib/python2.7/dist-packages/yowsup2-2.3.185-py2.7.egg/yowsup/layers/__init__.py“, line 55, in toUpper
    self.__upper.receive(data)
    File „/usr/local/lib/python2.7/dist-packages/yowsup2-2.3.185-py2.7.egg/yowsup/layers/auth/layer_crypt.py“, line 63, in receive
    self.toUpper(payload)
    File „/usr/local/lib/python2.7/dist-packages/yowsup2-2.3.185-py2.7.egg/yowsup/layers/__init__.py“, line 55, in toUpper
    self.__upper.receive(data)
    File „/usr/local/lib/python2.7/dist-packages/yowsup2-2.3.185-py2.7.egg/yowsup/layers/coder/layer.py“, line 35, in receive
    self.toUpper(node)
    File „/usr/local/lib/python2.7/dist-packages/yowsup2-2.3.185-py2.7.egg/yowsup/layers/__init__.py“, line 55, in toUpper
    self.__upper.receive(data)
    File „/usr/local/lib/python2.7/dist-packages/yowsup2-2.3.185-py2.7.egg/yowsup/layers/logger/layer.py“, line 14, in receive
    self.toUpper(data)
    File „/usr/local/lib/python2.7/dist-packages/yowsup2-2.3.185-py2.7.egg/yowsup/layers/__init__.py“, line 55, in toUpper
    self.__upper.receive(data)
    File „/usr/local/lib/python2.7/dist-packages/yowsup2-2.3.185-py2.7.egg/yowsup/layers/__init__.py“, line 160, in receive
    s.receive(data)
    File „/usr/local/lib/python2.7/dist-packages/yowsup2-2.3.185-py2.7.egg/yowsup/layers/__init__.py“, line 101, in receive
    recv(node)
    File „/usr/local/lib/python2.7/dist-packages/yowsup2-2.3.185-py2.7.egg/yowsup/layers/protocol_messages/layer.py“, line 20, in recvMessageStanza
    entity = TextMessageProtocolEntity.fromProtocolTreeNode(node)
    File „/usr/local/lib/python2.7/dist-packages/yowsup2-2.3.185-py2.7.egg/yowsup/layers/protocol_messages/protocolentities/message_text.py“, line 38, in fromProtocolTreeNode
    entity.setBody(node.getChild(„body“).getData())
    AttributeError: ‚NoneType‘ object has no attribute ‚getData‘

  3. Hallo!
    Vielen Dank für die Anleitung.
    Gibt es auch eine Möglichkeit eingehende Nachrichten mittels yowsup und openHAB zu empfangen?
    Für FHEM gibt es ein Device, es muss also technisch lösbar sein…

    Vielen Dank im Voraus!

    1. Hi, den yowsup Client kannst du starten und dann whatsapp Nachrichten senden und empfangen. In wie weit er Nachrichten über Skripte empfangen kann weiß ich nicht.
      Ich denke, dass es vielleicht realisierbar ist, yowsup alle z.B. 5 Minuten alle Nachrichten abzuholen. Und die kannst du dann in openHab als Item anzeigen lassen.
      Aber in wie weit das machbar ist weiß ich nicht.

  4. Hi Johannes,

    kannst du sagen inwieweit dieses „Tool“ zukunftssicher ist? Ich überlege diesen Dienst für eine Website anbieten zu wollen… Sprich: ich sammel Nummern und versorge die Leute dann mit News via Broadcast Message.

    Danke und VG

  5. Hallo

    wo kann ich folgendes Palet finden?
    paket.tar.bz2

    Über eine Antwort würde ich mich freuen.
    Mein Whatsapp-Client läuft momentan auch nicht mehr unter Fhem.
    Gruß Himbi777

    1. Hallo Himbi777,

      ein solches Paket gibt es nicht. Es ist wie das „Paket.tar.gz“ ein Bei spielt. bz2 ist ein Hinweis für eine Komprimierung. Ähnlich wie gz.
      Viele Grüße
      Johannes

    1. Theoretisch sollte Python auf deinem Raspberry schon installiert sein.

      Gib mal folgendes ein:

      python

      Wenn sich eine Python Eingabe öffnet, ist es bereits installiert.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.