Documentación Técnica & Operativa · CLink v1

Dos Modalidades de Integración: Puente API Directo o Flujos en CLink Panel

Elija cómo integrar la línea oficial de WhatsApp de su empresa según su arquitectura: conectándose directamente a nuestra API Gateway (sin pasar por CLink Panel) o gestionando la operación completa desde CLink Panel con Linki IA.

Opción 1 · API Directa (Sin Panel) Puente Meta ↔ Su Receptor

Conectarse directo al API de CLink como puente con Meta

Ideal si usted ya tiene su propio software, CRM, ERP o bot propio. Su sistema envía mensajes con POST /v1/messages y recibe cada mensaje o estado entrante de WhatsApp en su propio receptor vía Webhook (X-ChainSoft-Signature).

Ir a la documentación de API Directa→
Opción 2 · CLink Panel + Linki IA Flujos + Bandeja + Webhooks

Utilizar CLink Panel para flujos, agentes humanos y Linki IA

Ideal si desea diseñar flujos visuales sin código, enviar campañas con Excel, atender clientes con múltiples asesores en vivo y dejar que Linki IA consulte su API únicamente en los pasos que lo requieran.

Ir a la guía de CLink Panel y Flujos→
Opción 1 · 1.1 Puente Directo & Gestión de Claves Sin pasar por el editor de flujos

¿Dónde obtener sus claves de API Directa y cómo resetearlas si las extravía?

Si su empresa ya cuenta con su propio software, ERP, sistema de turnos o motor conversacional y solo necesita que CLink sea el puente oficial de alta disponibilidad entre Meta y su servidor receptor, puede autenticarse directamente contra nuestro Gateway REST mediante una llave de servidor (X-Service-Key).

1. ¿Dónde se ven las claves?

Ingrese a CLink Panel → botón «API Directa» en la barra principal. Allí encontrará el phoneNumberId de su línea, su CallbackSecret y el botón «Generar Clave API Directa» para emitir su X-Service-Key (clink_live_...).

2. Visualización Única (SHA-256)

Por seguridad bancaria, CLink no guarda su X-Service-Key en texto plano sino únicamente su huella irreversible SHA-256. La clave completa se muestra una sola vez al generarla para que la copie en las variables de entorno de su servidor.

3. ¿Cómo recuperar o resetear?

Si olvidó guardar la clave o necesita rotarla, entre a CLink Panel → API Directa y pulse «Regenerar / Resetear Clave API». El sistema invalidará la llave anterior al instante y le mostrará en pantalla una nueva X-Service-Key lista para copiar.

Opción 1 · 1.2 Envío de Mensajes (POST /v1/messages) Texto, Plantillas, Botones, Listas y Archivos

Cómo enviar mensajes salientes desde su sistema (POST /v1/messages)

Envíe una petición POST /v1/messages con la cabecera X-Service-Key y opcionalmente Idempotency-Key (para evitar duplicados en reintentos de red). El campo to debe ir en formato internacional E.164 con signo más (ej. +573001234567). Seleccione el tipo de mensaje (kind) para ver el JSON exacto:

// POST /v1/messages
// Headers:
//   X-Service-Key: <su_service_key>
//   Idempotency-Key: msg-orden-9821 (opcional)
{
  "phoneNumberId": "10592837465001",
  "to": "+573001234567",
  "kind": "text",
  "reference": "ORD-9821",
  "content": {
    "text": "Hola Camila, su pedido #9821 ya salió a reparto y llegará en 20 minutos."
  }
}

Respuesta inmediata (202 Accepted):

El Gateway registra el mensaje en cola de despacho y le devuelve el messageId único para trazabilidad. El campo opcional reference (máx. 120 caracteres) le permite asociar el envío con el ID de orden, cita o factura de su sistema.

{
  "messageId": "01964a90-4f1c-7b2a-8a11-901234567890",
  "status": "queued"
}
Opción 1 · 1.3 Webhook hacia su Receptor (X-ChainSoft-Signature)

