Documento técnico · Imagine LAB
Dos gestiones internas de Farma Total que corren en paralelo y bloquean el arranque del piloto. Ninguna depende de Imagine LAB.
Sin la cuenta verificada, Meta limita el alta de números y no se llega a 69 sucursales. Es trámite documental, no técnico.
Una API de consulta a productos, stock por sucursal, precios y clientes. Define el plazo real del piloto.
Meta permite un máximo reducido de números de WhatsApp por cuenta sin verificar. Verificada, el límite sube por encima de 50 y se puede pedir su ampliación — que es lo que hace falta para 69 sucursales. La verificación también habilita mayores volúmenes de mensajería y es requisito para pedir la insignia de cuenta oficial.
Se hace desde el Portafolio comercial de Farma Total en business.facebook.com, con la cuenta que administra la página de Facebook e Instagram de la empresa. Eso identifica qué cuenta usar; el canal que se integra es solo WhatsApp — Messenger e Instagram quedan fuera del alcance.
| Documento | Qué tiene que cumplir |
|---|---|
| Constancia de RUC | A nombre de la razón social de Farma Total. El nombre legal que se cargue en Meta debe coincidir carácter por carácter con el del documento — no el nombre de fantasía. |
| Comprobante de domicilio | Factura de un servicio a nombre de la empresa: ANDE, ESSAP, internet o telefonía. Emitida dentro de los últimos 90 días. La dirección debe coincidir con la cargada en Meta. |
| Teléfono de la empresa | Un número que aparezca en esa factura o en el sitio web de Farma Total. Meta envía un código de verificación a ese número. Puede ser el de una sola sucursal. |
No hay que ir local por local. Cada sucursal entra al panel, toca un botón y se abre una ventana de Meta —el flujo se llama Embedded Signup—. Adentro de esa ventana la sucursal se autentica, confirma su número, escanea el código o recibe el SMS, y elige el nombre que ve el cliente. Ni Farma Total ni Imagine LAB vemos credenciales: Meta devuelve un código de un solo uso que nuestro servidor canjea por el token.
| Camino | Qué pasa con el teléfono del local | Cómo se verifica |
|---|---|---|
| Coexistencia RECOMENDADO |
El WhatsApp Business sigue funcionando. El asistente responde en paralelo y el personal puede tomar cualquier chat. Lo que responden desde el celular no pasa por Meta y no se paga. | Escaneando un código desde Configuración → Dispositivos vinculados de la app. |
| API directa | El número pasa a vivir sólo en la plataforma. La app del teléfono deja de funcionar con ese número. | Con un código de seis dígitos por SMS o llamada. |
Estos pasos ya los ejecutamos nosotros junto con el referente que designe Farma Total, pero conviene que estén a la vista porque tienen tiempos propios:
{{servicio}}, {{sucursal}}— y no numeradas, al enviarla hay que declarar ese nombre en cada parámetro. Es una causa habitual de envíos rechazados con error 400. Lo dejamos resuelto en la implementación, pero conviene definir las plantillas antes de cargarlas para no reaprobarlas.
El asistente necesita consultar el sistema de Farma Total en el momento de responder. Lo ideal es una API de solo lectura sobre las tablas que ya existen, más un endpoint de escritura para registrar pedidos. No hace falta que sea pública: alcanza con que sea accesible desde nuestro servidor.
Abajo está el contrato que necesitamos. Los nombres de campo son sugerencias — si el sistema ya los llama de otra forma, nos adaptamos; lo que importa es que los datos estén y que los filtros filtren.
| Endpoint | Para qué | Prioridad |
|---|---|---|
| GET /productos?q= | Buscar por nombre comercial, genérico o principio activo. Devuelve lista paginada. | CRÍTICO |
| GET /productos/{sku} | Ficha de un producto puntual. | CRÍTICO |
| GET /stock?sku=&sucursal_id= | Unidades disponibles. Debe poder consultarse una sucursal o todas. | CRÍTICO |
| GET /sucursales | Listado con id, nombre, dirección, teléfono y horario. | CRÍTICO |
| GET /clientes?documento= | Datos del cliente por cédula, para no volver a pedirlos en cada pedido. | ALTA |
| POST /pedidos | Registrar el pedido con items, cliente y dirección. Devuelve número de pedido. | ALTA |
| GET /pedidos/{id} | Estado del pedido, para responder «¿dónde está mi delivery?». | MEDIA |
| Entidad | Campos que necesitamos |
|---|---|
| Producto | sku · nombre · presentación · principio_activo · laboratorio · categoría · precio · requiere_receta · es_controlado · activo |
| Stock | sku · sucursal_id · unidades_disponibles · actualizado_en |
| Sucursal | sucursal_id · nombre · dirección · teléfono · horario · hace_delivery |
| Cliente | documento · nombre_completo · teléfono · dirección |
| Pedido | items[sku, cantidad] · cliente · sucursal_id · dirección_entrega · total · estado |
requiere_receta y es_controlado: si el sistema no los distingue hoy, hay que agregarlos. Son los que impiden que el asistente cierre la venta de un producto que necesita intervención del farmacéutico. Sin ellos no salimos a producción.
// GET /productos?q=ibuprofeno&limit=10 { "total": 3, "items": [ { "sku": "AN-0111", "nombre": "Ibuprofeno 600 mg", "presentacion": "Blíster x 10 comprimidos", "principio_activo": "ibuprofeno", "laboratorio": "Lasca", "categoria": "Antiinflamatorio", "precio": 15500, "requiere_receta": false, "es_controlado": false, "activo": true } ] } // GET /stock?sku=AN-0111&sucursal_id=VMO { "sku": "AN-0111", "sucursal_id": "VMO", "unidades_disponibles": 34, "actualizado_en": "2026-09-04T11:42:00-03:00" }
| Punto | Qué necesitamos |
|---|---|
| Autenticación | Clave de API en cabecera, o usuario y contraseña de servicio. Un identificador exclusivo para el asistente, para poder auditar y revocar sin afectar a otros sistemas. |
| Transporte | HTTPS. Si prefieren restringir por IP, les pasamos la del servidor. |
| Latencia | Idealmente por debajo de 800 ms. El cliente está esperando en WhatsApp mientras tanto: por encima de dos segundos la conversación se siente rota. |
| Volumen | Del orden de 10 consultas por segundo en hora pico con la cadena completa. Si hay un límite menor, decirlo para ajustar el diseño con caché. |
| Ambiente de pruebas | Un entorno separado, con datos de prueba o anonimizados. No trabajamos contra producción durante el desarrollo. |
| Errores | Códigos HTTP correctos y un cuerpo con motivo. Que un error no devuelva 200 con lista vacía. |
| Paginación | Parámetros de límite y desplazamiento, con el total en la respuesta. |
| Aviso de cambio de estado deseable | Si el sistema puede llamar a una URL nuestra cuando un pedido cambia de estado, el cliente recibe el aviso solo. Si no, lo resolvemos consultando cada tanto. |
Siete puntos que salieron al modelar el sistema. No bloquean la firma, pero cada uno cambia el esquema de datos: sale más barato resolverlos ahora que después.
| Punto | El problema | Qué proponemos |
|---|---|---|
| Teléfono no es persona | En Paraguay una familia comparte un teléfono. El asistente identifica por número, pero la ficha se indexa por cédula. | Relación de muchos a muchos entre teléfono y cédula. Ante medicación crónica, el asistente pregunta para quién es. |
| Reservar no bloquea stock | Si dos clientes reservan la última unidad, los dos reciben confirmación. | Reserva con vencimiento que descuenta del disponible y se libera sola. |
| Ciclo de recompra | Cuándo «le toca» un crónico depende de la presentación: una caja de 30 dura 30 días, una de 60 dura 60, la insulina depende de las unidades diarias. | Campo de días de tratamiento por producto. El aviso se dispara tres días antes de que se le acabe. |
| Aviso de medicación es dato de salud | Escribirle a alguien que le toca su metformina, a un número que puede ser compartido, expone su condición. | Consentimiento específico para esa finalidad, separado del comercial, y redacción neutra sin nombrar el producto. |
| Supervisor de zona | Hoy el modelo tiene casa central y sucursal. Quien mira las 23 de Central tiene que ser administrador —y ve todo— o no ve nada. | Un tercer rol con alcance sobre un conjunto de sucursales. |
| Consentimiento por categoría | Aceptar avisos de pedido no es aceptar promociones. Con una sola cuenta de Meta, la penalización cae sobre las 69 sucursales. | Consentimiento separado por finalidad: transaccional, recordatorio de salud y comercial. |
| Quién atiende y quién despacha | Si alguien en Luque escribe al número de Villa Morra porque es el que tiene agendado, hoy se cotiza stock de Villa Morra y se despacha desde ahí, a 20 km. | Dos decisiones distintas: la sucursal que atiende sale del número; la que despacha, de la dirección de entrega. |
Si hay que llevar una sola diapositiva, es esta:
| Qué | Quién | Cuándo | Bloquea |
|---|---|---|---|
| Verificar la cuenta de Meta | Casa central | Ahora — 2 días | El alta de las 69 líneas |
| Definir el acceso al catálogo | Equipo de desarrollo | Ahora — a estimar | Todo el piloto |
| Elegir la sucursal del piloto | Dirección | Antes del inicio | La puesta en producción |
| Designar un referente operativo | Dirección | Antes del inicio | Las decisiones del día a día |