Whatsapp XMPP Transport

2016/03/01

Whatsapp XMPP Transport

Um Whatsapp über XMPP anzusprechen ist wie folgt vorzugehen.

Voraussetzung:

  • Ubuntu
  • ejabberd
  • Spectrum2

Installation


apt-get install python python-dev
apt-get install python-pip python-mysqldb dateutil

pip install e4u protobuf yowsup2 constants python-axolotl

Konfiguration


cd /opt
git clone https://github.com/stv0g/transwhat.git transwhat
cd transwhat
cp conf/spectrum_prod.cfg /etc/spectrum2/transports/whatsapp.cfg

vim /etc/spectrum2/transports/whatsapp.cfg
[service]

user = ejabberd
group = ejabberd

jid = whatsapp.jabber.aventer.biz
password = `<password>`

server = 127.0.0.1
port = 5561

#cert = /opt/transwhat/conf/spectrum_cert.p12

backend_host = localhost
backend = /opt/transwhat/transwhat.py
users_per_backend = 100

admin_jid = `<ADMIN>`@jabber.aventer.biz

[identity]
name = transWhat

type = xmpp
category = gateway

[logging]
config = /etc/spectrum2/logging.cfg
backend_config = /etc/spectrum2/backend-logging.cfg
vim /etc/ejabberd/ejabberd.cfg

%% whatsapp Transport
{5561, ejabberd_service, [
              {ip, {127, 0, 0, 1}},
              {access, all},
              {shaper_rule, fast},
              {host, "whatsapp.jabber.aventer.biz", [{password, "`<password>`"}]}
              ]},


cd /opt/transwhat
vim constants.py
__author__ = "Steffen Vogel"
__copyright__ = "Copyright 2013, Steffen Vogel"
__license__ = "GPLv3"
__maintainer__ = "Steffen Vogel"
__email__ = "post@steffenvogel.de"
__status__ = "Prototype"

"""
 This file is part of transWhat

 transWhat is free software: you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation, either version 3 of the License, or
 any later version.

 transwhat is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with transWhat. If not, see `<http://www.gnu.org/licenses/>`.
"""

DB_HOST = "`<db_server>`"
DB_USER = "`<db_user>`"
DB_PASS = "`<db_password>`"
DB_TABLE = "`<db_table>`"

BASE_PATH = "/opt/transwhat"

TOKEN_FILE = BASE_PATH + "/logs/tokens"
MOTD_FILE = BASE_PATH + "/conf/motd"
REQUESTS_FILE = BASE_PATH + "/logs/requests"
	  chown -R ejabberd: /opt/transwhat
	  /usr/bin/spectrum2 -j whatsapp.jabber.aventer.biz /etc/spectrum2/transports/whatsapp.cfg

Troubleshooting

AuthError: not-authorized

Seit einigen Tagen erscheint die Fehlermeldung “AuthError: not-authorized” in den Logfiles und ein Anmelden an Whatsapp ist nicht möglich. Nun, dies liegt an der geänderten API seitens Whatsapp. Ich habe auch ein Workaround bei Hand:

	vim /usr/local/lib/python2.7/dist-packages/yowsup/env/env_s40.py

Hier den Eintrag:

	class S40YowsupEnv(YowsupEnv):
	_VERSION = "2.13.5"

Ändern in:

	class S40YowsupEnv(YowsupEnv):
	_VERSION = "2.14.5"

Und schon ist ein anmelden auch wieder möglich.

Whatsapp Registrieren

<WRAP center round info 60%> Unser XMPP Dienstleister bietet auch einen WhatsApp Transport an. Die Einrichtung ist aber nicht ganz ohne. Daher überlegt Euch ganz genau was Ihr tut. </WRAP>

<WRAP center round tip 60%> WhatsApp via XMPP ist dahingehend sehr schön, da nicht die Kontakte des Adressbuches an WhatsApp geschickt wird. </WRAP>

Als “Legacy Network Name” gibt Ihr Eure Telefonnummer im Format “<LÄNDERCODE><MOBILNUMMER>” an. z.B. “491761234567”. Nun zum Passwort! WhatsApp verwendet keine vom User gewählten Passwörter. Meldet Ihr Euch über die WhatsApp-App an das System an, schickt es Euch eine Pin Nummer per SMS, diese müsst Ihr als Bestätigung in die App eintippern. Daraufhin wird ein Passwort generiert. Aus dieser Logic heraus, wird nach jeder WhatsApp-App :-) Installation ein neues Passwort generieren. Dies bedeutet aber auch, wenn Ihr Euch nicht an diese Anleitung hält, funktioniert anschließend Eure App nicht mehr. :-(

Nur für nicht WhatsApp-App Nutzer

Für jemanden der keinen anderen WhatsApp Client verwendet, ist es am einfachsten. Ladet Euch einfach das OpenSource Mono Programm “WART.exe”((https://github.com/mgp25/WART)) herunter und startet es. Unter Linux via “mono WART.exe ui”. Unter Windows muss .NET 4.0 installiert sein. Anschließend könnt Ihr auf WART.exe klicken und es startet ohne Installation.

Step 1

Gebt als erstes unter “Phone Number” eure Telefonnummer im Format “<LÄNDERCODE><MOBILNUMMER>” ein. Klickt anschließend auf ID und daraufhin auf “Request Code”. Ihr bekommt nun an die angegebene Telefonnummer eine SMS geschickt.

Step 2

Gebt dem per SMS gesendeten Code im Format “123567” (d.h. ohne “-“) in das Code Feld ein. Klickt anschließend auf “Confirm Code”. Nun erscheint in einem Popup das Passwort. Wenn Ihr es nicht abtippen wollt, schließt das Popup. Er erscheint nun unter “Step 3”. Kopiert es und Pastet es ins Registration Fenster.

Für Android Nutzer

<block center round important 60%> Geht nur mit einem gerooteten Android. </block>

Um ein das Passwort eines schon vorhandenen WhatsApp Zugangs zu ermitteln, können Anroid User die App “WAPW2” installiere. Den SourceCode sowie eine Downloadbare APK findet man unter https://github.com/venomous0x/WhatsAPI/issues/983. Da ich kein Android Smartphone habe, kann ich leider nicht sagen ob es funktioniert oder welche Berechtigungen die App benötigt.

Für IOS Nutzer

Tja was soll ich sagen…. :-) Unter IOS ist mir nicht bekannt das es so eine App gibt.

WhatsApp Kontakt hinzufügen

Um ein Kontakt hinzuzufügen, klickt man im Chat Client auf “Kontakt Hinzufügen”. Dort gibt Ihr Euren Kontakt im Format “<LÄNDERCODE><MOBILNUMMER>@whatsapp.jabber.aventer.biz” an.

WhatsApp Räume hinzufügen

Um in ein WhatsApp Raum zu gelangen, müsst Ihr dahin eingeladen werden.