0
Mensajes Enviados
0
Mensajes Pendientes
0
Mensajes Fallidos
0%
Tasa de �0xito
0
Mensajes Sin Costo
0
Mensajes Con Costo

Enviar Mensaje

Historial de Mensajes

Teléfonos

WhatsApp Business API

Haz clic en "Probar Conexión" para verificar el estado de la API

Configurar Credenciales

API Keys para Postman

Crea un token para consumir la API desde Postman usando el header x-api-key. Guarda la clave al crearla; después solo se mostrará parcialmente.

Templates Configurados

Selecciona un template para editarlo o crea uno nuevo. Los templates aprobados por admin son los que puede usar la integración.

Editar Template

Registra aquí los templates ya creados/aprobados en Meta. Esta tabla no crea templates en WhatsApp; solo guarda cuál debe usar la API y cómo mapear sus parámetros.

El estatus lo actualiza únicamente un administrador después de revisarlo o darlo de alta en Meta.

Documentación para Desarrolladores

Endpoints externos disponibles para integraciones usando x-api-key. Da click en cualquier endpoint para abrir Swagger.

Guía de Uso para Desarrolladores

Esta guía resume cómo consumir la API desde sistemas externos usando x-api-key.

1. Alta inicial por WabaFlow

Después de contratar el plan, el equipo de WabaFlow realizará el alta del número telefónico proporcionado durante el registro inicial. Cuando el alta quede lista, recibirás un correo con los IDs de Meta y el Access Token necesarios para conectar tu cuenta.

2. Captura de credenciales WhatsApp

  1. Abre el botón del correo de confirmación para ir a la pantalla WhatsApp.
  2. Ingresa el Phone Number ID, WABA ID y Access Token.
  3. Da click en Guardar Credenciales.
  4. Para comprobar que quedó correctamente configurado, presiona Probar Conexión.

3. Generar API Key

Una vez validada la conexión con WhatsApp, entra a API Keys y genera tu x-api-key. Esa llave se usará desde tu software para consumir los endpoints de WabaFlow.

4. Configurar templates

Da de alta los templates necesarios de acuerdo con el flujo de trabajo de tu software. Los templates deben corresponder a los casos de uso que enviará tu integración, por ejemplo notificaciones, resultados, avisos o solicitudes de respuesta.

5. Consultar documentación y endpoints

Finalmente, revisa la documentación de flujo de trabajo de WhatsApp API y los endpoints de WabaFlow para poder emitir mensajería desde tu sistema usando el header x-api-key.

1. Autenticación

Todos los endpoints externos se consumen con el header:

x-api-key: TU_API_KEY

2. Flujo Recomendado para Resultados

  1. Consultar o configurar el template activo para resultados_laboratorio.
  2. Enviar la plantilla con send-message-as-template si se necesita iniciar la conversación.
  3. Enviar documentos, imágenes o videos con send-document, send-image o send-video.
  4. Si la ventana de 24 horas está abierta, la API envía el archivo inmediatamente.
  5. Si no hay ventana abierta, la API deja el archivo en cola hasta que el paciente responda.
  6. Si pasan las horas de vigencia sin respuesta, el job automático expira los adjuntos.

3. Enviar Plantilla sin Archivos

POST /api/whatsapp/send-message-as-template Content-Type: application/json x-api-key: TU_API_KEY { "to": "5212291096927", "templateUseCase": "resultados_laboratorio", "templateValues": { "paciente_nombre": "ALEJANDRO PONS", "laboratorio_nombre_comercial": "Laboratorio Cosi", "laboratorio_telefono": "2284111832" } }

4. Enviar o Encolar Documento

POST /api/whatsapp/send-document Content-Type: application/json x-api-key: TU_API_KEY { "to": "5212291096927", "requestNumber": "226000005", "document": { "filename": "resultado-226000005.pdf", "data": "data:application/pdf;base64,JVBERi0xLjQK...", "mimeType": "application/pdf", "caption": "Resultados de laboratorio 226000005" }, "waitWindowHours": 12 }

5. Consultar Template Activo

GET /api/whatsapp/templates/active?useCase=resultados_laboratorio x-api-key: TU_API_KEY

6. Enviar Mensaje Directo