Cómo recibe su servidor los mensajes entrantes y estados de WhatsApp

Cuando un cliente escribe a su línea de WhatsApp, pulsa un botón interactivo, envía un archivo o cambia el estado de un mensaje enviado (kind: "status"), el puente de CLink realiza un POST hacia el CallbackUrl configurado en su canal:

POST hacia su CallbackUrl (Receptor del Cliente)
// POST hacia el CallbackUrl de su servidor
// Cabecera de seguridad enviada por CLink Gateway:
//   X-ChainSoft-Signature: sha256=9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08
{
  "eventId": "01964a92-1b80-7d10-9c44-001122334455",
  "phoneNumberId": "10592837465001",
  "displayNumber": "+573237818144",
  "from": "+573001234567",
  "kind": "text",
  "reference": "CITA-4410",
  "receivedAt": "2026-10-18T19:20:15.0000000+00:00",
  "payload": {
    "id": "wamid.HBgMNTczMDAxMjM0NTY3FQIAEhgg...",
    "from": "573001234567",
    "timestamp": "1760815215",
    "type": "text",
    "text": {
      "body": "Sí, confirmo mi asistencia para mañana."
    }
  }
}

Verificación criptográfica de firma (X-ChainSoft-Signature):

Si su canal tiene configurado un CallbackSecret, cada petición lleva la cabecera X-ChainSoft-Signature: sha256=<hex>, calculada con HMAC-SHA256 sobre el cuerpo JSON crudo (raw body). Valores posibles de kind: text, interactive, image, document, audio y status.

Opción 1 · 1.4 Endpoints Complementarios del Gateway

Consulta de Estado, Plantillas Meta, Descarga de Multimedia y Linki LLM Directo

Método & RutaCabeceraDescripción y Respuesta
GET /v1/messages/{id}X-Service-KeyDevuelve el estado actual del envío (queued, sent, delivered, read, failed), providerMessageId (wamid) y lastError.
GET /v1/templates?phoneNumberId=...X-Service-KeyLista en vivo las plantillas aprobadas en el WABA de su línea (name, language, status, body).
GET /v1/media/{mediaId}?phoneNumberId=...X-Service-KeyDescarga el binario (application/octet-stream) de cualquier imagen, PDF o audio que un cliente haya enviado a su línea.
POST /v1/llm/completeX-Service-KeyPermite invocar directamente el motor de lenguaje de Linki desde su backend para extraer JSON o redactar respuestas con baja latencia.
POST /v1/knowledge/searchX-Service-KeyBusca fragmentos semánticos en la Base de Conocimiento RAG de su cuenta (query, scope, topK) con score de relevancia.
POST /v1/knowledge/askX-Service-KeyRecupera los fragmentos de la base de documentos y genera la respuesta oficial con Linki IA sin inventar datos.
Opción 1 · 1.5 Llamadas de Voz por API (/v1/voice) Exclusivo CLink + Linki IA Premium

Cómo disparar llamadas telefónicas individuales o por lote desde su propio sistema

Si su cuenta tiene una línea de voz asignada y el plan CLink + Linki IA Premium, puede iniciar llamadas salientes con POST /v1/voice/calls o programar un grupo de llamadas a una lista con POST /v1/voice/batches. Si omite el campo mission, Linki sigue automáticamente el guion del flujo de voz activo en su cuenta.

