Auftragsverfolgung
Hierbei handelt es sich um eine Reihe von Python-Skripten, die dazu dienen, den Prozess der Abstimmung von Bestellungen mit Einkaufsgruppen zu optimieren und zu automatisieren. Im Grunde automatisiert es den Abruf von Tracking-Informationen, das Hochladen auf die Websites von Einkaufsgruppen und den Bestellabgleich nach der Rückerstattung. Der Hauptzweck dieser Skripte besteht darin, dass man auf einer einzigen Google-Tabelle sofort erkennen kann, welche Bestellungen von den Einkaufsgruppen ordnungsgemäß verfolgt und erstattet wurden, und dem Benutzer die Tools an die Hand zu geben, mit denen er eventuell auftretende Probleme beheben kann.
Was das bewirkt
Es gibt zwei Hauptaufgaben. Sie sind:
get_order_tracking.py:
Dieses Skript führt Folgendes aus:
- Analysiert ungelesene Versandbenachrichtigungs-E-Mails der letzten 45 Tage von Amazon oder Best Buy.
- Analysiert eine Reihe von Informationen aus diesen E-Mails und zugehörigen E-Mails, einschließlich Sendungsverfolgungsnummer(n), Bestellnummer(n), Bestellkosten, E-Mail-Adressen, Bestell-URLs und Versanddaten, und speichert diese Informationen auf der Festplatte und in Drive.
- Lädt diese Tracking-Nummern in die Auftragsverfolgungssysteme von Gruppen wie Pointsmaker, MYS oder USA hoch.
- Gruppiert Bestellungen oder Sendungsverfolgungsnummern, die von Amazon oder Best Buy für einen späteren Abgleich zusammengefasst werden (z. B. werden zwei Bestellungen zusammengefasst, wenn sie in derselben Sendung versendet werden).
- Sendet Ihnen (dem Benutzer) per E-Mail eine Liste der gefundenen Tracking-/Bestellnummern zur Plausibilitätsprüfung.
Wenn eine E-Mail aus irgendeinem Grund nicht analysiert werden kann, wird die E-Mail als ungelesen markiert, sodass Sie sie später manuell anzeigen können. Dies passiert manchmal, wenn Amazon langsam ist. In diesen Fällen schadet es nicht, das Skript erneut auszuführen.
reconcile.py
Dies ist das Drehbuch zur Versöhnung. Es bewirkt Folgendes:
- Lädt in den Gruppen der Tracking-Nummern/Bestellungen von
get_tracking_numbers.py
. - Füllt die erstatteten Kosten aus, wenn möglich (für Gruppen wie Pointsmaker, MYS oder USA). Dazu müssen Sie auf die Website der Gruppe gehen und die Zuordnung von der Tracking-Nummer bis zu den erstatteten Kosten analysieren.
- Gruppiert Bestellungen nach Bestellung (ggf. nur USA).
- Wendet manuelle Anpassungen an (siehe „Blattausgabe“ unten).
- Lädt die Abgleichsausgabe in einem für Menschen lesbaren Format in eine Google-Tabelle hoch. Weitere Informationen finden Sie weiter unten unter „Blattausgabe“.
Einschränkungen
- Dies funktioniert jeweils nur für ein E-Mail-Konto
- Dies funktioniert nur für GMail
- Das automatische Hochladen funktioniert nur in den USA und auf Websites, deren Websites das gleiche Format wie Pointsmaker oder MYS haben
- Alle Adressen müssen einen Schlüssel enthalten, der eindeutig identifiziert, zu welcher Käufergruppe die Adresse gehört. Der Standardwert ist ein Teil der Gruppenadresse.
Voraussetzungen
- Python3 und pip3 (diese sollten zusammenkommen)
Anweisungen
Wenn Sie Windows verwenden, verwenden Sie dieses Handbuch anstelle dieser Anweisungen, da Windows etwas schwierig ist und dieses Handbuch klar ist.
Wenn Sie einen Mac (OSX) verwenden:
Öffnen Sie ein Terminal und führen Sie die folgenden Befehle aus. Diese installieren Homebrew (einen Paketmanager), verwenden dann Homebrew, um Git+Python zu installieren, laden das Projekt herunter und richten dann die Python-Umgebung ein.
cd ~
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew install pyenv
brew install git
git clone https://github.com/gbrodman/order-tracking.git
cd order-tracking
pyenv install 3.7.4
pyenv global 3.7.4
echo -e 'if command -v pyenv 1>/dev/null 2>&1; thenn eval "$(pyenv init -)"nfi' >> ~/.bash_profile
source ~/.bash_profile
echo 'eval "$(pyenv init -)"' >> ~/.zshrc
source ~/.zshrc
pip install -r requirements.txt
In allen Betriebssystemen:
- Trennen Sie die Verbindung zu allen VPNs, die stören könnten (diese können zu Netzwerkverbindungsproblemen führen oder auch nicht).
- Aktivieren Sie IMAP in GMail: Gehen Sie zur Seite „Einstellungen“, dann zur Registerkarte „Weiterleitung und POP/IMAP“ und stellen Sie sicher, dass IMAP aktiviert ist
- Kopieren Sie config.yml.template nach config.yml
- Richten Sie die Konfiguration ein (weitere Informationen finden Sie im Abschnitt „Konfiguration“ weiter unten).
- Führen Sie
python get_tracking_numbers.py
gefolgt von python reconcile.py
aus
Konfiguration
Hier sind Details zu den Feldern in config.yml:
- Bei der E-Mail-Adresse und dem Passwort sollte es sich um ein GMail-Konto handeln – insbesondere sollte es sich bei dem Passwort um ein App-spezifisches Passwort handeln. Sie können die IMAP- und SMTP-Konfiguration wahrscheinlich beibehalten (es sei denn, Sie wissen genau, dass dies nicht der Fall sein sollte).
- Seit März 2020 werden App-Passwörter von Google nicht mehr unterstützt. Für die Anmeldung bei Gmail ist OAuth erforderlich. Einzelheiten zur Einrichtung finden Sie weiter unten.
- Geben Sie für jede Gruppe in „Gruppen“ den vollständigen Namen der Gruppe an (bei Websites wie MYS sollte dies die URL ohne das „.com“-Bit sein). Fügen Sie pro Gruppe einen eindeutigen Schlüssel hinzu (standardmäßig basiert er auf der Adresse), der nur in Versandbenachrichtigungen an diese Gruppe angezeigt wird. Der Benutzername und das Passwort sollten für das Online-Portal der Gruppe gelten, damit wir Tracking-Nummern hochladen und Abgleichsdaten abrufen können.
- „lookbackDays“ gibt an, wie weit zurück in Ihrem E-Mail-Konto wir nach ungelesenen Amazon-Versand-E-Mails suchen. Hinweis: Die Versandlinks laufen nach 45 Tagen ab, daher sollten wir diese Frist nicht überschreiten
- Die AbgleichsbaseSpreadsheetId sollte die ID eines vorhandenen Google Sheets sein. Im folgenden Abschnitt erfahren Sie, wie Sie diesem Blatt die richtigen Berechtigungen erteilen. Die ID kann über die URL abgerufen werden, die die Form „https://docs.google.com/spreadsheets/d/SHEET_ID“ hat.
- Das Feld „driveFolderId“ sollte die ID eines Google Drive-Ordners sein, in dem wir persistente Daten speichern. Dies kann über die URL des Ordners abgerufen werden, die die Form „https://drive.google.com/drive/folders/FOLDER_ID“ hat.
Blätter/Laufwerkskonfiguration und Berechtigungen
Wir müssen ein automatisiertes Google Cloud-Konto erstellen und verwenden, um in Drive und Sheets zu schreiben. So machen wir das:
- Erstellen Sie zunächst ein Google Cloud-Projekt unter https://console.cloud.google.com
- Erstellen Sie als Nächstes das Dienstkonto in Google Cloud und rufen Sie die Anmeldeinformationen dafür ab, indem Sie die Schritte 1–5 auf dieser Seite ausführen. Notieren Sie sich unbedingt die E-Mail-Adresse des Dienstkontos – sie sollte sehr lang sein und am Ende „.gserviceaccount.com“ enthalten.
- Wenn Sie die JSON-Datei mit den Anmeldeinformationen herunterladen, benennen Sie sie in „creds.json“ um und legen Sie sie im selben Verzeichnis wie diese Skripts ab.
- Gehen Sie auf der Website der Google Cloud Console im linken Navigationsbereich zu „APIs und Dienste“.
- Klicken Sie anschließend auf „APIs und Dienste aktivieren“. Dadurch gelangen Sie zur API-Bibliothek. Sie müssen nach „Google Drive API“ und „Google Sheets API“ suchen und diese aktivieren. Suchen Sie nach jedem Begriff, klicken Sie auf den Begriff und aktivieren Sie ihn.
- Stellen Sie als Nächstes für den Abgleich von Google Sheet und dem von uns eingerichteten Google Drive-Ordner sicher, dass Sie das Blatt/den Ordner mit dem zuvor erstellten Dienstkonto teilen. Teilen Sie einfach beide mit der E-Mail-Adresse, die auf „.gserviceaccount.com“ endet (stellen Sie sicher, dass die Adresse über Bearbeitungsberechtigungen für das Blatt und den Ordner verfügt).
- Erstellen Sie für OAuth einen Schlüssel unter https://support.google.com/cloud/answer/6158849?hl=en und speichern Sie ihn als client_secret.json im selben Verzeichnis wie diese Skripte.
Das sollte es sein – die Datei „creds.json“ gibt den Skripten die Möglichkeit, als Dienstkonto ausgeführt zu werden, und wir haben dem Dienstkonto Berechtigungen für die Dinge erteilt, in die es schreiben muss.
Argumente
-
--headless
zur Ausführung in einem Headless-Browser. Dies ist nützlich, wenn Sie nicht sehen möchten, was die Automatisierung tut. -
--firefox
zur Ausführung mit Firefox/Geckodriver statt Chrome -
--groups AB
führt den Abgleich nur für die Gruppen A und B durch. Wenn es weggelassen wird, wird es für alle Gruppen ausgeführt.
Blattausgabe
Die Ausgabe der Abgleichsaufgabe besteht aus zwei Registerkarten im Google Sheet, die wir zuvor konfiguriert haben. Die Registerkarten sind:
Versöhnung
Dies ist die Haupttabelle. Da eine einzelne Sendungsverfolgungsnummer aus mehreren Bestellungen bestehen kann und eine einzelne Bestellung mehrere Sendungsverfolgungsnummern enthalten kann, gruppieren wir sie basierend auf der Aufteilung der Sendungen in Bestellungen. Die Spalten sind:
- Bestellungen: In dieser Gruppe enthaltene Bestell-IDs
- Trackings: In dieser Gruppe enthaltene Trackingnummern
- In Rechnung gestellter Betrag: Gesamtbetrag, der Ihnen für diese Gruppe in Rechnung gestellt wurde
- Erstatteter Betrag: Gesamtbetrag, der auf den Websites der Käufergruppen für diese Gruppe angezeigt wird
- Letztes Versanddatum: Dies ist das Datum der letzten Lieferung. Wenn die Bestellung schon lange her ist und die Kosten nicht ausreichend erstattet werden, liegt wahrscheinlich ein Problem vor.
- POs: Liste der Bestellungen (derzeit nur für USA)
- Gruppe: die Käufergruppe
- An E-Mail: die E-Mail, an die die Versand-/Bestell-E-Mails gesendet wurden
- Manuelle Kostenanpassung: Dies ist eine Möglichkeit, die erwarteten erstatteten Kosten für eine Bestellung anzupassen. Wenn Sie wissen, dass ein Artikel aus gutem Grund zu wenig erstattet wurde, können Sie diesen Betrag hier hinzufügen. Wir gehen davon aus, dass der in Rechnung gestellte Betrag dem erstatteten Betrag zuzüglich dieser manuellen Kostenanpassung entspricht. Diese wird gespeichert, wenn Sie sie ändern.
- Manuelles Überschreiben: Ein weiteres manuelles Feld. Überprüfen Sie dieses, wenn Sie sicher sind, dass die Gruppe korrekt aussieht. Alles andere wird ignoriert und als gelöst markiert
- Gesamtdifferenz: Dies ist die Gesamtdifferenz zwischen dem in Rechnung gestellten und dem erstatteten Betrag (zuzüglich manueller Anpassungen). Grün bedeutet, dass die Beträge gleich waren oder die Überschreibung überprüft wurde, Gelb bedeutet, dass Ihnen zu viel erstattet wurde, und Rot bedeutet, dass Ihnen zu wenig erstattet wurde.
- Notizen: Notizen für Ihren persönlichen Gebrauch
Trackings
Jede Zeile auf diesem Blatt entspricht einer Tracking-Nummer. Es enthält die Bestellung(en) für diese Sendungsverfolgung und andere Informationen dazu, einschließlich des erstatteten Betrags, falls wir einen finden konnten. Diese Registerkarte ist am nützlichsten, um genau herauszufinden, wo ein Problem aufgetreten ist, wenn eine Gruppe einen Artikel falsch gescannt hat.
Import von Amazon-Berichten
Exportieren Sie zunächst einen Amazon Business-Sendungsbericht als CSV (über den Abschnitt „Business Analytics“ der Website). Laden Sie dann diese CSV-Datei auf Google Drive hoch und öffnen Sie sie als Sheets-Datei. Beachten Sie die Blatt-ID, die auf die gleiche Weise wie zuvor aus der Blatt-URL abgerufen werden kann, also „https://docs.google.com/spreadsheets/d/SHEET_ID“. Beachten Sie auch den Tab-Namen.
Führen Sie dann python import_report.py
aus. Sie werden nach der oben genannten Blatt-ID und dem Tab-Namen gefragt – geben Sie diese ein. Es werden Informationen zu den Trackings ausgedruckt, die es importiert, und es werden auch alle Zeilen ausgedruckt, für die keine gültige Gruppe gefunden werden konnte (Hinweis: die Die Adresse ist nicht wie „Stadt, Bundesland“ formatiert, daher empfehle ich für diesen Abschnitt, die Anfänge der Adressen als Gruppenschlüssel zu verwenden, z. B. „123 Fake St“ (ohne Anführungszeichen) in Ihrer Gruppenkonfiguration.
Manueller Auftragsimport
Manchmal möchte man vielleicht manuell ein Tracking-Objekt zum Datenspeicher hinzufügen. Führen Sie dazu das Skript manual_input.py
aus. Wenn Sie es ohne Argumente ausführen, werden Sie nach einer Reihe von Eingaben gefragt (es ermöglicht Ihnen auch, vorhandene Tracking-Objekte zu löschen). Die meisten Argumente sind optional und es wird versucht, vernünftige Standardwerte auszufüllen, aber die Felder Sendungsverfolgungsnummer, Bestellnummer und Gruppe sind erforderlich.
Wenn Sie die Eingabe in einem Schritt ausführen und ein neues Tracking-Objekt in der einfachsten Form hinzufügen möchten, führen Sie einfach einen Befehl aus:
python manual_input.py -a -t TRACKING_NUMBER -g GROUP -o ORDER_NUMBER
z.B
python manual_input.py -a -t TBA1234567890 -g mysbuyinggroup -o 123-1234567-1234567
Spenden
Diese Software ist völlig kostenlos und unter der GNU Affero General Public License lizenziert. Wenn Sie jedoch Lust haben, mir etwas Geld zu spenden, können Sie gerne einen beliebigen Geldbetrag über Paypal an https://paypal.me/GustavBrodman senden