�asalo para mensajes dentro de ventana de 24 horas o para payloads explícitos de template.

POST /api/whatsapp/send-message Content-Type: application/json x-api-key: TU_API_KEY { "to": "5212291096927", "type": "text", "text": "Mensaje de prueba" }

7. Notas Importantes

  • El catálogo local no crea templates en Meta; solo guarda cuáles usar y cómo mapear parámetros.
  • El status del template lo administra internamente el administrador.
  • Los archivos pendientes tienen vigencia configurable, por defecto 12 horas.
  • El flush manual no consulta Meta; calcula la ventana de 24 horas con el último webhook inbound guardado para ese contacto.
  • Para texto libre fuera de la ventana de 24 horas, WhatsApp requiere template aprobado.

Objetivo

Cuando el usuario presione Enviar resultados por WhatsApp, el sistema debe:

  1. Generar o recuperar el PDF del resultado.
  2. Enviar una plantilla aprobada con send-message-as-template si se necesita iniciar la conversación.
  3. Registrar el PDF con send-document; si hay ventana abierta sale inmediatamente, si no queda en cola.
  4. Esperar a que el paciente responda o presione el botón Recibir PDF.
  5. El webhook enviará automáticamente todos los PDFs pendientes de ese paciente.

Endpoint

POST /api/whatsapp/send-document x-api-key: TU_API_KEY Content-Type: application/json

Plantilla de ejemplo

Debe estar aprobada en Meta antes de usarla. Sirve para saber a qué corresponden los parámetros del payload.

Estimado(a) {{1}}: Nos complace informarle que los resultados de sus analisis clinicos ya estan disponibles. Para recibir su documento por WhatsApp, responda a este mensaje o presione el boton Recibir PDF. Esta linea no esta bajo supervision de nuestro personal. Para consultas, comuniquese al {{4}}. Atentamente, {{2}} Software COSI LAB v5

Botón:

Recibir PDF

Samples:

{{1}} = Alejandro Pons {{2}} = Laboratorio Cosi {{3}} = 126000052 {{4}} = 5555000000

Si la plantilla final no usa {{3}}, no enviar ese parámetro. Los parámetros enviados deben coincidir con las variables reales de la plantilla aprobada.

Payload recomendado

POST /api/whatsapp/send-document x-api-key: TU_API_KEY Content-Type: application/json { "to": "5212291096927", "requestNumber": "126000052", "document": { "filename": "resultado_126000052.pdf", "data": "data:application/pdf;base64,JVBERi0xLjQK...", "mimeType": "application/pdf", "caption": "Resultado disponible" }, "waitWindowHours": 12 }

Sincronizar plantillas desde Meta

Usa este endpoint para que whatsapp-api consulte las plantillas aprobadas/configuradas en Meta y actualice el catálogo local.

POST /api/whatsapp/templates/sync-meta x-api-key: TU_API_KEY

Requiere que la cuenta del cliente tenga configurado waba_id y access_token con permisos para consultar templates.

Regla de cola y anti-spam

  • El endpoint siempre guarda el PDF en cola.
  • Si no hay PDFs pendientes previos para ese contacto, envía plantilla.
  • Si ya hay PDFs pendientes recientes, solo encola el nuevo PDF.
  • Si ya pasó notificationCooldownHours, vuelve a enviar plantilla.
  • Si los PDFs pendientes ya fueron enviados y llega otro PDF nuevo, envía plantilla otra vez.

Respuesta del paciente

  • Puede responder cualquier texto, por ejemplo ok.
  • Puede presionar el botón Recibir PDF.
  • Puede responder con el folio/solicitud, por ejemplo 126000052.

El webhook envía solo el folio solicitado o todos los PDFs pendientes vigentes si la respuesta es genérica.

Consideraciones

  • Convertir el PDF a base64 o Data URI antes de llamar el endpoint.
  • Enviar el teléfono destino solo con dígitos y código de país.
  • Usar la x-api-key del cliente correcto.
  • No enviar texto libre si el paciente no ha respondido; para iniciar usar este flujo con plantilla.

SQL sugerido para catálogo local de templates

Este catálogo no crea templates en Meta; solo guarda cuáles puede consumir una integración.