1. Llamada individual (POST /v1/voice/calls)
// POST /v1/voice/calls
// Header: X-Service-Key: <su_service_key>
{
  "toPhone": "573001234567",
  "person": "Camila Gómez",
  "mission": "Saluda en nombre de Clínica Aurora, confirma su cita de dermatología para mañana a las 10:30 a. m. y pregunta si podrá asistir.",
  "metadata": {
    "citaId": "CITA-4410",
    "sede": "Chicó Norte",
    "whatsappFallbackTemplate": "recordatorio_cita_medica",
    "whatsappFallbackLanguage": "es",
    "whatsappFallbackParamCount": 2
  },
  "idempotencyKey": "call-cita-4410"
}
2. Grupo por lista (POST /v1/voice/batches)
// POST /v1/voice/batches
// Header: X-Service-Key: <su_service_key>
{
  "audienceId": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
  "name": "Confirmación de citas viernes",
  "mission": "Saluda con amabilidad, confirma la cita programada y pregunta si asistirá o necesita reprogramar.",
  "metadata": {
    "whatsappFallbackTemplate": "recordatorio_cita_medica",
    "whatsappFallbackLanguage": "es",
    "whatsappFallbackParamCount": 2
  },
  "scheduledAt": "2026-10-30T14:00:00-05:00"
}
Método & RutaDescripción y Respuesta
GET /v1/voice/calls/{id}Devuelve el estado actual (queued, dialing, in_progress, completed, no_answer, failed, canceled), analysisSummary, recordingUrl y transcript.
POST /v1/voice/calls/{id}/cancelCancela una llamada en cola o cuelga una llamada que aún esté timbrando o en curso.
GET /v1/voice/batches/{id}Consulta el avance de un grupo de llamadas por lista y el estado individual de cada llamada.
POST /v1/voice/batches/{id}/cancelDetiene el grupo y cancela todas las llamadas que sigan pendientes en la cola.
POST /v1/voice/batches/{id}/retry-unansweredVuelve a poner en cola únicamente las llamadas del grupo que terminaron sin respuesta (no_answer) o fallidas (failed).
Opción 2 · 2.1 Resumen del Panel CLink

¿Cómo funciona CLink con WhatsApp Cloud API Oficial?

CLink conecta la línea oficial de WhatsApp de su empresa directamente a la infraestructura en la nube de Meta (WhatsApp Business Platform), eliminando el riesgo de bloqueos o desconexiones por escaneo de códigos QR no oficiales.

1. Flujos Visuales

Diseñe el recorrido del cliente con pasos conectados: saludos, menús de botones, listas interactivas, envío de PDFs/imágenes y conexión con su propio sistema.

2. Motor Linki IA 24/7

En cuentas CLink Premium, Linki responde preguntas abiertas usando el contexto oficial de su negocio, extrae datos en JSON y traduce las respuestas de su API para el cliente.

3. Bandeja Multi-Agente

En cualquier momento un asesor humano puede pulsar «Tomar chat», pausar el flujo automático, agregar notas internas privadas o transferir el caso a otro departamento.

2.2 Tipos de Flujo

Flujo de Bienvenida, Flujo de Campaña y Flujo de Voz

En la pestaña «Flujos» de CLink usted puede crear tres clases de automatización según el canal y quién inicie la conversación:

Bienvenida (WhatsApp)

Entrante 24h

Se activa automáticamente cuando una persona le escribe por primera vez a su línea de WhatsApp.

  • ▪ Primer mensaje libre: No requiere plantilla aprobada por Meta.
  • ▪ Único activo: Atiende las 24 horas del día.

Campaña (WhatsApp)

Saliente

Se utiliza cuando su empresa le escribe a una lista de contactos desde «Envío» (recordatorios, despachos, avisos).

  • ▪ Inicia con Plantilla: El primer mensaje usa una plantilla aprobada en Meta.
  • ▪ Continuación libre: Al responder el cliente, continúa con botones, archivos o IA.

Flujo de Voz (Linki Voz)

Llamadas IA

Define el saludo, las preguntas y las acciones que Linki ejecuta al atender o realizar llamadas telefónicas en su línea de voz.

  • ▪ Guion conversacional: Convierte sus pasos en una conversación telefónica natural.
  • ▪ Acciones al colgar: Puede crear tarjetas en Desk o enviar los datos a su sistema.
2.3 Constructor Visual

Tipos de Paso en el Editor de Flujos

Arrastre y conecte pasos como un mapa. Cada uno hace una sola cosa: hablarle al cliente, pedirle datos, mostrar opciones, abrir un formulario, consultar su sistema o terminar la conversación.

