🛒 Shopify Pedidos Watch (Secretario)
Archivo: /Users/user/rifai-agents/agentes/migrated/shopify-pedidos-watch.ts · Plist: com.rifai.shopify-pedidos · Horario: 9:05 y 14:05 cada día (StartCalendarInterval); el script salta los domingos y exige ventana 9:00–9:30 / 14:00–14:30.
Qué hace
Briefing operativo de pedidos pendientes de la tienda Shopify, dos veces al día (mañana y mediodía), de lunes a sábado. Consulta los pedidos abiertos sin enviar y los borradores (drafts) creados a partir de una fecha de arranque ("pizarra limpia": 2026-06-04 en adelante). Cuenta los pedidos pending, cuántos están marcados como "Confirmado" (listos para registrar en GLS) y los drafts abiertos. Si hay algo pendiente, manda un resumen con importe total y enlace al admin de Shopify. Aunque nació en la carpeta "Secretario" de n8n, es ops: la alerta va a Oscar (ops) con copia a Fernando (finanzas) por impacto en cash flow.
Cómo funciona
1. Parsea .env y construye la URL base de la Admin API (2024-10) y la cabecera con X-Shopify-Access-Token.
2. Calcula hora Madrid; sale si es domingo o si la hora no cae en las ventanas de 9 o 14 (min < 30). El flag FORCE=1 salta ambas guardas.
3. Fija CONTAR_DESDE = '2026-06-04' y deriva el ISO de arranque.
4. GET orders.json con status=open&fulfillment_status=unshipped&created_at_min=<desde> pidiendo campos mínimos.
5. GET draft_orders.json (la API no admite created_at_min para drafts → filtra en cliente por created_at >= desde).
6. Filtra pending (financial_status pending y sin tag auto-cod-shipped); de esos, los que tienen "confirmad" en la nota. Filtra drafts por fecha.
7. Si no hay pending ni drafts, sale ("todo al día"). Si hay, suma el importe total y compone un mensaje HTML con desglose y enlace.
8. Envía vía notify({ event: 'ops_pedido_pending', level: 'info', ... }).
Datos/APIs
- Shopify Admin API (
https://<SHOPIFY_STORE>/admin/api/2024-10) — endpointsorders.jsonydraft_orders.json. - Router de notificaciones (
tools/notify-router.ts) → Telegram Oscar (ops) + Fernando (finanzas) vía eventoops_pedido_pending. - Variables
.env:SHOPIFY_STORE,SHOPIFY_ACCESS_TOKEN,TELEGRAM_BOT_TOKEN,TELEGRAM_CHAT_ID(el router usa los tokens de Oscar y Fernando).
Cómo probarlo
cd /Users/user/rifai-agents && FORCE=1 npx tsx agentes/migrated/shopify-pedidos-watch.ts
Sin FORCE=1 solo corre dentro de las ventanas de 9 ó 14 (Madrid) y no en domingo. Con FORCE=1 ignora día y hora y consulta/avisa con datos reales.
Si se rompe / recuperar
launchctl unload ~/Library/LaunchAgents/com.rifai.shopify-pedidos.plist
launchctl load ~/Library/LaunchAgents/com.rifai.shopify-pedidos.plist
Logs en /Users/user/rifai-agents/logs/shopify-pedidos.log. Si no avisa, comprueba el token Shopify, que CONTAR_DESDE no esté en el futuro y que haya pedidos pending sin el tag auto-cod-shipped.
Cómo replicarlo
Origen n8n: workflow Q6lFq5HEzOcb7baL "Secretario - Shopify Pedidos v4". Backup en /Users/user/rifai-agents/backups/n8n-export/03_shopify-pedidos-v4.json. Piezas para rehacerlo:
1. Trigger cron a las 9:05 y 14:05 (StartCalendarInterval) + guarda domingo/ventana en código.
2. Llamadas Admin API: orders (open + unshipped + created_at_min) y draft_orders (filtro de fecha en cliente).
3. Filtros: pending sin tag auto-cod-shipped; subconjunto con nota "Confirmado"; drafts desde fecha de arranque.
4. Resumen con importe total y enlace al admin; envío vía router (ops_pedido_pending) a Oscar + Fernando.