Suivi des commandes
Il s'agit d'un ensemble de scripts Python destinés à rationaliser et automatiser le processus de rapprochement des commandes avec les groupes d'achats. Fondamentalement, il automatise la récupération des informations de suivi, le téléchargement sur les sites des groupes d'achats et le rapprochement des commandes après remboursement. L'objectif principal de ces scripts est de permettre à l'utilisateur de consulter une seule feuille Google et de savoir immédiatement quelles commandes ont été correctement suivies et remboursées par les groupes d'achat, et de donner à l'utilisateur les outils nécessaires pour résoudre tout problème pouvant survenir.
Qu'est-ce que cela fait
Il y a deux tâches principales. Ils sont:
get_order_tracking.py :
Ce script effectue les opérations suivantes :
- Analyse les e-mails de notification d'expédition non lus des 45 derniers jours provenant d'Amazon ou de Best Buy.
- Analyse un ensemble d'informations de ces e-mails et des e-mails associés, notamment les numéros de suivi, les numéros de commande, les coûts de commande, les adresses e-mail, les URL de commande et les dates d'expédition, et enregistre ces informations sur le disque et sur Drive.
- Télécharge ces numéros de suivi vers les systèmes de suivi des commandes de groupes comme Pointsmaker, MYS ou USA.
- Regroupe les commandes ou les numéros de suivi qui sont regroupés par Amazon ou Best Buy pour un rapprochement ultérieur (par exemple, deux commandes sont regroupées si elles sont expédiées dans le même envoi).
- Vous envoie par e-mail (à l'utilisateur) une liste des numéros de suivi/commande qu'il a trouvés, à des fins de vérification de l'intégrité.
S'il ne peut pas analyser un e-mail pour une raison quelconque, il marquera l'e-mail comme non lu afin que vous puissiez le consulter manuellement plus tard. Cela se produit parfois si Amazon est lent. Dans ces cas, il n'y a aucun mal à réexécuter le script.
réconcilier.py
C'est le scénario de la réconciliation. Il fait ce qui suit :
- Charge dans les groupes de numéros de suivi/commandes à partir de
get_tracking_numbers.py
. - Remplit les frais remboursés quand cela est possible (pour les groupes comme Pointsmaker, MYS ou USA). Cela implique d'accéder au site Web du groupe et d'analyser la cartographie du numéro de suivi au coût remboursé.
- Regroupe les commandes par bon de commande (le cas échéant, uniquement aux États-Unis).
- Applique les ajustements manuels (voir « Sortie des feuilles » ci-dessous).
- Télécharge le résultat du rapprochement vers une feuille Google dans un format lisible par l'homme. Voir « Sortie des feuilles » ci-dessous pour plus d'informations.
Limites
- Cela ne fonctionnera que pour un seul compte de messagerie à la fois
- Cela ne fonctionnera que pour GMail
- Le téléchargement automatique ne fonctionne qu'aux États-Unis et sur les sites dont les sites Web sont du même format que Pointsmaker ou MYS.
- Toutes les adresses doivent contenir une clé qui identifie de manière unique à quel groupe d'achat appartient l'adresse. La valeur par défaut fait partie de l'adresse du groupe.
Conditions préalables
- Python3 et pip3 (ceux-ci devraient se réunir)
Instructions
Si vous êtes sous Windows, utilisez ce guide au lieu de ces instructions, car Windows est un peu difficile et ce guide est clair.
Si vous êtes sur Mac (OSX) :
Ouvrez un terminal et exécutez les commandes suivantes. Ceux-ci installent Homebrew (un gestionnaire de packages), puis utilisent Homebrew pour installer Git+Python, téléchargent le projet, puis configurent l'environnement Python.
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
Dans tous les systèmes d'exploitation :
- Déconnectez-vous de tous les VPN qui pourraient interférer (ils pourraient ou non vous causer des problèmes de connectivité réseau)
- Activez IMAP dans GMail : accédez à la page Paramètres, puis à l'onglet "Transfert et POP/IMAP", puis assurez-vous que IMAP est activé.
- Copiez config.yml.template dans config.yml
- Configurez la configuration (voir la section "Configuration" ci-dessous pour plus d'informations)
- Exécutez
python get_tracking_numbers.py
suivi de python reconcile.py
Configuration
Voici le détail des champs sur config.yml :
- L'e-mail et le mot de passe doivent être ceux d'un compte GMail. Plus précisément, le mot de passe doit être un mot de passe spécifique à l'application. Vous pouvez probablement conserver la même configuration IMAP et SMTP (sauf si vous êtes sûr que vous ne devriez pas le faire).
- Depuis mars 2020, les mots de passe des applications ne sont plus pris en charge par Google. OAuth doit être utilisé pour se connecter à Gmail. Voir les détails ci-dessous pour savoir comment configurer cela.
- Pour chaque groupe dans « groupes », incluez le nom complet du groupe (pour des sites comme MYS, il doit s'agir de l'URL moins le bit « .com »). Incluez une clé unique par groupe (la valeur par défaut est basée sur l'adresse) qui apparaîtra uniquement dans les notifications d'expédition à ce groupe. Le nom d'utilisateur et le mot de passe doivent accéder au portail en ligne du groupe afin que nous puissions télécharger les numéros de suivi et récupérer les données de rapprochement.
- lookbackDays indique jusqu'où dans votre compte de messagerie nous rechercherons les e-mails d'expédition Amazon non lus. Remarque : les liens d'expédition expirent après 45 jours, nous ne devrions donc pas dépasser ce délai.
- Le baseSpreadsheetId de réconciliation doit être l'ID d'une feuille Google existante. Consultez la section ci-dessous pour savoir comment accorder les autorisations correctes à cette feuille. L'ID peut être récupéré à partir de l'URL, qui se présente sous la forme "https://docs.google.com/spreadsheets/d/SHEET_ID".
- Le champ "driveFolderId" doit être l'ID d'un dossier Google Drive dans lequel nous stockerons les données persistantes. Celui-ci peut être récupéré à partir de l'URL du dossier, qui se présente sous la forme "https://drive.google.com/drive/folders/FOLDER_ID".
Feuilles / Configuration du lecteur et autorisations
Nous devons créer et utiliser un compte Google Cloud automatisé pour écrire sur Drive et sur Sheets. Voici comment nous procédons :
- Tout d'abord, créez un projet Google Cloud sur https://console.cloud.google.com
- Ensuite, créez le compte de service dans Google Cloud et obtenez les informations d'identification correspondantes en suivant les étapes 1 à 5 de cette page. Assurez-vous de noter l'adresse e-mail du compte de service : elle doit être très longue et inclure ".gserviceaccount.com" à la fin.
- Lorsque vous téléchargez le fichier JSON d'informations d'identification, renommez-le « creds.json » et placez-le dans le même répertoire que ces scripts.
- Sur le site Web de la console Google Cloud, utilisez le volet de navigation de gauche pour accéder à "API et services".
- Ensuite, cliquez sur « Activer les API et les services ». Cela vous mènera à la bibliothèque API. Vous devez rechercher et activer « l'API Google Drive » et « l'API Google Sheets ». Pour chacun, recherchez-le, cliquez sur le terme et activez-le.
- Ensuite, pour le rapprochement Google Sheet et le dossier Google Drive que nous avons configuré, assurez-vous de partager la feuille/dossier avec le compte de service que nous avons créé précédemment. Partagez-les simplement tous les deux avec l'adresse e-mail qui se termine par ".gserviceaccount.com" (assurez-vous que l'adresse dispose des autorisations de modification sur la feuille et le dossier).
- Pour OAuth, créez une clé sur https://support.google.com/cloud/answer/6158849?hl=en et stockez-la sous client_secret.json dans le même répertoire que ces scripts.
Cela devrait être le cas : le fichier "creds.json" donnera aux scripts la possibilité de s'exécuter en tant que compte de service, et nous avons donné au compte de service les autorisations sur les éléments sur lesquels il doit écrire.
Arguments
-
--headless
pour s'exécuter dans un navigateur sans tête. Ceci est utile si vous ne vous souciez pas de voir ce que fait l'automatisation. -
--firefox
pour exécuter avec Firefox/Geckodriver plutôt que Chrome -
--groups AB
exécutera uniquement la réconciliation sur les groupes A et B. En cas d'omission, elle s'exécutera sur tous les groupes.
Sortie de feuilles
La tâche de réconciliation a un résultat composé de deux onglets dans la feuille Google que nous avons configurée précédemment. Les onglets sont :
Réconciliation
Il s'agit de la feuille de calcul principale. Étant donné qu’un seul numéro de suivi peut comprendre plusieurs commandes et qu’une seule commande peut contenir plusieurs numéros de suivi, nous les regroupons en commandes en fonction de la façon dont les expéditions ont été réparties. Les colonnes sont :
- Commandes : ID de commande contenus dans ce groupe
- Suivis : numéros de suivi contenus dans ce groupe
- Montant facturé : montant total qui vous a été facturé pour ce groupe
- Montant remboursé : montant total affiché par les sites des groupements d'achat pour ce groupe
- Date de la dernière expédition : Il s’agit de la date de l’expédition la plus récente. Si c'était il y a longtemps et que la commande est sous-remboursée, vous avez probablement un problème.
- PO : Liste des bons de commande (actuellement uniquement pour les États-Unis)
- Groupe : le groupement d'achat
- To Email : l'e-mail auquel les e-mails d'expédition/de commande ont été envoyés
- Ajustement manuel des coûts : il s'agit d'un moyen d'ajuster le coût remboursé attendu pour une commande. Si vous savez qu'un article a été sous-remboursé pour une bonne raison, vous pouvez ajouter ce montant ici. Nous nous attendons à ce que le montant facturé soit égal au montant remboursé plus cet ajustement manuel des coûts. Ceci est enregistré si vous le modifiez.
- Remplacement manuel : autre champ manuel, cochez-le si vous êtes sûr que le groupe semble correct : il ignorera tout le reste et sera marqué comme résolu.
- Diff Total : Il s'agit de la différence totale entre le montant facturé et remboursé (plus les ajustements manuels). Le vert signifie que les montants étaient égaux ou que le dépassement a été vérifié, le jaune signifie que vous avez été trop remboursé et le rouge signifie que vous avez été sous-remboursé.
- Notes : Notes pour votre usage personnel
Suivis
Chaque ligne de cette fiche correspond à un numéro de suivi. Il contient la ou les commandes pour ce suivi et d'autres informations à ce sujet, y compris le montant remboursé si nous pouvons en trouver un. Cet onglet est très utile pour déterminer exactement où un problème s'est produit, si un groupe a mal analysé un élément.
Importation de rapports Amazon
Tout d’abord, exportez un rapport sur les expéditions commerciales Amazon au format CSV (via la section Business Analytics du site). Ensuite, téléchargez ce fichier CSV sur Google Drive et ouvrez-le en tant que fichier Sheets. Notez l'ID de la feuille, qui peut être récupéré à partir de l'URL de la feuille de la même manière que précédemment, c'est-à-dire "https://docs.google.com/spreadsheets/d/SHEET_ID". Notez également le nom de l'onglet.
Ensuite, exécutez python import_report.py
. Il vous demandera l'ID de feuille et le nom de l'onglet susmentionnés - insérez-les. Il imprimera des informations sur les suivis qu'il importe, et il imprimera également toutes les lignes pour lesquelles il n'a pas pu trouver de groupe valide (remarque : le l'adresse n'est pas formatée comme "Ville, ÉTAT", donc pour cette section, je vous recommande d'utiliser les débuts des adresses comme clés de groupe, par exemple "123 Fake St" (sans les guillemets) dans la configuration de votre groupe).
Importation manuelle des commandes
Parfois, on peut souhaiter ajouter manuellement un objet de suivi à la banque de données. Pour ce faire, exécutez le script manual_input.py
. Si vous l'exécutez sans arguments, il vous demandera une série d'entrées (cela vous permettra également de supprimer les objets de suivi existants). La plupart des arguments sont facultatifs et il tentera de remplir des valeurs par défaut raisonnables, mais les champs du numéro de suivi, du numéro de commande et du groupe sont obligatoires.
Si vous souhaitez exécuter la saisie en une seule étape en ajoutant un nouvel objet de suivi sous la forme la plus simple, exécutez simplement en une seule commande :
python manual_input.py -a -t TRACKING_NUMBER -g GROUP -o ORDER_NUMBER
par exemple
python manual_input.py -a -t TBA1234567890 -g mysbuyinggroup -o 123-1234567-1234567
Dons
Ce logiciel est entièrement gratuit, sous licence GNU Affero General Public License. Cependant, si vous souhaitez me donner de l'argent, n'hésitez pas à envoyer n'importe quelle somme d'argent via Paypal à https://paypal.me/GustavBrodman