Mensaje

Envía un texto informativo y pasa al siguiente paso sin esperar respuesta.

Pregunta con opciones

Espera la respuesta del cliente. De 1 a 3 opciones = botones; de 4 a 10 = lista desplegable.

Archivo

Envía PDF, imagen, Word o Excel (con pie opcional) y continúa automáticamente.

Productos / servicios

Consulta hasta 10 ítems en su API y los muestra como lista en WhatsApp (catálogo, citas, planes, etc.).

Formulario WhatsApp

Abre un formulario nativo de WhatsApp (diseñado en Meta) para capturar varios datos de una vez. Detalle en la sección siguiente.

Conectar con otro sistema

Envía las respuestas a su CRM/ERP/API. Si su API devuelve datos, Linki puede redactar la respuesta al cliente (Premium).

Linki (agente IA)

En Premium, Linki conversa en lenguaje libre según la misión del paso y su base de conocimiento, sin inventar datos.

Guardar en Desk / Fin

Desk crea una tarjeta en el tablero con lo capturado (sin escribirle al cliente). Fin envía la despedida y cierra la sesión automática.

2.4 Formularios WhatsApp

Cómo usar un formulario nativo dentro del flujo

Un Formulario WhatsApp es una pantalla (o varias) que el cliente completa dentro de WhatsApp: datos de contacto, solicitud de cita, pedido, encuesta, etc. Usted lo diseña y publica en WhatsApp Manager → Flujos; en CLink solo lo enlaza a un paso.

Formulario fijo (recomendado al empezar)

Las pantallas ya están armadas en Meta. El cliente las llena y, al enviar, el flujo de CLink continúa por «Qué sigue después». Ideal si no necesita cupos ni listas en vivo.

  • ▪ Pegue el número del formulario, el texto del botón y el mensaje.
  • ▪ Deje apagadas las opciones avanzadas.

Datos al momento (avanzado)

Mientras el cliente llena el formulario, WhatsApp consulta a CLink para saber qué pantalla mostrar y con qué datos (horarios libres, catálogo, confirmación). Use esto solo si necesita información en vivo.

  • ▪ En el editor: Opciones avanzadas → Actualizar datos mientras el cliente lo llena.
  • ▪ Indique la primera pantalla (como se llama en Meta).
  • ▪ Opcional Premium: Conectar con mi sistema para decidir pantallas siguientes.

Checklist rápido

  1. Cree y publique el formulario en WhatsApp Manager.
  2. En CLink, agregue el paso Formulario WhatsApp y pegue el número, el botón y el mensaje.
  3. Si usa datos al momento: en Meta el formulario debe estar en modo «con servidor», con la prueba de conexión en verde (ChainSoft prepara el cifrado del número desde soft-manage).
  4. Envíe una prueba, ábralo en WhatsApp, complete y verifique que el flujo siga al paso enlazado.

Para desarrolladores: si conecta «Mi sistema», su API recibe purpose: "flow_data_exchange" y debe responder con screen y data. Ver sección 4.4.

2.5 Plantillas Meta & Audiencias Excel

Cómo usar Variables Dinámicas y Cargar Listas en Excel / CSV

Cuando una plantilla aprobada en Meta incluye variables como {{1}}, {{2}} o {{3}}, CLink las reemplaza automáticamente con las columnas de su archivo Excel o CSV cargado en «Audiencias»:

Columna en Excel / CSVVariable en PlantillaEjemplo de ValorRegla en CLink
telefonoNúmero destino573001234567Obligatorio con código de país (11 a 15 dígitos, ej. 57 para Colombia).
nombre{{1}}Ana MaríaSi viene vacío en el Excel, usa el valor por defecto del paso (ej. «cliente»).
referenciaID InternoFAC-9821Viaja hacia su API en contact.reference y aparece en reportes.
dato2 ... dato10{{2}} ... {{10}}Martes 3:00 PMRellena variables adicionales de la plantilla (fecha, valor, link, doctor).
2.6 Operación en Vivo

