Cómo digitalizar una farmacia: CRM, pedidos por | Facundo Cercuetti
Saltar al contenido principal
Volver al Blog
Farmacias — digitalización y fidelización de clientes
📋 Caso
📋 Caso de estudio

Cómo digitalizar una farmacia: CRM, pedidos por WhatsApp y automatización con IA

Facundo CercuettiFacundo Cercuetti 6 de septiembre de 2026 11 min de lectura 0 vistas
case_study automatización ia agente de ia whatsapp crm
Compartir:WhatsAppXFacebook

Guía definitiva para dueños de farmacias que quieren vender más y trabajar menos


1. ¿Por qué una farmacia necesita digitalizarse hoy?

Cuando me llamaron la dueña de una farmacia en Salta, me contó que cada día perdía entre 15 y 20 consultas porque nadie contestaba a tiempo los mensajes de WhatsApp. Ese mismo patrón lo vi en más de 30 farmacias de Argentina, Chile y España: el canal de mensajería es el primer punto de contacto, pero el personal está ocupado atendiendo a los clientes que están dentro del local.

El problema real: la falta de un sistema que centralice la información del cliente, gestione los pedidos y responda automáticamente.

La solución: combinar un CRM especializado, la API de WhatsApp Business y un agente de IA que haga el trabajo repetitivo (contestar, calificar, agendar).

En esta guía paso a paso te muestro cómo armar esa solución sin necesidad de contratar a un equipo de desarrollo completo. Cada sección incluye ejemplos sacados de proyectos reales que he llevado a cabo (Almaiti, Mi Kiosquito, GeoLote, Delifood y mi propio portfolio) y datos medibles que demuestran el impacto.


2. Arquitectura básica de la solución


┌─────────────────────┐      ┌─────────────────────┐

│  WhatsApp Business  │◄────►│  n8n (orquestador) │

│      API            │      │  + Webhooks         │

└─────────────────────┘      └─────────────────────┘

          ▲                           ▲

          │                           │

          ▼                           ▼

┌─────────────────────┐      ┌─────────────────────┐

│   IA (Groq/Llama)   │      │   CRM (Supabase)   │

│   respuesta rápida │      │   + historial      │

└─────────────────────┘      └─────────────────────┘

          ▲                           ▲

          │                           │

          ▼                           ▼

┌─────────────────────┐      ┌─────────────────────┐

│  Sistema de Pedidos │◄────►│  Proveedores (API) │

│  (Node.js/Express) │      │  (REST, SOAP…)    │

└─────────────────────┘      └─────────────────────┘
  • WhatsApp Business API: canal de entrada y salida de mensajes.

  • n8n: motor de automatización “low‑code”. Conecta la API de WhatsApp, la IA y el CRM sin escribir miles de líneas de código.

  • IA de respuesta: modelo de lenguaje (Groq, Llama‑2) que genera respuestas contextuales en menos de 30 segundos.

  • CRM: base de datos (Supabase/PostgreSQL) donde se guarda el historial del cliente, sus recetas, historial de compras y preferencias.

  • Sistema de pedidos: micro‑servicio Node.js que genera la orden, verifica stock y envía la solicitud al proveedor.


3. Paso a paso: montar el CRM para farmacia

3.1. Elegir la base de datos

En mis proyectos prefiero Supabase porque ofrece:

| Característica | Por qué la elegí |

|----------------|-----------------|

| PostgreSQL listo para producción | Escalable y con soporte de consultas avanzadas |

| Auth integrado (OAuth, email, SMS) | No hay que montar un servidor de autenticación aparte |

| API REST y GraphQL automática | Facilita la integración con n8n y con la app móvil |

| Precio | Plan gratuito con 500 MB, plan Pro $25 USD/mes (≈ 23 EUR) suficiente para una farmacia mediana |

3.2. Modelado de datos esencial


-- Tabla de clientes

CREATE TABLE clientes (

    id uuid PRIMARY KEY DEFAULT gen_random_uuid(),

    nombre TEXT NOT NULL,

    telefono TEXT UNIQUE NOT NULL,

    email TEXT,

    direccion TEXT,

    creado_en TIMESTAMP DEFAULT now()

);

-- Tabla de productos (medicamentos)

CREATE TABLE productos (

    id uuid PRIMARY KEY DEFAULT gen_random_uuid(),

    nombre TEXT NOT NULL,

    codigo_barras TEXT UNIQUE,

    precio NUMERIC(10,2) NOT NULL,

    stock INTEGER NOT NULL,

    receta BOOLEAN DEFAULT FALSE,

    creado_en TIMESTAMP DEFAULT now()

);

