Skip to content

Crear Chat

Crea una nueva atención (o reutiliza un chat activo) para un contacto y canal.

Endpoint

http
POST /api/{organizationId}/chat/create

URL base: https://v1.api.interflow.chat

Autenticación

API Key en el header (uno de los formatos):

http
x-api-key: ak_tu_api_key

o

http
Authorization: Bearer ak_tu_api_key

Parámetros

URL

ParámetroTipoObligatorioDescripción
organizationIdstring (UUID)ID de la organización

Body

CampoTipoObligatorioDescripción
channelIdstring (UUID)ID del canal activo — menú lateral Canales (copiar en la tarjeta)
customerIdstring (UUID)NoCliente existente — Clientes → acciones (⋮) → Copiar ID; si se omite, busca/crea automáticamente
customerobjectSí*Datos del cliente. El identificador del chat sale de aquí, según el canal
teamIdstring (UUID)NoEquipo de la atención — menú Equipos (copiar en la tarjeta)
initialMessagestring | objectNoMensaje inicial (texto o medio)
whatsappTemplateobjectNoPlantilla Meta (solo WhatsApp Oficial) — Canales → Plantillas → Copiar ID
flowIdstring (UUID)NoInicia el flujo de inmediato — menú Flujos (copiar en la tarjeta)
flowVariablesarrayNoVariables del flujo: [{ "name": "...", "value": "..." }]
contextMessagestringNoContexto usado con flowId o responseFlowId
responseFlowIdstring (UUID)NoFlujo al responder el cliente — mismo ID en Flujos (copiar en la tarjeta)
keepPendingbooleanNoSi es true, mantiene el chat en pending aunque haya initialMessage / whatsappTemplate (no atiende ni autoasigna)

*Obligatorio: channelId y el campo de customer del canal (whatsapp/phone, email, instagram o facebook).

customer

CampoTipoDescripción
namestringNombre del cliente
whatsappstringNúmero de WhatsApp. Obligatorio en WhatsApp si no viene phone
phonestringTeléfono. En WhatsApp, se usa si no viene whatsapp. Si no, queda como contacto extra
emailstringEmail. Obligatorio en canal email. En los demás, contacto extra
instagramstringInstagram ID. Obligatorio en canal Instagram
facebookstringFacebook ID. Obligatorio en canal Facebook
documentstringCPF/CNPJ (u otro documento). Solo se rellena si el cliente aún no tiene documento
salePrice / sale_pricenumber | stringValor de compra/venta (customers.sale_price). Solo se rellena si está vacío
tagsstring[] | stringNombres de tags (existentes). No crea una tag nueva
customFieldsobject | arrayCampos personalizados por slug: { "inversion": "Hasta 15 mil" } o [{ "slug": "inversion", "value": "Hasta 15 mil" }]
forceUpdateobjectQué campos sobrescribir aunque ya tengan valor. Ver la tabla abajo

customer.forceUpdate

Sin forceUpdate, un cliente existente solo rellena lo que esté vacío. Marca true en los campos que deben sobrescribirse:

ClaveEfecto
nameSobrescribe el nombre
emailSobrescribe el email principal
phoneActualiza el contacto de teléfono existente
whatsappActualiza el contacto de WhatsApp existente
instagramActualiza el Instagram ID
facebookActualiza el Facebook ID
documentSobrescribe el documento
sale_priceSobrescribe el valor de compra
customFieldstrue fuerza todos los slugs enviados; o lista (["inversion"]) / slug ("inversion")

Identificador por el canal

Interflow lee el destinatario en customer, según el tipo de canal:

Tipo del canalCampo en customer
whatsapp_official, whatsapp_wapi, whatsapp_zapi, whatsapp_waha, whatsapp_evowhatsapp (si no, phone)
emailemail
instagraminstagram
facebookfacebook

Cliente existente: nombre, email, documento y customer.customFields solo rellenan lo vacío (already_filled), salvo que customer.forceUpdate marque el campo. Contactos extra (teléfono, WhatsApp, Instagram, Facebook) se añaden si aún no existen; con forceUpdate se actualiza ese tipo de contacto.

initialMessage

Cadena (texto) u objeto:

CampoTipoDescripción
typestringtext, image, video, audio o document
contentstringTexto (obligatorio si type = text) o leyenda
urlstringURL HTTPS del medio (obligatorio para tipos de medio)
namestringNombre del archivo (opcional)
mimetypestringMIME type (opcional)
forwardobjectMetadatos de reenvío (opcional)

whatsappTemplate

CampoTipoDescripción
id o templateIdstring (UUID)ID Interflow de la plantilla — Canales → canal → Plantillas de WhatsAppCopiar ID
variablesobject | arrayVariables de la plantilla (opcional)

ETAPA DEL CLIENTE

Al crear un cliente nuevo, el sistema usa la etapa predeterminada del canal (settings.defaultStageId), si es válida.

Comportamiento

  • Si ya existe un chat activo (pending, in_progress o await_closing) para el mismo contacto/canal, se reutiliza (existing: true).
  • Sin keepPending, enviar initialMessage o whatsappTemplate suele atender el chat (in_progress) o añadirte como colaborador.
  • Con keepPending: true, se envía el mensaje/plantilla y el chat permanece pending (también omite autoasignación al crear).
  • flowId y responseFlowId son independientes: el primero inicia al momento; el segundo espera la respuesta del cliente.

Ejemplos

Creación básica

bash
curl -X POST "https://v1.api.interflow.chat/api/{organizationId}/chat/create" \
  -H "Content-Type: application/json" \
  -H "x-api-key: ak_tu_api_key" \
  -d '{
    "channelId": "uuid-del-canal",
    "customer": { "whatsapp": "5511999999999" },
    "customerName": "Nombre del cliente"
  }'

Plantilla WhatsApp + mantener pending + flujo al responder

bash
curl -X POST "https://v1.api.interflow.chat/api/{organizationId}/chat/create" \
  -H "Content-Type: application/json" \
  -H "x-api-key: ak_tu_api_key" \
  -d '{
    "channelId": "uuid-del-canal",
    "customer": { "whatsapp": "5511999999999" },
    "customerName": "Nombre del cliente",
    "keepPending": true,
    "responseFlowId": "uuid-del-flujo",
    "whatsappTemplate": {
      "id": "uuid-de-la-plantilla"
    }
  }'

Flujo inmediato

bash
curl -X POST "https://v1.api.interflow.chat/api/{organizationId}/chat/create" \
  -H "Content-Type: application/json" \
  -H "x-api-key: ak_tu_api_key" \
  -d '{
    "channelId": "uuid-del-canal",
    "customer": { "whatsapp": "5511999999999" },
    "flowId": "flow-uuid",
    "contextMessage": "¡Bienvenido!",
    "flowVariables": [
      { "name": "origen", "value": "api" }
    ]
  }'

Respuesta

Éxito (200)

json
{
  "success": true,
  "chatId": "chat-uuid",
  "formattedContact": "5511999999999",
  "existing": false,
  "flowInitiated": false,
  "keepPending": true,
  "responseFlowScheduled": true,
  "responseFlowId": "uuid-del-flujo",
  "responseFlowName": "Nombre del flujo",
  "templateSent": true,
  "templateMessageId": "message-uuid"
}

Errores comunes

HTTPSituación
400Parámetros inválidos / plantilla en canal no oficial
404Canal inactivo o responseFlowId inexistente
401API Key inválida

Próximos pasos

Documentación en constante actualización