Bandeja Multi-Agente en Tiempo Real e Historial Auditable

  • ▪ Tomar y devolver el control al Bot: Cuando un agente pulsa «Tomar chat», el flujo automático y Linki se pausan para ese contacto. Al pulsar «Devolver al bot», el flujo retoma el control.
  • ▪ Bloqueo de colisiones en tiempo real: Si dos agentes intentan tomar el mismo chat en el mismo milisegundo, CLink garantiza mediante control de concurrencia que solo el primero lo tome y notifica al segundo al instante.
  • ▪ Notas Internas y Respuestas Rápidas (/): Los agentes pueden dejar notas privadas que nunca se envían por WhatsApp, clasificar el chat con etiquetas y escribir /atajo para insertar respuestas rápidas preconfiguradas.
  • ▪ Descanso post-cierre (24 horas): Cuando una conversación termina su flujo normal, entra en reposo durante 24 horas para no reiniciar el saludo de bienvenida si el cliente solo responde «¡Muchas gracias!». Si un agente cierra el chat manualmente, queda listo de inmediato para futuras consultas.
2.7 Llamadas Salientes (Linki Voz) Individual o por Lista · Plan Premium

Cómo hacer que Linki llame por teléfono a una persona o a toda una lista de contactos

Desde el módulo «Llamada saliente» en CLink Panel, Linki puede realizar llamadas telefónicas en español natural para confirmar citas, recordar vencimientos de cartera, avisar entregas o realizar encuestas de atención:

1. A una persona o a una lista completa

Elija «A una persona» seleccionando el indicativo de país y el teléfono, o elija «A una lista» para llamar a una Audiencia cargada desde Excel. Los contactos marcados con «No enviar» se excluyen automáticamente.

2. Flujo de voz activo o instrucción puntual

Puede indicar que Linki siga el guion de su Flujo de voz activo o escribir una instrucción rápida para esa llamada (con plantillas de 1 clic para confirmar citas, recordar pagos o avisar pedidos).

3. Protección de horario hábil (8:00 a. m. – 8:00 p. m.)

Para cuidar la experiencia de sus clientes, los grupos de llamadas por lista solo timbran dentro de la ventana de horario hábil (por defecto 8:00 a. m. a 8:00 p. m. hora Colombia) y respetan el límite de llamadas simultáneas de su cuenta.

4. Grabación, resumen, reintentos y Excel

Al finalizar cada llamada, el panel muestra el reproductor de audio integrado, el resumen ejecutivo, la transcripción completa, un botón de 1 clic para volver a llamar a quienes no contestaron y la descarga del reporte completo en Excel (.xlsx).

5. Omnicanalidad Voz → WhatsApp (Respaldo automático si no contestan)

Puede activar la casilla «Seguimiento por WhatsApp si no contestan la llamada» y elegir una plantilla aprobada de Meta. Si el teléfono del cliente está ocupado o no responde la llamada, CLink le envía automáticamente el mensaje por WhatsApp completando su nombre ({{1}}) y los datos de la lista.

2.1 Contexto del Negocio (aiContext) Exclusivo CLink + Linki IA Premium

Cómo entrenar el «Contexto del Negocio» en cada Flujo

En el panel izquierdo del editor de flujos encontrará el recuadro «Contexto del negocio (Linki IA)». Todo lo que escriba allí (hasta 8.000 caracteres por flujo) actúa como la Base de Conocimiento Oficial que Linki consulta cuando un cliente escribe una pregunta abierta en lugar de pulsar un botón.

