Cómo sincronizamos stock en una tienda con almacén físico y ventas multicanal

La tienda sufría roturas de stock casi a diario. Vendían en su local físico, en su propia web y en tres marketplaces importantes. Cada canal tiraba del stock sin avisar a los demás y el resultado era que un cliente compraba online un producto que ya se había vendido cinco minutos antes en la tienda física.

El punto de partida

El almacén era el mismo para todo: tienda física, ecommerce y marketplaces. El ERP gestionaba las entradas y salidas del almacén, pero la web y los marketplaces consultaban sus propias bases de datos desactualizadas. El desfase podía llegar a varias horas.

Decisión clave: una única fuente de verdad

Decidimos que el ERP fuera la única fuente de verdad. Todo el stock disponible se calcula allí en tiempo real: entradas de proveedores, ventas en mostrador, devoluciones, pedidos preparados para envío y reservas. El resto de sistemas solo consultan y actualizan el ERP.

Si la fuente de verdad del stock es un ERP, el problema se convierte en un proyecto de integración; repasamos las opciones en cómo integrar PrestaShop o WooCommerce con un ERP.

Reservas de stock: el mecanismo que evita las roturas

Implementamos un sistema de reservas temporales. Cuando un cliente añade un producto al carrito en la web o en un marketplace, el ERP recibe una petición de reserva por 15 minutos. Ese stock queda bloqueado para otros canales. Si el pedido se completa, la reserva se convierte en venta firme. Si el carrito se abandona, la reserva expira y el stock vuelve a estar disponible.

En la tienda física el proceso es idéntico: al escanear un producto en caja se crea una reserva instantánea que solo se confirma al finalizar la venta.

Webhooks frente a tareas programadas

Optamos por una combinación de ambos enfoques. Los webhooks son la vía principal para eventos críticos:

  • Cuando se completa una venta en caja, el TPV envía un webhook al ERP.
  • Cuando se confirma un pedido en un marketplace, este notifica vía webhook.
  • Cada cambio de stock en el ERP (ya sea por venta, devolución o entrada de mercancía) dispara webhooks hacia la web y los integradores de marketplaces.

Los webhooks garantizan que la información crítica viaje en menos de dos segundos. Sin embargo, no todos los sistemas externos son igual de fiables. Algunos marketplaces tienen latencia o fallan en la entrega de webhooks. Por eso mantenemos tareas programadas (cron) que actúan como red de seguridad:

  • Cada 60 segundos la web consulta el stock real del ERP para los productos que tienen una vista abierta en ese momento.
  • Cada 5 minutos se lanza una sincronización completa de los 500 productos más vendidos.
  • Una vez al día se sincroniza el catálogo completo para detectar posibles desajustes.

Monitorización constante

La monitorización se convirtió en parte esencial del sistema. Creamos un dashboard interno que muestra en tiempo real:

  • Número de webhooks enviados y recibidos por minuto.
  • Tasa de errores de sincronización por canal.
  • Diferencia entre stock teórico y stock real detectada en las comprobaciones periódicas.
  • Tiempo medio de respuesta de cada integrador.

Cuando la diferencia entre canales supera las 3 unidades o el retraso supera los 90 segundos, el sistema envía alertas a Slack y correo. El equipo técnico recibe la notificación antes de que el cliente final se dé cuenta del problema.

Arquitectura técnica

El ERP expone una API REST con autenticación OAuth2. Tanto la web (PrestaShop) como los conectores de marketplaces hablan con esa API. Para reducir la carga, implementamos una capa de cache Redis con TTL variable: 10 segundos para productos de alta rotación y 2 minutos para el resto.

Los webhooks se gestionan con una cola RabbitMQ. Si un webhook falla, se reintenta hasta 5 veces con backoff exponencial antes de pasar a la tarea programada de reconciliación.

Resultados obtenidos

Tras seis semanas de implantación las roturas de stock se redujeron en un 87 %. Las quejas de clientes por “producto no disponible tras compra” prácticamente desaparecieron. El equipo de atención al cliente pasó de dedicar varias horas diarias a resolver incidencias de stock a gestionar casos excepcionales.

La tienda física ganó confianza en el sistema porque ahora, cuando un cliente pregunta si queda stock online, el dependiente puede consultarlo en tiempo real desde la misma caja.

Lecciones aprendidas

Primera: los webhooks son rápidos pero nunca confíes solo en ellos. Siempre necesitas un mecanismo de reconciliación periódico.

Segunda: las reservas temporales son la única forma realista de trabajar con varios canales simultáneos que no controlas completamente.

Tercera: monitorizar no es opcional. Si no ves el problema en tiempo real, no puedes reaccionar antes de que el cliente lo sufra.

Cuarta: empezar por los productos de mayor rotación. No intentes sincronizar 15.000 referencias el primer día. Los 200 productos que representan el 80 % de las ventas dan el 95 % del beneficio de la sincronización.

Cómo replicarlo en tu caso

Si tienes una tienda física y vendes también online y en marketplaces, el camino más sensato es:

  1. Identificar tu fuente única de verdad (normalmente el ERP o software de gestión).
  2. Implementar reservas de stock con caducidad.
  3. Usar webhooks para eventos críticos y crons para comprobaciones de integridad.
  4. Monitorizar diferencias y tiempos de respuesta de forma obsesiva.
  5. Empezar por los productos que más se venden y ampliar progresivamente.

El cambio no es barato ni rápido, pero una vez que el stock fluye correctamente entre todos los canales, la reducción de incidencias y el aumento de confianza del cliente compensan con creces la inversión.

Scroll al inicio