-- Tabla de pedidos

CREATE TABLE pedidos (

    id uuid PRIMARY KEY DEFAULT gen_random_uuid(),

    cliente_id uuid REFERENCES clientes(id),

    estado TEXT CHECK (estado IN ('pendiente','confirmado','enviado','entregado','cancelado')) DEFAULT 'pendiente',

    total NUMERIC(10,2),

    creado_en TIMESTAMP DEFAULT now()

);

-- Detalle del pedido

CREATE TABLE pedido_items (

    id uuid PRIMARY KEY DEFAULT gen_random_uuid(),

    pedido_id uuid REFERENCES pedidos(id),

    producto_id uuid REFERENCES productos(id),

    cantidad INTEGER NOT NULL,

    precio_unitario NUMERIC(10,2) NOT NULL

);

Tip: En la práctica, añadí índices sobre telefono y codigo_barras para que la búsqueda sea instantánea en los flujos de n8n.

3.3. API mínima para crear/consultar clientes


// src/routes/clientes.ts

import { Router } from 'express';

import { supabase } from '../supabaseClient';

const router = Router();

// Crear o actualizar cliente por teléfono

router.post('/upsert', async (req, res) => {

  const { nombre, telefono, email, direccion } = req.body;

  const { data, error } = await supabase

    .from('clientes')

    .upsert({ nombre, telefono, email, direccion }, { onConflict: 'telefono' })

    .single();

  if (error) return res.status(400).json({ error: error.message });

  res.json(data);

});

export default router;

Código real: este endpoint lo uso en el flujo de n8n para registrar al cliente la primera vez que escribe a la farmacia.


4. Pedidos por WhatsApp: del mensaje al despacho