Ejemplo recomendado de Contexto del Negocio (aiContext)
Empresa: Clínica Dermatológica Aurora.
Horarios de atención: Lunes a Viernes de 8:00 AM a 6:00 PM, Sábados de 8:00 AM a 1:00 PM. Domingos y festivos cerrado.
Sedes:
- Sede Norte: Calle 100 #15-20, Consultorio 402 (Parqueadero gratuito por 1 hora).
- Sede Chapinero: Carrera 13 #54-10.
Tarifas vigentes:
- Consulta de valoración dermatológica: $120.000 COP.
- Limpieza facial profunda: $160.000 COP.
Medios de pago: PSE, Nequi, Daviplata, tarjetas débito/crédito y efectivo en sede.
Política de cancelación: Se puede reprogramar sin costo avisando con mínimo 4 horas de anticipación.
2.2 Blindaje Cero-Alucinaciones & Memoria

Cómo responde Linki sin inventar información y cómo usa la rama «Otra respuesta»

Cuando una conversación se encuentra en un paso de tipo «Pregunta con opciones» y el cliente escribe texto libre que no coincide con ninguno de los botones:

  1. Memoria de Conversación (Transcript): Linki recibe automáticamente los últimos turnos de la charla junto con la pregunta actual, las opciones válidas y el Contexto del Negocio (aiContext) del flujo.
  2. Regla Cero-Alucinaciones: Si el cliente pregunta por un dato que está en el Contexto del Negocio (ej. «¿A qué hora cierran los sábados y cuánto vale la valoración?»), Linki le responde con precisión en 2 a 4 oraciones y le recuerda amablemente elegir una de las opciones del paso actual para continuar.
  3. Si preguntan algo no incluido en el contexto: Linki tiene estrictamente prohibido adivinar precios, descuentos, stock o políticas no escritas. Le indicará con calidez que no dispone de ese dato exacto y lo invitará a elegir una opción o hablar con un asesor.
3.1 Seguridad, Autenticación & Idempotencia

Requisitos Técnicos para Conectar su Servidor o API con CLink

1. HTTPS Público & Protección SSRF