CREATE TABLE IF NOT EXISTS whatsapp_templates ( id INT NOT NULL AUTO_INCREMENT, app VARCHAR(30) NOT NULL DEFAULT 'shared', use_case VARCHAR(80) NOT NULL, name VARCHAR(120) NOT NULL, language_code VARCHAR(10) NOT NULL DEFAULT 'es_MX', description VARCHAR(255) NULL, category VARCHAR(50) NULL, status VARCHAR(30) NOT NULL DEFAULT 'approved', is_default TINYINT(1) NOT NULL DEFAULT 0, active TINYINT(1) NOT NULL DEFAULT 1, created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (id), UNIQUE KEY uq_whatsapp_templates_identity (app, use_case, name, language_code), KEY idx_whatsapp_templates_active (app, use_case, active, is_default) ) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; CREATE TABLE IF NOT EXISTS whatsapp_template_parameters ( id INT NOT NULL AUTO_INCREMENT, template_id INT NOT NULL, position INT NOT NULL, param_name VARCHAR(100) NOT NULL, param_expr VARCHAR(500) NOT NULL, required TINYINT(1) NOT NULL DEFAULT 1, default_value VARCHAR(255) NULL, created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (id), UNIQUE KEY uq_whatsapp_template_parameter_position (template_id, position), KEY idx_whatsapp_template_parameters_template (template_id) ) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

Seed sugerido

INSERT INTO whatsapp_templates ( app, use_case, name, language_code, description, category, status, is_default, active ) VALUES ( 'lab', 'resultados_laboratorio', 'solicitar_descarga_resultados', 'es_MX', 'Aviso para solicitar descarga de PDF de resultados de laboratorio', 'utility', 'approved', 1, 1 ) ON DUPLICATE KEY UPDATE description = VALUES(description), category = VALUES(category), status = VALUES(status), is_default = VALUES(is_default), active = VALUES(active);

Parámetros sugeridos

INSERT INTO whatsapp_template_parameters ( template_id, position, param_name, param_expr, required, default_value ) VALUES (@template_id, 1, 'Paciente', '%%pacientes.nombreLargo%%', 1, 'Paciente'), (@template_id, 2, 'Nombre comercial del laboratorio', '%%empresas.NombreComercial%%', 1, 'Laboratorio Cosi'), (@template_id, 3, 'Teléfono del laboratorio', '%%empresas.Telefono1%%', 1, '') ON DUPLICATE KEY UPDATE param_name = VALUES(param_name), param_expr = VALUES(param_expr), required = VALUES(required), default_value = VALUES(default_value);

Pagos y Cobros

Seguimiento de cobros mensuales, cargos Openpay, estado de pago y recibos internos.

Descripción Importe Excedente Monto final Medio Fecha de pago Status pago CFDI Acciones
Cargando...

Estado de Cuenta

Resumen del saldo mensual asignado, consumo y excedente generado por mensajes entregados.

$0.00
Saldo Mensual
$0.00
Consumo Mensual
$0.00
Consumo Sobre Límite
$0.00
Saldo a Pagar
0
Mensajes Sin Costo
0
Mensajes Con Costo
Fecha Número Tipo Precio WhatsApp Cubierto por Saldo Excedente a Pagar
Cargando...

Métodos de pago

Aceptamos las tarjetas
Visa Mastercard American Express
Tipo Tarjeta Expira Predeterminada Estado Acciones
Cargando...

Proveedor de cobro

Proveedor: Openpay
País: MX
Moneda: MXN
Verificando...

Seguridad

El alta de tarjeta se realiza mediante el proveedor seguro Openpay para evitar manejar datos sensibles dentro de esta aplicación.

Cobro automático

Al cierre del periodo se cobrará el saldo a pagar del estado de cuenta: renta mensual, consumo excedente o ambos.

Planes de suscripción

Selecciona un plan para activar la renta mensual. La contratación es con cargo automático a tarjeta de crédito; usa una tarjeta registrada o agrega una en el resumen.

Cargando planes...

Resumen del pedido

Revisa las condiciones del plan antes de activar la suscripción.

Datos de facturación

Captura estos datos solo si requieres comprobante o referencia fiscal.