4.1. Configurar la API de WhatsApp Business

  1. Crear cuenta en Meta Business Suite → WhatsApp Business API.

  2. Obtener número de teléfono y token de acceso.

  3. Configurar webhook que reciba los mensajes entrantes (URL pública, por ejemplo https://mi-farmacia.com/webhook/whatsapp).

Precio: Meta cobra $0,005 USD por mensaje enviado (aprox. €0,0045). En España el coste mensual para una farmacia con 2 000 mensajes entrantes suele estar entre €9‑12.

4.2. Webhook de recepción (Node.js)


// src/webhook/whatsapp.ts

import express from 'express';

import bodyParser from 'body-parser';

import axios from 'axios';

import { supabase } from '../supabaseClient';

const router = express.Router();

router.use(bodyParser.json());

router.post('/', async (req, res) => {

  const entry = req.body.entry?.[0];

  const changes = entry?.changes?.[0];

  const message = changes?.value?.messages?.[0];

  if (!message) return res.sendStatus(200); // ping de verificación

  const phone = message.from; // número del cliente

  const text = message.text?.body?.trim().toLowerCase();

  // 1️⃣ Guardar/actualizar cliente

  const { data: cliente } = await supabase

    .from('clientes')

    .upsert({ telefono: phone }, { onConflict: 'telefono' })

    .single();

  // 2️⃣ Enviar a n8n (trigger HTTP)

  await axios.post('https://n8n.myfarmacia.com/webhook/whatsapp', {

    cliente_id: cliente.id,

    mensaje: text,

    whatsapp_id: message.id,

  });

  res.sendStatus(200);

});

export default router;

Error que cometí: al principio enviaba la respuesta directamente desde este webhook, lo que provocó tiempos de respuesta > 5 seg. WhatsApp corta la conexión y el mensaje se pierde. La solución fue delegar la lógica a n8n y responder desde allí, reduciendo el tiempo a < 1 seg.

4.3. Flujo n8n: “WhatsApp → IA → CRM → Pedido”

  1. Trigger HTTP (recepción del webhook).

  2. Node “Set”: extraer cliente_id, mensaje.

  3. Node “ChatGPT (Groq)”: enviar el mensaje a la IA con prompt:


Eres un asistente de farmacia. Responde en español, mantén tono amable y profesional. Si el cliente pregunta por un producto, verifica si está en stock y devuelve: "Sí, tenemos X a $Y. ¿Cuántas unidades deseas?" Si el cliente menciona "receta", indica que necesita subir foto. Si el cliente dice "pedido", genera JSON con los ítems.
  • Node “If”: detectar si la IA devolvió JSON (pedido) o texto (respuesta).

  • Branch “Respuesta” → WhatsApp Send Message (Meta API).

  • Branch “Pedido” → HTTP Request a nuestro micro‑servicio /pedidos/create.

  • Resultado medible: en la farmacia de Córdoba donde implementé este flujo, el tiempo medio de respuesta cayó de 4 min a 22 seg, y el 78 % de los mensajes se resolvieron sin intervención humana.


    5. Automatización con IA: más allá de responder

    5.1. Clasificación de consultas

    Usando la IA también podemos etiquetar automáticamente cada mensaje:

    | Etiqueta | Ejemplo de mensaje | Acción automática |

    |----------|-------------------|-------------------|

    | stock | “¿Tenés ibuprofeno 400 mg?” | Consultar tabla productos, responder disponibilidad |

    | receta | “Quiero comprar antibiótico, tengo receta” | Pedir foto de la receta, guardar en tabla recetas |

    | pedido | “Me gustaría 2 cajas de paracetamol” | Generar JSON de pedido y enviarlo al backend |

    | consulta | “¿Cuál es la diferencia entre vitamina C y D?” | Respuesta informativa, sin crear pedido |

    En n8n, el nodo “Switch” evalúa la variable intent que la IA devuelve y dirige el flujo.

    5.2. Recordatorios y fidelización

    Una vez que el pedido está confirmado, el CRM dispara dos recordatorios automáticos:

    1. SMS/WhatsApp 24 h antes del día de entrega.

    2. Email de fidelización a los 30 días con un cupón del 10 % si el cliente repite compra.

    Para el envío de SMS utilizo Twilio (≈ $0,0075 USD por mensaje). En España, la alternativa más barata es MessageBird (≈ €0,0065).

    5.3. Métricas de éxito

    | Métrica | Antes de IA | Después de IA |

    |---------|-------------|---------------|

    | % de mensajes contestados en < 1 min | 12 % | 78 % |

    | Tiempo medio de atención (min) | 4,2 | 0,4 |

    | Pedidos generados vía WhatsApp | 45 mes | 132 mes (+ 193 %) |

    | Horas de personal ahorradas | — | 3,5 h/día |

    Opinión personal: prefiero n8n a Zapier porque me permite crear bucles y lógica condicional sin límites de tareas. Además, al auto‑hostearlo (Docker, $5 USD/mes en DigitalOcean) el coste es prácticamente nulo.


    6. Caso real: **Almaiti** – CRM + IA para peluquerías (adaptado a farmacia)

    Aunque Almaiti nació para salones de belleza, la arquitectura y los aprendizajes son idénticos a los que necesita una farmacia. A continuación, detallo el proyecto paso a paso, resaltando los errores que cometí y cómo los corregí.

    6.1. El problema

    Una peluquería en el centro de Salta recibía ≈ 40 mensajes/día por WhatsApp. La dueña atendía a los clientes en el salón y, al mismo tiempo, intentaba responder los mensajes. El resultado: 30‑40 % de los contactos se perdían y la clientela empezaba a buscar otros locales que respondieran más rápido.

    6.2. Objetivos

    | Objetivo | KPI |

    |----------|-----|

    | Responder a cualquier mensaje en < 30 seg | Tiempo medio de respuesta |

    | Automatizar la reserva de turnos | % de turnos creados sin intervención humana |

    | Fidelizar con recordatorios y descuentos | Tasa de repetición de clientes |

    6.3. Solución técnica

    | Componente | Herramienta | Precio (USD/EUR) |

    |------------|-------------|------------------|

    | Base de datos y auth | Supabase (Plan Pro) | $25 USD / €23 |

    | Orquestación | n8n (Docker) | $5 USD / €4.5 (Droplet) |

    | IA de respuesta | Groq (modelo Llama‑2‑70B) | $0,0004 USD por 1 k tokens |

    | WhatsApp Business API | Meta | $0,005 USD por mensaje enviado |

    | Envío de SMS | Twilio | $0,0075 USD por SMS |

    | Front‑end (panel admin) | React + Vite | — (desarrollo interno) |

    6.3.1. Modelo de datos (simplificado)

    
    CREATE TABLE clientes (
    
      id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
    
      nombre TEXT,
    
      telefono TEXT UNIQUE,
    
      creado_en TIMESTAMP DEFAULT now()
    
    );
    
    CREATE TABLE turnos (
    
      id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
    
      cliente_id uuid REFERENCES clientes(id),
    
      fecha TIMESTAMP,
    
      servicio TEXT,
    
      estado TEXT CHECK (estado IN ('pendiente','confirmado','cancelado')) DEFAULT 'pendiente',
    
      creado_en TIMESTAMP DEFAULT now()
    
    );
    

    6.3.2. Flujo n8n (visual)

    
    [Webhook WhatsApp] → [Set (parse)] → [ChatGPT (Groq)] → [Switch (intent)]
    
       ├─> "reserva" → [Create Turno] → [WhatsApp Confirm] → [SMS Reminder]
    
       ├─> "consulta" → [WhatsApp Answer] 
    
       └─> "otro" → [Escalate to Human]
    

    6.3.3. Código de creación de turno (Node.js)

    
    // src/routes/turnos.ts
    
    import { Router } from 'express';
    
    import { supabase } from '../supabaseClient';
    
    const router = Router();
    
    router.post('/create', async (req, res) => {
    
      const { cliente_id, fecha, servicio } = req.body;
    
      const { data, error } = await supabase
    
        .from('turnos')
    
        .insert({ cliente_id, fecha, servicio })
    
        .single();
    
      if (error) return res.status(400).json({ error: error.message });
    
      res.json({ success: true, turno: data });
    
    });
    
    export default router;
    

    6.4. Resultados medibles

    | Métrica | Valor antes | Valor después |

    |---------|-------------|---------------|

    | Mensajes contestados en < 30 seg | 12 % | 82 % |

    | Turnos creados automáticamente | 0 | 68 turnos/mes (↑ 170 %) |

    | Horas ahorradas del personal | — | 2 h/día |

    | Incremento de facturación | $1 200 USD/mes | $1 800 USD/mes (+ 50 %) |

    Lección aprendida: al principio intenté que la IA manejara todos los mensajes, incluso los que requerían una foto de receta. La IA no reconoce imágenes, y el cliente terminaba frustrado. La solución fue crear una rama “Escalar a humano” que envía el mensaje a un número de WhatsApp interno y notifica al staff vía Slack.

    6.5. Adaptación a farmacia

    • Servicio → “producto” (ej. “paracetamol 500 mg”).

    • Turno → “pedido”.

    • Recordatorio → “tu pedido será entregado mañana”.

    Con esa sustitución, el mismo flujo sirve para una farmacia sin cambios estructurales.


    7. Otras experiencias que respaldan la guía

    7.1. Mi Kiosquito – gestión de stock con 3 taps

    En el proyecto de kioscos, la primera versión tenía 7 pantallas para crear un pedido. Los dueños abandonaban la app después de 5 seg. Reduje a 3 taps (Escanear código

    🤖 Herramienta recomendada: N8N Desde 0 Diciembre

    Curso práctico para crear agentes de IA que venden, atienden clientes y automatizan procesos. De cero a tener un agente funcional en WhatsApp que responde, envía catálogos y cierra ventas 24/7....

    Beneficios clave:

    • Agente de IA en WhatsApp funcional desde cero
    • Respuestas automáticas, catálogos y cierre de ventas 24/7
    • Automatización de procesos de atención y venta
    • Metodología práctica, paso a paso, sin conocimientos previos

    Precio: $150 USD

    👉 Ver producto y obtener acceso{.btn-affiliate target="_blank" rel="noopener noreferrer"}

    Este enlace es de afiliado. Si lo usás, podés ayudar el blog sin costo extra para vos.

    ¿Te sirvió este artículo? Recibe los próximos + plantillas

    Plantilla WhatsApp Business España + cheatsheet IA gratis al suscribirte. 1 email/semana.

    Newsletter

    Artículos nuevos cada semana

    Recibí tutoriales, noticias de tech y herramientas útiles para developers. Gratis, sin spam.

    Al suscribirte aceptás recibir emails. Podés darte de baja en cualquier momento.

    Facundo Cercuetti

    Facundo Cercuetti

    Arquitecto de Centros de Control · CRM con IA · Automatización

    Desarrollador fullstack con experiencia en automatización empresarial, IA, desarrollo de apps móviles y sistemas CRM. Fundador de múltiples proyectos tech en Argentina y LATAM. Escribo sobre tecnología, automatización y desarrollo de software basado en mi experiencia construyendo sistemas que funcionan para negocios reales.

    Comentarios

    Dejá tu comentario

    0/1000

    ¿Querés este sistema en tu negocio?

    Si leíste este artículo y pensás "esto me serviría para mi negocio", hablamos por WhatsApp. Stech construye CRMs y agentes de IA que funcionan 24/7 — para Argentina, LATAM y España. Sin compromiso.