Todo destino configurado en CLink debe usar HTTPS (https://) con un dominio público válido. Por seguridad, CLink rechaza direcciones IP privadas (127.0.0.1, localhost, 10.x, 192.168.x).

2. Autenticación (API Key o Basic)

Puede elegir API Key (enviada en la cabecera Authorization: Bearer <su_clave> o en la cabecera personalizada que defina) o Usuario y Contraseña (Authorization: Basic <base64>). Las credenciales se almacenan cifradas con AES-GCM.

3. Cabecera Idempotency-Key

Cada petición POST incluye la cabecera Idempotency-Key: <uuid-deterministico> calculada a partir del ID de la conversación y el ID del paso, evitando registros duplicados en su base de datos.

4. Timeout y Reintentos Automáticos

Su servidor dispone de hasta 8 segundos para responder con código 2xx (200 OK / 201 Created). Si responde 408, 429, 502, 503 o 504, CLink reintenta hasta 3 veces con backoff progresivo.

3.2 Payload JSON de Salida (POST)

Estructura del JSON que CLink envía a su API en un paso «Conectar sistema»

Cuando la conversación llega a un paso de integración (webhook), CLink realiza una petición POST con Content-Type: application/json. Si la cuenta tiene Linki IA Premium, el campo data contiene el objeto JSON limpio extraído por Linki según las instrucciones del paso:

POST https://api.suempresa.com/clink/webhook
{
  "version": "v1",
  "id": "8f14e45f-ceea-467a-a8e4-5c19b4a28910",
  "sentAt": "2026-10-18T19:30:00.0000000+00:00",
  "flow": {
    "id": "3c91a720-6f12-4b88-911e-77a2c8910211",
    "name": "Agendamiento y Pedidos"
  },
  "step": {
    "id": "step-webhook-orden",
    "title": "Conectar con ERP"
  },
  "contact": {
    "phone": "573001234567",
    "name": "Camila Gómez",
    "reference": "CLI-9021"
  },
  "data": {
    "especialidad": "Dermatología",
    "fecha_deseada": "2026-10-20",
    "jornada": "mañana",
    "documento": "1020304050"
  },
  "replies": [
    {
      "stepId": "step-ask-servicio",
      "title": "Especialidad",
      "prompt": "¿Para qué especialidad desea consultar disponibilidad?",
      "answer": "Necesito cita de Dermatología para el martes por la mañana, mi cédula es 1020304050",
      "optionId": null
    }
  ]
}
3.3 Respuesta Bidireccional en Tiempo Real Linki IA + API Externa

Cómo hacer que Linki consulte su API y le responda al cliente en WhatsApp

En planes CLink + Linki IA Premium, el paso «Conectar con otro sistema» es bidireccional: CLink lee el cuerpo JSON o texto que su API devuelve en la respuesta HTTP 200 OK (hasta 8.000 caracteres) y decide automáticamente entre dos modos:

Opción A: Su API devuelve datos para el cliente

Linki redacta y envía el mensaje por WhatsApp

Si su endpoint devuelve disponibilidad de citas, estado de un pedido, saldo en cartera o precios, Linki toma únicamente esos datos y le envía la respuesta al cliente en WhatsApp antes de pasar al siguiente paso del flujo:

Respuesta 200 OK de su API
{
  "disponible": true,
  "profesional": "Dra. Laura Martínez",
  "sede": "Sede Chicó - Calle 94 #15-32",
  "horarios_disponibles": ["09:00 AM", "10:30 AM", "11:15 AM"],
  "valor_consulta": "$130.000 COP",
  "preparacion": "Asistir 15 minutos antes con documento de identidad."
}
Lo que Linki le envía al cliente en WhatsApp:«Con la Dra. Laura Martínez en la Sede Chicó (Calle 94 #15-32) tenemos disponibilidad a las 09:00 AM, 10:30 AM y 11:15 AM. El valor de la consulta es de $130.000 COP; recuerde asistir 15 minutos antes con su documento.»
Opción B: Su API solo guarda el registro (Silencioso)

CLink continúa en silencio sin enviar mensaje extra

Si usted solo quería registrar un prospecto o guardar un pedido en su CRM sin que Linki envíe un mensaje adicional en ese paso, basta con devolver un cuerpo vacío o un acuse técnico estándar:

Respuesta 200 OK silenciosa
{
  "ok": true,
  "status": "received"
}
Comportamiento en CLink: Linki detecta que es una confirmación técnica (SKIP), no envía texto intermedio al cliente y avanza de inmediato al siguiente paso conectado en su tablero.
4.4 Formularios con datos al momento

Qué recibe su API cuando el formulario pregunta la siguiente pantalla (purpose: "flow_data_exchange")

Solo aplica si en el paso Formulario WhatsApp activó «Actualizar datos mientras el cliente lo llena» y eligió un webhook en Conectar con mi sistema (Premium). CLink hace un POST síncrono a su URL. Su respuesta debe ser un objeto JSON con al menos screen (nombre de la pantalla en Meta) y, si aplica, data (valores para rellenar esa pantalla).

1. Petición de CLink
{
  "version": "v1",
  "purpose": "flow_data_exchange",
  "flow": {
    "id": "3c91a720-6f12-4b88-911e-77a2c8910211",
    "name": "Captura de cita"
  },
  "step": {
    "id": "step-formulario",
    "title": "Formulario WhatsApp",
    "metaFlowId": "1516739540503594"
  },
  "contact": {
    "phone": "573001234567",
    "name": "Camila Gómez",
    "reference": "CLI-9021"
  },
  "conversationId": "8f2a1c90-4b11-4e20-9c5d-1a2b3c4d5e6f",
  "meta": {
    "action": "INIT",
    "flow_token": "…",
    "data": {}
  }
}
2. Respuesta esperada
{
  "screen": "CONFIRM_SCREEN",
  "data": {
    "servicio": "Consulta general",
    "horarios": ["10:00", "11:30", "15:00"]
  }
}
  • ▪ meta.action suele ser INIT (al abrir) o el evento de avance del formulario.
  • ▪ Si su API falla o no devuelve screen, CLink cierra el formulario de forma segura para no dejar al cliente trabado.
  • ▪ El resultado final del formulario también llega al chat cuando el cliente lo envía; el flujo sigue por «Qué sigue después».
4.1 API de Catálogo Dinámico

Cómo devolver Productos o Servicios Dinámicos (purpose: "catalog")

Cuando utiliza un paso de tipo «Productos» (catalog), CLink envía un POST a su endpoint con "purpose": "catalog". Su API debe responder con un arreglo items (o directamente un arreglo JSON) de entre 1 y 10 opciones. Cada opción admite id (hasta 200 caracteres) y title o name (hasta 24 caracteres por requisito oficial de listas en WhatsApp):

1. Petición enviada por CLink
{
  "version": "v1",
  "purpose": "catalog",
  "flow": {
    "id": "3c91a720-6f12-4b88-911e-77a2c8910211",
    "name": "Catálogo de servicios"
  },
  "step": {
    "id": "step-catalogo",
    "title": "Productos disponibles"
  },
  "contact": {
    "phone": "573001234567",
    "name": "Camila Gómez",
    "reference": ""
  },
  "replies": []
}
2. Respuesta esperada de su API
{
  "items": [
    { "id": "SRV-001", "title": "Consulta general" },
    { "id": "SRV-002", "title": "Valoración presencial" },
    { "id": "SRV-003", "title": "Seguimiento / control" },
    { "id": "SRV-004", "title": "Servicio a domicilio" }
  ]
}
4.2 Ejemplos de Implementación

Código Listo para Copiar en su Servidor (Node.js, .NET 8 y Python)

Seleccione el lenguaje de su backend para copiar un endpoint que valida la clave, atiende catálogo, formularios con datos al momento (flow_data_exchange) y respuestas bidireccionales a Linki IA:

import express from 'express';

const app = express();
app.use(express.json());

// Endpoint conectado en CLink -> Paso "Conectar con otro sistema"
app.post('/api/clink/webhook', async (req, res) => {
  // 1. Validar API Key configurada en CLink
  const auth = req.headers['authorization'];
  if (auth !== `Bearer ${process.env.CLINK_WEBHOOK_KEY}`) {
    return res.status(401).json({ error: 'No autorizado' });
  }

  // 2. Clave de idempotencia única por conversación + paso
  const idempotencyKey = req.headers['idempotency-key'];
  const { purpose, contact, data, replies } = req.body;

  // Caso A: Paso "Productos" (lista dinámica, máx. 10 ítems, título <= 24 chars)
  if (purpose === 'catalog') {
    return res.status(200).json({
      items: [
        { id: 'CITA-GEN', title: 'Consulta general' },
        { id: 'CITA-SEG', title: 'Seguimiento' },
        { id: 'CITA-DOM', title: 'Visita a domicilio' }
      ]
    });
  }

  // Caso B: Formulario WhatsApp con datos al momento (responde screen + data)
  if (purpose === 'flow_data_exchange') {
    const action = req.body?.meta?.action;
    if (action === 'INIT') {
      return res.status(200).json({
        screen: 'WELCOME_SCREEN',
        data: {}
      });
    }
    return res.status(200).json({
      screen: 'CONFIRM_SCREEN',
      data: {
        horarios: ['10:00', '11:30', '15:00']
      }
    });
  }

  // Caso C: Paso "Conectar con otro sistema" (JSON extraído por Linki en 'data')
  console.log('Cliente:', contact.phone, 'Datos extraídos por Linki:', data);

  // Si devuelve datos del negocio, Linki IA (Premium) le redacta la respuesta en WhatsApp:
  return res.status(200).json({
    estado_pedido: 'En preparación',
    responsable: 'Carlos Pérez',
    tiempo_estimado: '20 minutos',
    total_pagar: '$54.900 COP'
  });
});

app.listen(3000);

¿Necesita acompañamiento conectando su ERP, POS o software médico?

Nuestro equipo de ingeniería en Bogotá lo acompaña en la configuración de sus Webhooks, validación de plantillas en Meta y afinación del contexto de Linki IA.