Integraciones

Shopify → Odoo 19: la integración que todo retailer debería tener

Eduardo Contreras5 de marzo de 20265 min lectura

El problema que todo retailer omnicanal conoce

Tienes tu tienda en Shopify vendiendo bien. Tienes Odoo 19 manejando inventario, compras y contabilidad. Y entre ambos sistemas, un abismo que se llena con exportaciones manuales de CSV, errores de inventario y facturas electrónicas que se generan 3 días después de la venta.

Este es el escenario que encontramos en Smart Technology CR, un retailer de electrónica con más de 2,050 productos activos en smart.cr. La tienda Shopify generaba 40-60 pedidos diarios, y cada uno requería procesamiento manual en Odoo para facturación electrónica ante el Ministerio de Hacienda.

La solución: un conector bidireccional Shopify-Odoo que sincroniza productos, inventario, pedidos, clientes y facturación en tiempo real.

Qué se sincroniza y en qué dirección

No toda la información debe fluir en ambas direcciones. Definir correctamente la dirección de cada flujo evita conflictos y loops infinitos.

Odoo → Shopify (fuente de verdad: Odoo)

  • Productos: nombre, descripción, precio, variantes, imágenes
  • Inventario: stock disponible por ubicación (se publica el agregado)
  • Precios: listas de precios con reglas de descuento

Shopify → Odoo (fuente de verdad: Shopify)

  • Pedidos: líneas de pedido, descuentos, impuestos, datos de envío
  • Clientes: nombre, email, teléfono, dirección (creación o actualización)
  • Pagos: confirmación de pago y método utilizado

Bidireccional con resolución de conflictos

  • Estado del pedido: Shopify notifica creación, Odoo actualiza fulfillment
  • Estado de inventario: cambios en Odoo se reflejan en Shopify, reservas de Shopify se descuentan en Odoo

La arquitectura técnica

Shopify GraphQL Admin API 2026-01

Optamos por la GraphQL Admin API en lugar de la REST API por tres razones concretas:

  1. Eficiencia de red: una sola query trae producto + variantes + imágenes + inventario. En REST serían 4 llamadas separadas.
  2. Paginación cursor-based: más confiable que offset para catálogos grandes. Con 2,050 productos, la paginación offset puede saltar o duplicar items si hay cambios durante la sincronización.
  3. Webhooks con filtros: Shopify permite suscribirse a eventos específicos (orders/create, products/update) con filtros que reducen el ruido.

Webhooks para eventos en tiempo real

El conector registra webhooks para los siguientes eventos:

  • ORDERS_CREATE: cuando un cliente completa un pedido en Shopify
  • ORDERS_PAID: confirmación de pago procesado
  • ORDERS_CANCELLED: cancelaciones iniciadas desde Shopify
  • PRODUCTS_UPDATE: cambios hechos directamente en Shopify (raro, pero posible)

Cada webhook llega a un endpoint en el módulo Odoo que:

  1. Verifica la firma HMAC del webhook para autenticidad
  2. Parsea el payload y lo encola en una cola de procesamiento
  3. Procesa el evento de forma asíncrona para no bloquear la respuesta HTTP (Shopify espera respuesta en menos de 5 segundos)

Módulo Odoo: estructura del conector

El módulo se estructura como un addon estándar de Odoo 19 con los siguientes modelos:

  • shopify.backend: configuración de la conexión (API key, secret, tienda)
  • shopify.product.sync: registro de sincronización por producto con estado y timestamps
  • shopify.order.import: cola de importación de pedidos con manejo de errores y reintentos
  • shopify.webhook.event: log de todos los webhooks recibidos para auditoría

El flujo de un pedido: de Shopify a factura electrónica

Este es el flujo completo cuando un cliente compra en smart.cr:

  1. Cliente completa la compra en Shopify con pago por tarjeta (procesado por el gateway de pago)
  2. Webhook ORDERS_CREATE llega al conector en Odoo
  3. El conector crea el pedido de venta en Odoo con todas las líneas, precios e impuestos
  4. Se busca o crea el cliente en Odoo basándose en el email (match por email, luego por cédula si existe)
  5. Se confirma el pedido automáticamente porque el pago ya fue procesado
  6. Se genera la factura electrónica con los datos fiscales del cliente
  7. Se envía el XML al Ministerio de Hacienda vía el módulo TRIBU-CR de facturación electrónica
  8. Se actualiza el estado en Shopify a "facturado" vía un metafield personalizado
  9. Se envía la factura PDF al cliente por email desde Odoo

Todo esto sucede en menos de 30 segundos desde que el cliente hace clic en "Pagar".

Manejo de inventario: el detalle que marca la diferencia

El inventario es donde la mayoría de integraciones fallan. El problema: Shopify y Odoo manejan inventario con modelos conceptualmente diferentes.

Shopify tiene inventory_levels por location. Odoo tiene stock.quant con ubicaciones jerárquicas, reservas, lotes y movimientos. El conector necesita traducir entre ambos mundos.

Nuestra solución:

  • Publicación programada: cada 15 minutos, un cron en Odoo calcula el stock disponible (quant - reservas - umbral de seguridad) y lo publica a Shopify
  • Reserva inmediata: cuando llega un pedido de Shopify, el inventario se reserva inmediatamente en Odoo para evitar sobreventa
  • Umbral de seguridad: se configura un buffer de 2 unidades por producto para absorber la latencia entre la venta y la sincronización

Resultados concretos con Smart.cr

Después de 3 meses en producción:

  • 2,050 productos sincronizados con variantes e imágenes
  • Facturación electrónica automática en menos de 30 segundos post-compra
  • Cero errores de inventario por sobreventa (antes ocurrían 3-5 por semana)
  • Eliminación de 4 horas diarias de trabajo manual de data entry
  • 100% de facturas enviadas a Hacienda en tiempo y forma

Para quién es esta integración

Si operas un e-commerce en Shopify con más de 500 productos y necesitas contabilidad formal, facturación electrónica o gestión de inventario multi-ubicación, esta integración no es un lujo. Es una necesidad operativa.

El costo de no tenerla se mide en horas de trabajo manual, errores de inventario que generan clientes insatisfechos y riesgo fiscal por facturas electrónicas emitidas fuera de plazo.

En Sistemas Consultores implementamos este conector como un módulo reutilizable que se configura para cada cliente. La implementación típica toma 2-3 semanas incluyendo configuración, pruebas y puesta en producción.

Etiquetas

ShopifyOdoo 19integraciónretaile-commerce