Seguimiento de pedidos
Este es un conjunto de scripts de Python destinados a agilizar y automatizar el proceso de conciliación de los pedidos con los grupos de compras. En un sentido básico, automatiza la recuperación de información de seguimiento, la carga en los sitios de los grupos de compras y la conciliación de pedidos después del reembolso. El objetivo principal de estos scripts es que uno pueda mirar una sola hoja de Google y saber inmediatamente qué pedidos han sido rastreados y reembolsados adecuadamente por los grupos de compras, y brindar al usuario las herramientas para solucionar cualquier problema que pueda surgir.
¿Qué hace esto?
Hay dos tareas principales. Ellos son:
get_order_tracking.py:
Este script hace lo siguiente:
- Analiza los correos electrónicos de notificación de envío no leídos de los últimos 45 días de Amazon o Best Buy.
- Analiza un conjunto de información de esos correos electrónicos y los correos electrónicos asociados, incluidos los números de seguimiento, los números de pedido, los costos de los pedidos, las direcciones de correo electrónico, las URL de los pedidos y las fechas de envío, y guarda esa información en el disco y en Drive.
- Carga esos números de seguimiento a los sistemas de seguimiento de pedidos de grupos como Pointsmaker, MYS o USA.
- Agrupa pedidos o números de seguimiento que Amazon o Best Buy agrupan para su posterior conciliación (por ejemplo, dos pedidos se agrupan si se envían en el mismo envío).
- Le envía por correo electrónico (al usuario) una lista de números de seguimiento/pedido que encontró, para comprobar su integridad.
Si no puede analizar un correo electrónico por algún motivo, lo marcará como no leído para que pueda verlo manualmente más tarde. Esto sucede a veces si Amazon está siendo lento; en estos casos, no hay ningún problema en ejecutar el script nuevamente.
reconciliar.py
Éste es el guión de la reconciliación. Hace lo siguiente:
- Cargas en los grupos de números de seguimiento/pedidos de
get_tracking_numbers.py
. - Completa los costos reembolsados cuando puede (para grupos como Pointsmaker, MYS o USA). Esto implica ingresar al sitio web del grupo y analizar la asignación desde el número de seguimiento hasta el costo reembolsado.
- Agrupa los pedidos por orden de compra (si corresponde, solo EE. UU.).
- Aplica ajustes manuales (consulte "Salida de hojas" a continuación).
- Carga el resultado de la conciliación en una hoja de cálculo de Google en un formato legible por humanos. Consulte "Salida de hojas" a continuación para obtener más información.
Limitaciones
- Esto sólo funcionará para una cuenta de correo electrónico a la vez.
- Esto sólo funcionará para GMail
- La carga automática solo funciona para EE. UU. y sitios cuyos sitios web tengan el mismo formato que Pointsmaker o MYS.
- Todas las direcciones deben contener una clave que identifique de forma única a qué grupo de compras pertenece la dirección. El valor predeterminado es parte de la dirección del grupo.
Requisitos previos
- Python3 y pip3 (deberían unirse)
Instrucciones
Si está en Windows, utilice esta guía en lugar de estas instrucciones, ya que Windows es un poco difícil y esta guía es clara.
Si estás en una Mac (OSX):
Abra una terminal y ejecute los siguientes comandos. Estos instalan Homebrew (un administrador de paquetes), luego usan Homebrew para instalar Git+Python, descargan el proyecto y luego configuran el entorno 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
En todos los sistemas operativos:
- Desconéctese de cualquier VPN que pueda interferir (pueden causarle o no algunos problemas de conectividad de red)
- Habilite IMAP en GMail: vaya a la página Configuración, luego a la pestaña "Reenvío y POP/IMAP", luego asegúrese de que IMAP esté habilitado
- Copie config.yml.template a config.yml
- Configure la configuración (consulte la sección "Configuración" a continuación para obtener más información)
- Ejecute
python get_tracking_numbers.py
seguido de python reconcile.py
Configuración
Aquí hay detalles de los campos en config.yml:
- El correo electrónico y la contraseña deben ser una cuenta de GMail; específicamente, la contraseña debe ser una contraseña específica de la aplicación. Probablemente puedas mantener la configuración IMAP y SMTP igual (a menos que estés seguro de que no deberías hacerlo).
- A partir de marzo de 2020, Google ya no admite contraseñas de aplicaciones. Es necesario utilizar OAuth para iniciar sesión en Gmail. Consulte los detalles a continuación sobre cómo configurarlo.
- Para cada grupo en 'grupos', incluya el nombre completo del grupo (para sitios como MYS, esta debe ser la URL menos el bit ".com"). Incluya una clave única por grupo (el valor predeterminado se basa en la dirección) que aparecerá solo en las notificaciones de envío a ese grupo. El nombre de usuario y la contraseña deben ser del portal en línea del grupo para que podamos cargar números de seguimiento y extraer datos de conciliación.
- lookbackDays es qué tan atrás en su cuenta de correo electrónico buscaremos correos electrónicos de envío de Amazon no leídos. Nota: los enlaces de envío caducan después de 45 días, por lo que no debemos pasar de eso.
- El baseSpreadsheetId de conciliación debe ser el ID de una hoja de cálculo de Google existente. Consulte la sección siguiente sobre cómo otorgar los permisos correctos a esa hoja. El ID se puede recuperar desde la URL, que tiene el formato "https://docs.google.com/spreadsheets/d/SHEET_ID".
- El campo "driveFolderId" debe ser el ID de una carpeta de Google Drive en la que almacenaremos datos persistentes. Esto se puede recuperar desde la URL de la carpeta, que tiene el formato "https://drive.google.com/drive/folders/FOLDER_ID".
Hojas / Configuración y permisos de la unidad
Necesitamos crear y utilizar una cuenta automatizada de Google Cloud para escribir en Drive y Sheets. Así es como lo hacemos:
- Primero, cree un proyecto de Google Cloud en https://console.cloud.google.com
- A continuación, cree la cuenta de servicio en Google Cloud y obtenga las credenciales siguiendo los pasos del 1 al 5 de esta página. Asegúrese de anotar la dirección de correo electrónico de la cuenta de servicio; debe ser muy larga y debe incluir ".gserviceaccount.com" al final.
- Cuando descargue el archivo JSON de credenciales, cámbiele el nombre a "creds.json" y colóquelo en el mismo directorio que estos scripts.
- En el sitio web de la consola de Google Cloud, use el panel de navegación izquierdo para ir a "API y servicios".
- A continuación, haga clic en "Habilitar API y servicios". Esto lo llevará a la biblioteca API. Debe buscar y habilitar la "API de Google Drive" y la "API de Google Sheets". Para cada uno, búsquelo, haga clic en el término y habilítelo.
- A continuación, para la conciliación de Google Sheet y la carpeta de Google Drive que configuramos, asegúrese de compartir la hoja/carpeta con la cuenta de servicio que creamos antes. Simplemente compártelos con la dirección de correo electrónico que termina en ".gserviceaccount.com" (asegúrate de que la dirección tenga permisos de edición en la hoja y la carpeta).
- Para OAuth, cree una clave en https://support.google.com/cloud/answer/6158849?hl=en y guárdela como client_secret.json en el mismo directorio que estos scripts.
Eso debería ser todo: el archivo "creds.json" dará a los scripts la capacidad de ejecutarse como la cuenta de servicio, y le hemos otorgado a la cuenta de servicio permisos para las cosas en las que necesita escribir.
Argumentos
-
--headless
para ejecutar en un navegador sin cabeza. Esto es útil si no le interesa ver qué está haciendo la automatización. -
--firefox
se ejecutará usando Firefox/Geckodriver en lugar de Chrome -
--groups AB
solo ejecutará la conciliación en los grupos A y B. Si se omite, se ejecutará en todos los grupos.
Salida de hojas
La tarea de conciliación tiene un resultado que consta de dos pestañas en la Hoja de Google que configuramos anteriormente. Las pestañas son:
Reconciliación
Esta es la hoja de cálculo principal. Debido a que un único número de seguimiento puede constar de varios pedidos y un solo pedido puede contener varios números de seguimiento, los agrupamos en pedidos según cómo se dividieron los envíos. Las columnas son:
- Pedidos: ID de pedidos contenidos en este grupo
- Seguimientos: números de seguimiento contenidos en este grupo
- Monto facturado: monto total que se le cobró por este grupo
- Monto reembolsado: Monto total que los sitios de los grupos de compras muestran para este grupo
- Fecha del último envío: Esta es la fecha del envío más reciente. Si fue hace mucho tiempo y el pedido no se reembolsa lo suficiente, probablemente tengas un problema.
- POs: Lista de órdenes de compra (actualmente solo para EE.UU.)
- Grupo: el grupo comprador
- A correo electrónico: el correo electrónico al que se enviaron los correos electrónicos de envío/pedido.
- Ajuste de costos manual: esta es una forma de ajustar el costo reembolsado esperado de un pedido. Si sabe que un artículo no recibió un reembolso insuficiente por una buena razón, puede agregar ese monto aquí. Esperamos que el monto facturado sea igual al monto reembolsado más este ajuste de costos manual. Esto se guarda si lo cambia.
- Anulación manual: otro campo manual, marque esto si está seguro de que el grupo parece correcto; ignorará cualquier otra cosa y lo marcará como resuelto.
- Diferencia total: Esta es la diferencia total entre el monto facturado y reembolsado (más los ajustes manuales). Verde significa que los montos eran iguales o que se marcó la anulación, amarillo significa que se le reembolsó de más y rojo significa que se le reembolsó de menos.
- Notas: Notas para su uso personal
Seguimientos
Cada fila de esta hoja corresponde a un número de seguimiento. Contiene pedidos para ese seguimiento y otra información al respecto, incluido el monto reembolsado si pudiéramos encontrar uno. Esta pestaña es más útil para determinar exactamente dónde ocurrió un problema, si un grupo ha escaneado mal algún elemento.
Importación de informes de Amazon
Primero, exporte un informe de envíos comerciales de Amazon como CSV (a través de la sección Business Analytics del sitio). Luego, cargue ese archivo CSV en Google Drive y ábralo como un archivo de Hojas de cálculo. Tenga en cuenta el ID de la hoja, que se puede recuperar desde la URL de la hoja de la misma manera que antes, es decir, "https://docs.google.com/spreadsheets/d/SHEET_ID". Tenga en cuenta también el nombre de la pestaña.
Luego, ejecute python import_report.py
. Le pedirá el ID de la hoja y el nombre de la pestaña antes mencionados; introdúzcalos. Imprimirá información sobre los seguimientos que está importando y también imprimirá cualquier fila para la que no pudo encontrar un grupo válido (nota: el La dirección no tiene el formato "Ciudad, ESTADO", por lo que para esta sección recomiendo usar el comienzo de las direcciones como claves de grupo, por ejemplo, '123 Fake St' (sin las comillas) en la configuración de su grupo).
Importación manual de pedidos
A veces, es posible que desee agregar manualmente un objeto de seguimiento al almacén de datos. Para hacerlo, ejecute el script manual_input.py
. Si lo ejecuta sin argumentos, le pedirá una serie de entradas (también le permite eliminar objetos de seguimiento existentes). La mayoría de los argumentos son opcionales e intentará completar los valores predeterminados sensatos, pero el número de seguimiento, el número de pedido y los campos de grupo son obligatorios.
Si desea ejecutar la entrada en un solo paso agregando un nuevo objeto de seguimiento en la forma más simple, simplemente ejecute como un solo comando:
python manual_input.py -a -t TRACKING_NUMBER -g GROUP -o ORDER_NUMBER
p.ej
python manual_input.py -a -t TBA1234567890 -g mysbuyinggroup -o 123-1234567-1234567
Donaciones
Este software es completamente gratuito y tiene la licencia pública general GNU Affero. Sin embargo, si desea donarme algo de dinero, no dude en enviar cualquier cantidad de dinero a través de Paypal a https://paypal.me/GustavBrodman.