Kreacher
Erfahrenes Mitglied
- 157
Einleitung
Wer kennt es nicht? Ein WhatsApp-Kontakt hat plötzlich eine neue Handynummer und es schreibt euch eine vorerst unbekannte, nicht eingespeicherte Nummer an mit "Hey, ich bin XYZ, das ist fortan meine neue Handynummer, bitte einspeichern..."
Die meisten werden die neue Handynummer dann einfach einspeichern, was bleibt denn schon auch groß anderes übrig?! Schließlich bleibt die Person dahinter ja derselbe Kontakt wie vorher, hat eben nur eine neue Nummer.
Für WhatsApp allerdings, bleibt die Person nicht derselbe Kontakt wie vorher. WhatsApp kann nicht wissen, dass die neue Handynummer ein alter Kontakt von euch ist, der nur seine Nr. gewechselt hat. Für WhatsApp ist dies ein völlig neuer, fremder Kontakt und es legt deswegen dann auch in seiner Datenbank einen komplett neuen Chat unter dieser neuen Nummer an.
Für manche reicht das dann - eventuell wollte man sowieso mal die alten Chats ausmisten, also perfekt für einen neuen, leeren Chat-Neustart.
Andere wiederum finden das suboptimal - sie hätten gerne auch bei einer neuen Nummer des Kontakts gerne da weitergeschrieben, wo der alte Chat aufgehört hat und in ihrer Chatliste (je nach Häufigkeit des Nummernwechsels eines Kontakts) dann nicht zig verschiedene "alte" Chats von ein und demselben Kontakt, chronologisch dann total auseinandergerupft...
Die Frage ist: kann man Chats von verschiedenen Handynummern (von ein und derselben Person dahinter) so miteinander vereinen, dass am Ende wieder ein chronologischer, kompletter Chat herauskommt bzw. man einfach dort weiterschreibt, wo der alte Chat aufgehört hat?
Die Antwort: Ja! Wenn auch mit ein paar Hindernissen.
Da ich mich seit ca. einem 3/4 Jahr aus persönlichen Gründen massiv mit dem Aufbau und der Struktur von WhatsApp's Datenbank beschäftigt habe und eigentlich dabei primär ein anderes Ziel verfolgt habe (nämlich das Verschmelzen von unterschiedlichen Chatverläufen/Backups aus verschiedenen Zeitpunkten (und spoiler: auch DAS ist möglich!)), bin ich auf dieses Phänomen hier eher durch Zufall gestoßen, finde es aber nichtsdestotrotz ein nützliches Tool, das ich mittlerweile selber bei mir angewendet habe, um die Nummernwechsel einiger Kontakte allesamt im jeweils neusten Chat zu vereinen. Im Folgenden werde ich darlegen, wie dies möglich ist.
Voraussetzungen
Für so ein Vorhaben ist es notwendig, Zugriff auf WhatsApp's System-Datenbank zu haben, denn dort müssen die Änderungen vorgenommen werden. Diese Betriebsdatenbank ist leider nur zugänglich, wenn man ein Smartphone/Handy in Nutzung hat, welches ROOT-Rechte hat. Denn die Datenbank von WhatsApp befindet sich im Root-Bereich unter:
root/data/data/com.whatsapp/databases/msgstore.db
Aber keine Sorge! Ihr müsst jetzt nicht euer aktuelles Smartphone "rooten" und damit Garantie und Funktionalität riskieren. Es reicht schon aus, wenn man für dieses Vorhaben ein älteres, Garantie-abgelaufenes Smartphone "missbraucht" und dafür rootet - ich habe z.B. ein altes Samsung Galaxy S7 Edge dafür genommen. Gerootet, dann meinen aktuellen WhatsApp-Account draufgespielt und schon kann's losgehen. Wenn am Ende alles abgeschlossen ist, kann man dann sein modifiziertes WhatsApp einfach wieder auf sein aktuelles Smartphone rüberziehen.
Wie man genau rootet, beschreibe ich hier jetzt nicht. Da gibt's in diesem Forum (oder auch anderswo) sicherlich gute Anleitungen dafür.
Vorgehen
Um die System-Datenbank von WhatsApp erst einmal öffnen und anzeigen zu können (ich empfehle hierbei unbedingt das Arbeiten mit einem Computer - nicht vom Handy selbst, wobei dies wohl auch möglich wäre), benötigt man eine Software, mit welcher man Datenbanken im Format *db öffnen kann. Ich verwende hierfür das kostenlose "DB Browser for SQLite"
Damit öffnet man nun also die auf den PC aus dem obigen Root-Verzeichnis gezogene msgstore.db-Datenbank von WhatsApp. Wer sich mit SQL bzw. Datenbanken auskennt, hat es dementsprechend leicht(er) - für mich als informatik-ferne Person war dies dementsprechend alles erstmal Neuland und sehr verwirrend. Mit der Zeit versteht man aber mehr und mehr.
Das folgende Grundverständnis bezüglich WhatsApp-Chats ist aber wichtig, wenn man verschiedene Chats miteinander verschmelzen möchte:
Angenommen, euer Kontakt A hat die Handynummer 1234. Sobald ihr diesen Kontakt in euer Handy-Adressbuch einspeichert (selbst wenn ihr damit nie einen WhatsApp-Chat startet), greift WhatsApp auf diese Daten zu und legt in seiner Datenbank in der Tabelle JID (= Job Identifier) die jeweilige Handynummer unter einer sog. JID-ID in der Spalte "User" ab.
Das sieht in der WA-Datenbank dann so aus:
Die Nummer beginnt (für deutsche Kontakte) also immer mit dem Ländercode "49", gefolgt von der Handynummer. Jeder Kontakt im Adressbuch, ob er nun für WhatsApp relevant ist oder nicht (folglich also auch Festnetznummern oder 0800er-Nummern) bekommt in der WhatsApp-Datenbank eine JID-ID zugeordnet.
Eröffnet ihr nun einen Chat in WhatsApp mit einer bestimmten Nummer, erstellt WhatsApp in der Tabelle "Chat" eine ID, die diesen Chat exakt identifiziert, z.B. 50. Damit der Chat mit der _ID 50 aber auch einer Handynummer zugeordnet werden kann, verweist der Chat mit der _ID 50 in der Chat-Tabelle auch auf die jeweilige jid-row-ID in der JID-Tabelle. Wir sehen also, dass der Chat mit der chat_row_id=50 einer jid_row_id=29 zugeordnet ist. Will man jetzt wissen, welche Handynummer sich hinter der jid_row_id=29 verbirgt, muss man wieder zurück in die obige JID-Tabelle und dort unter der _ID=29 nachschauen. Dort ist dann die jeweilige Handynummer gelistet.
Dieses Basis-Wissen reicht jetzt eigentlich schon aus, um verschiedene Chats miteinander verschmelzen zu lassen.
Wir nehmen nun also an, euer Kontakt hatte die alte Handynummer "12345", nun aber die Handynummer gewechselt und fortan ist seine neue Nummer "67890".
Wir suchen nun also in der Datenbank in der JID-Tabelle nach der alten Handynummer "12345" und finden diese meinetwegen verknüpft mit der jid_row_id=100.
In der Chat-Tabelle schauen wir nach, welche chat_row_id mit der jid_row_id=100 verknüpft ist und stellen dann fest, es ist die 55.
Also:
Alte Handynummer 12345
Chat_row_ID = 55
JID_row_ID = 100.
Nun schauen wir nach, was die neue Handynummer des selben Kontakts ist und stellen meinetwegen fest:
Neue Handynummer 67890
Chat_row_ID = 1050
JID_row_ID = 370
Jetzt haben wir alle Daten, die wir zum Verschmelzen benötigen. Wir wollen nun also erreichen, dass der alte Chat mit der nicht mehr benutzten alten Handynummer Teil des neuen Chats der neuen Handynummer wird. Dafür gaukeln wir WhatsApp vor, dass auch der alte Chat unter der alten Handynummer schon seit jeher von der neuen Handynummer "erzeugt" wurde, indem wir einfach die Chat-row-id und die JID-row-ID ersetzen.
Sprich:
der alte Chat mit der ursprünglichen chat_row_ID = 55 bekommt nun ebenfalls die Chat_row_ID = 1050 des neuen Chats und die JID_row_ID = 100 des alten Chats bekommt nun auch die JID_row_ID = 370 des neuen Chats. Der alte Chat wurde sozusagen fortan einfach von der "neuen" Handynummer erzeugt und gliedert sich somit nahtlos an den Beginn des neuen Chats an.
Dies ist mit Hilfe des folgenden SQL-basierten Bash-Scripts möglich, das die notwendigen Änderungen in der WA-Datenbank vornimmt (Der Pfad zur Datenbank, also hier im Code dir= [...], gibt an, dass meine Datenbank der Einfachheit halber auf der ersten Ebene des Handys liegt, also nirgendwo in irgendeinem Unterordner, sondern direkt auf der ersten Ebene, wo auch der DCIM, Music, Download-Order ist: /storage/emulated/0/msgstore.db):
Zur Ausführung dieses Bash-Scripts verwende ich die Handy-App "Termux". Das jeweilige Bash-Script samt der zu bearbeitenden Datenbank müssen beide also auf dem Handy abgelegt werden. Sicherlich wäre auch eine Bearbeitung am PC machbar; da Termux aber linux-basiert ist, wäre das unter Windows nicht ohne Weiteres so einfach möglich, deswegen habe ich in dem Fall Windows nur dafür verwendet, mithilfe des SQLite-Programms oben die Datenbanken zu öffnen und anzuschauen - die eigentliche Bearbeitung bzw. Ausführen des Scripts läuft dann aber mit Hilfe von Termux auf dem Handy.
Damit wurde der alte Chat unter der alten Handynummer nahtlos in den nun aktuellen Chat unter der neuen Handynummer eingefügt. Für WhatsApp sieht es fortan so aus, als wäre der alte Chat niemals unter der alten Handynummer erzeugt worden, sondern schon immer von der neuen, nun aktuellen Handynummer. Alle Medien (Bilder, Videos, Sprachnachrichten, etc.) des alten Chats sind daher unverändert übernommen in den neuen Chat.
Die nun modifizierte WhatsApp-Datenbank muss abschließend nun noch im System-Verzeichnis oben (root/data/data/com.whatsapp/databases/) mit der dortigen alten msgstore.db ersetzt bzw. überschrieben werden, danach kann man WhatsApp einfach normal öffnen und die Änderungen sind in der Chatliste sofort sichtbar. Dafür müssen vorher aber unbedingt noch die dort ebenfalls befindlichen 2 Cache-Dateien namens msgstore.db-shm & msgstore.db-wal gelöscht werden, die WhatsApp während des Betriebs und Zugriffs auf die System-Datenbank anlegt. Werden diese 2 nicht gelöscht, kommt es nach dem Ersetzen der alten System-Datenbank mit der Neuen beim Öffnen von WA direkt zum Absturz, da die Cache-Dateien noch auf die alte Datenbank referieren und nicht auf die nun modifizierte:
Um das Ganze jetzt wieder auf euer aktuelles, nicht-gerootetes Handy zu bringen, erzeugt ihr einfach ein stinknormales, lokales Chat-Backup, kopiert dieses auf das neue Handy und lasst es dort von WhatsApp wiederherstellen. Et Voila.
Wer kennt es nicht? Ein WhatsApp-Kontakt hat plötzlich eine neue Handynummer und es schreibt euch eine vorerst unbekannte, nicht eingespeicherte Nummer an mit "Hey, ich bin XYZ, das ist fortan meine neue Handynummer, bitte einspeichern..."
Die meisten werden die neue Handynummer dann einfach einspeichern, was bleibt denn schon auch groß anderes übrig?! Schließlich bleibt die Person dahinter ja derselbe Kontakt wie vorher, hat eben nur eine neue Nummer.
Für WhatsApp allerdings, bleibt die Person nicht derselbe Kontakt wie vorher. WhatsApp kann nicht wissen, dass die neue Handynummer ein alter Kontakt von euch ist, der nur seine Nr. gewechselt hat. Für WhatsApp ist dies ein völlig neuer, fremder Kontakt und es legt deswegen dann auch in seiner Datenbank einen komplett neuen Chat unter dieser neuen Nummer an.
Für manche reicht das dann - eventuell wollte man sowieso mal die alten Chats ausmisten, also perfekt für einen neuen, leeren Chat-Neustart.
Andere wiederum finden das suboptimal - sie hätten gerne auch bei einer neuen Nummer des Kontakts gerne da weitergeschrieben, wo der alte Chat aufgehört hat und in ihrer Chatliste (je nach Häufigkeit des Nummernwechsels eines Kontakts) dann nicht zig verschiedene "alte" Chats von ein und demselben Kontakt, chronologisch dann total auseinandergerupft...
Die Frage ist: kann man Chats von verschiedenen Handynummern (von ein und derselben Person dahinter) so miteinander vereinen, dass am Ende wieder ein chronologischer, kompletter Chat herauskommt bzw. man einfach dort weiterschreibt, wo der alte Chat aufgehört hat?
Die Antwort: Ja! Wenn auch mit ein paar Hindernissen.
Da ich mich seit ca. einem 3/4 Jahr aus persönlichen Gründen massiv mit dem Aufbau und der Struktur von WhatsApp's Datenbank beschäftigt habe und eigentlich dabei primär ein anderes Ziel verfolgt habe (nämlich das Verschmelzen von unterschiedlichen Chatverläufen/Backups aus verschiedenen Zeitpunkten (und spoiler: auch DAS ist möglich!)), bin ich auf dieses Phänomen hier eher durch Zufall gestoßen, finde es aber nichtsdestotrotz ein nützliches Tool, das ich mittlerweile selber bei mir angewendet habe, um die Nummernwechsel einiger Kontakte allesamt im jeweils neusten Chat zu vereinen. Im Folgenden werde ich darlegen, wie dies möglich ist.
Voraussetzungen
Für so ein Vorhaben ist es notwendig, Zugriff auf WhatsApp's System-Datenbank zu haben, denn dort müssen die Änderungen vorgenommen werden. Diese Betriebsdatenbank ist leider nur zugänglich, wenn man ein Smartphone/Handy in Nutzung hat, welches ROOT-Rechte hat. Denn die Datenbank von WhatsApp befindet sich im Root-Bereich unter:
root/data/data/com.whatsapp/databases/msgstore.db
Aber keine Sorge! Ihr müsst jetzt nicht euer aktuelles Smartphone "rooten" und damit Garantie und Funktionalität riskieren. Es reicht schon aus, wenn man für dieses Vorhaben ein älteres, Garantie-abgelaufenes Smartphone "missbraucht" und dafür rootet - ich habe z.B. ein altes Samsung Galaxy S7 Edge dafür genommen. Gerootet, dann meinen aktuellen WhatsApp-Account draufgespielt und schon kann's losgehen. Wenn am Ende alles abgeschlossen ist, kann man dann sein modifiziertes WhatsApp einfach wieder auf sein aktuelles Smartphone rüberziehen.
Wie man genau rootet, beschreibe ich hier jetzt nicht. Da gibt's in diesem Forum (oder auch anderswo) sicherlich gute Anleitungen dafür.
Vorgehen
Um die System-Datenbank von WhatsApp erst einmal öffnen und anzeigen zu können (ich empfehle hierbei unbedingt das Arbeiten mit einem Computer - nicht vom Handy selbst, wobei dies wohl auch möglich wäre), benötigt man eine Software, mit welcher man Datenbanken im Format *db öffnen kann. Ich verwende hierfür das kostenlose "DB Browser for SQLite"
Damit öffnet man nun also die auf den PC aus dem obigen Root-Verzeichnis gezogene msgstore.db-Datenbank von WhatsApp. Wer sich mit SQL bzw. Datenbanken auskennt, hat es dementsprechend leicht(er) - für mich als informatik-ferne Person war dies dementsprechend alles erstmal Neuland und sehr verwirrend. Mit der Zeit versteht man aber mehr und mehr.
Das folgende Grundverständnis bezüglich WhatsApp-Chats ist aber wichtig, wenn man verschiedene Chats miteinander verschmelzen möchte:
Angenommen, euer Kontakt A hat die Handynummer 1234. Sobald ihr diesen Kontakt in euer Handy-Adressbuch einspeichert (selbst wenn ihr damit nie einen WhatsApp-Chat startet), greift WhatsApp auf diese Daten zu und legt in seiner Datenbank in der Tabelle JID (= Job Identifier) die jeweilige Handynummer unter einer sog. JID-ID in der Spalte "User" ab.
Das sieht in der WA-Datenbank dann so aus:
Die Nummer beginnt (für deutsche Kontakte) also immer mit dem Ländercode "49", gefolgt von der Handynummer. Jeder Kontakt im Adressbuch, ob er nun für WhatsApp relevant ist oder nicht (folglich also auch Festnetznummern oder 0800er-Nummern) bekommt in der WhatsApp-Datenbank eine JID-ID zugeordnet.
Eröffnet ihr nun einen Chat in WhatsApp mit einer bestimmten Nummer, erstellt WhatsApp in der Tabelle "Chat" eine ID, die diesen Chat exakt identifiziert, z.B. 50. Damit der Chat mit der _ID 50 aber auch einer Handynummer zugeordnet werden kann, verweist der Chat mit der _ID 50 in der Chat-Tabelle auch auf die jeweilige jid-row-ID in der JID-Tabelle. Wir sehen also, dass der Chat mit der chat_row_id=50 einer jid_row_id=29 zugeordnet ist. Will man jetzt wissen, welche Handynummer sich hinter der jid_row_id=29 verbirgt, muss man wieder zurück in die obige JID-Tabelle und dort unter der _ID=29 nachschauen. Dort ist dann die jeweilige Handynummer gelistet.
Dieses Basis-Wissen reicht jetzt eigentlich schon aus, um verschiedene Chats miteinander verschmelzen zu lassen.
Wir nehmen nun also an, euer Kontakt hatte die alte Handynummer "12345", nun aber die Handynummer gewechselt und fortan ist seine neue Nummer "67890".
Wir suchen nun also in der Datenbank in der JID-Tabelle nach der alten Handynummer "12345" und finden diese meinetwegen verknüpft mit der jid_row_id=100.
In der Chat-Tabelle schauen wir nach, welche chat_row_id mit der jid_row_id=100 verknüpft ist und stellen dann fest, es ist die 55.
Also:
Alte Handynummer 12345
Chat_row_ID = 55
JID_row_ID = 100.
Nun schauen wir nach, was die neue Handynummer des selben Kontakts ist und stellen meinetwegen fest:
Neue Handynummer 67890
Chat_row_ID = 1050
JID_row_ID = 370
Jetzt haben wir alle Daten, die wir zum Verschmelzen benötigen. Wir wollen nun also erreichen, dass der alte Chat mit der nicht mehr benutzten alten Handynummer Teil des neuen Chats der neuen Handynummer wird. Dafür gaukeln wir WhatsApp vor, dass auch der alte Chat unter der alten Handynummer schon seit jeher von der neuen Handynummer "erzeugt" wurde, indem wir einfach die Chat-row-id und die JID-row-ID ersetzen.
Sprich:
der alte Chat mit der ursprünglichen chat_row_ID = 55 bekommt nun ebenfalls die Chat_row_ID = 1050 des neuen Chats und die JID_row_ID = 100 des alten Chats bekommt nun auch die JID_row_ID = 370 des neuen Chats. Der alte Chat wurde sozusagen fortan einfach von der "neuen" Handynummer erzeugt und gliedert sich somit nahtlos an den Beginn des neuen Chats an.
Dies ist mit Hilfe des folgenden SQL-basierten Bash-Scripts möglich, das die notwendigen Änderungen in der WA-Datenbank vornimmt (Der Pfad zur Datenbank, also hier im Code dir= [...], gibt an, dass meine Datenbank der Einfachheit halber auf der ersten Ebene des Handys liegt, also nirgendwo in irgendeinem Unterordner, sondern direkt auf der ersten Ebene, wo auch der DCIM, Music, Download-Order ist: /storage/emulated/0/msgstore.db):
Bash:
dir="/storage/emulated/0/msgstore.db"
#Alte Chat-row-ID löschen
sqlite3 "$dir" "delete from chat where _id in (55);"
#Alte JID-Row-ID löschen
sqlite3 "$dir" "delete from jid where _id in (100)"
#Änderungen auf sämtliche Tabellen anwenden
tbls=($(sqlite3 $dir ".tables"))
for tbl in "${tbls[@]}"; do
columns=($(sqlite3 "$dir" "select name from pragma_table_info('$tbl');"))
for column in "${columns[@]}"; do
if [[ "$column" == *"chat_row_id"* || "$column" == *"jid_row_id"* ]]; then
#Chat_Row_ID abändern
if [[ "$column" == *"chat_row_id"* ]]; then
sqlite3 "$dir" "update $tbl set $column=1050 where $column=55;"
#JID_Row_ID abändern
elif [[ "$column" == *"jid_row_id"* ]]; then
sqlite3 "$dir" "update $tbl set $column=370 where $column=100;"
fi
fi
done
done
Zur Ausführung dieses Bash-Scripts verwende ich die Handy-App "Termux". Das jeweilige Bash-Script samt der zu bearbeitenden Datenbank müssen beide also auf dem Handy abgelegt werden. Sicherlich wäre auch eine Bearbeitung am PC machbar; da Termux aber linux-basiert ist, wäre das unter Windows nicht ohne Weiteres so einfach möglich, deswegen habe ich in dem Fall Windows nur dafür verwendet, mithilfe des SQLite-Programms oben die Datenbanken zu öffnen und anzuschauen - die eigentliche Bearbeitung bzw. Ausführen des Scripts läuft dann aber mit Hilfe von Termux auf dem Handy.
Damit wurde der alte Chat unter der alten Handynummer nahtlos in den nun aktuellen Chat unter der neuen Handynummer eingefügt. Für WhatsApp sieht es fortan so aus, als wäre der alte Chat niemals unter der alten Handynummer erzeugt worden, sondern schon immer von der neuen, nun aktuellen Handynummer. Alle Medien (Bilder, Videos, Sprachnachrichten, etc.) des alten Chats sind daher unverändert übernommen in den neuen Chat.
Die nun modifizierte WhatsApp-Datenbank muss abschließend nun noch im System-Verzeichnis oben (root/data/data/com.whatsapp/databases/) mit der dortigen alten msgstore.db ersetzt bzw. überschrieben werden, danach kann man WhatsApp einfach normal öffnen und die Änderungen sind in der Chatliste sofort sichtbar. Dafür müssen vorher aber unbedingt noch die dort ebenfalls befindlichen 2 Cache-Dateien namens msgstore.db-shm & msgstore.db-wal gelöscht werden, die WhatsApp während des Betriebs und Zugriffs auf die System-Datenbank anlegt. Werden diese 2 nicht gelöscht, kommt es nach dem Ersetzen der alten System-Datenbank mit der Neuen beim Öffnen von WA direkt zum Absturz, da die Cache-Dateien noch auf die alte Datenbank referieren und nicht auf die nun modifizierte:
Um das Ganze jetzt wieder auf euer aktuelles, nicht-gerootetes Handy zu bringen, erzeugt ihr einfach ein stinknormales, lokales Chat-Backup, kopiert dieses auf das neue Handy und lasst es dort von WhatsApp wiederherstellen. Et Voila.
Zuletzt bearbeitet:
Bearbeitet von:
kruemelgirl
- Grund: Beitrag bearbeitet. Gruß kruemelgirl