Nahui Connect / Documentación

Guía para crear un CRM

Arquitectura de referencia para construir un inbox, agente o automatización sobre Nahui Connect sin depender del almacenamiento de Nahui.

Arquitectura mínima

Arquitectura
WhatsApp del contacto
        ↓
Meta Cloud API
        ↓
Nahui Connect
        ↓ POST firmado
Webhook de tu backend
        ↓
Validación + deduplicación
        ↓
Base de datos / reglas / IA / atención humana
        ↓
Respuesta inmediata o POST /reply
        ↓
Nahui Connect → Meta → contacto

Responsabilidades del backend

Tablas mínimas sugeridas

TablaCampos sugeridos
connectionsid, nahui_connection_id, name, status, referencia segura al secreto
contactsid, connection_id, nahui_contact_id, display_name, created_at, updated_at
conversationsid, connection_id, nahui_conversation_id, contact_id, status, assigned_user_id, last_message_at
messagesid, conversation_id, nahui_message_id, direction, type, body, payload_json, created_at
webhook_deliveriesdelivery_id UNIQUE, event_id, received_at, processed_at, status
outbound_operationsidempotency_key UNIQUE, conversation_id, kind, status, attempts, last_error

No uses displayName como identificador. Usa contact.id junto con connectionId. El historial que guardes pertenece al CRM, no a Nahui.

Agente de IA

  1. Recibe y verifica el evento.
  2. Busca los últimos mensajes en la base del CRM.
  3. Aplica reglas para decidir si responde la IA o un humano.
  4. Llama al proveedor de IA.
  5. Valida y limita la salida a 4,000 caracteres.
  6. Responde de manera síncrona si queda tiempo suficiente.
  7. Si no, usa una cola y /reply.

No envíes el secreto, la API key ni el evento completo como instrucciones no confiables al modelo.

Atención humana

Manejo de medios

El evento incluye media.id, mimeType, caption y filename cuando Meta los proporciona. La versión actual no documenta un endpoint de Nahui para descargar el binario: no asumas que media.id es una URL y no fabriques una.

Estados recomendados

Entrega entrante

receivedverifiedprocessingcompleted / failed

Salida

pendingsendingsent / retryable_error / permanent_error

Prueba de aceptación