Webhook de contactos

Contactos de Instagram, a Zapier,
Make, n8n o Google Sheets.

Cuando alguien comenta una palabra clave o te escribe por DM, Chat33 le pide su correo en el chat. Cada correo que recoge se envía como JSON a una URL de webhook en segundos, y tu herramienta de automatización lo pone donde quieras: una fila de Google Sheets, Airtable, Notion, Slack o tu CRM.

Disponible en todos los planes, incluido Free. Pueden conectarlo los propietarios y administradores del espacio de trabajo.

Qué ocurre

  1. 1Alguien comenta GUÍA en tu publicación
  2. 2Chat33 le envía un DM pidiendo su correo
  3. 3Responde con su dirección de correo
  4. 4Chat33 envía el contacto por POST a la URL de tu webhook
  5. 5Tu Zap, escenario o flujo de trabajo lo agrega a Google Sheets
Antes de empezar

Lo que necesitas

Tres cosas. No hace falta ninguna app de Chat33 en tu herramienta de automatización: es un webhook común.

Una cuenta de Instagram o Facebook conectada

Una cuenta profesional de Instagram (empresa o creador) o una página de Facebook, conectada en Chat33 en Canales.

Una automatización con un paso Pedir correo

El paso pide el correo en un DM y espera hasta 24 horas la respuesta. Funciona con disparadores por palabra clave en DM en Instagram y Facebook, y con disparadores por comentario en Instagram. Pedirlo después de un comentario de Facebook aún no está disponible.

Una herramienta que pueda recibir un webhook

Zapier (Webhooks by Zapier requiere un plan de pago de Zapier), Make, n8n o tu propio servidor. La dirección debe ser pública y empezar con https://. En Chat33, los propietarios y administradores del espacio de trabajo pueden configurar el webhook.

Configuración

Configúralo en seis pasos

Mantén tu herramienta de automatización y Chat33 abiertos en dos pestañas. Copias una URL de una a la otra.

  1. 1

    Obtén una URL de webhook en tu herramienta

    Crea una automatización nueva que empiece con un webhook y copia la URL que te da.

    • Zapier: crea un Zap, elige Webhooks by Zapier como app del disparador y Catch Hook como evento, y copia la URL del webhook.
    • Make: crea un escenario, agrega el módulo de Webhooks Custom webhook, haz clic en Add, ponle un nombre y copia la dirección.
    • n8n: agrega un nodo Webhook y define HTTP Method como POST. Por ahora copia la Test URL. Para contactos reales usa la Production URL y activa el flujo de trabajo.
  2. 2

    Pégala en Chat33

    En Chat33, ve a Configuración, Claves de API y busca la tarjeta Webhook de mensajes. Pega la URL en el campo de dirección.

  3. 3

    Elige Nuevos contactos

    En Enviar, marca Nuevos contactos. Desmarca Nuevos DM si solo quieres contactos; si no, todos los DMs que te envía la gente van a la misma URL. Deja seleccionado Todas las cuentas de este espacio de trabajo o elige las cuentas cuyos contactos quieres. Haz clic en Guardar.

  4. 4

    Envía un contacto de prueba

    Haz clic en Enviar contacto de prueba. Chat33 envía un contacto inventado (Ana Lopez, ana@example.com) con "test": true, y la tarjeta muestra el estado HTTP con el que respondió tu herramienta. En Zapier prueba el disparador con Test trigger, en Make espera a que el módulo indique que determinó la estructura de los datos y en n8n pon el nodo a escuchar un evento de prueba antes de enviar.

  5. 5

    Asigna los campos

    Agrega el siguiente paso y asigna a él los campos del contacto. Para Google Sheets: en Zapier usa Create Spreadsheet Row, en Make Add a Row, en n8n el nodo Google Sheets con Append Row. Pon data.email, data.name, data.username, data.flow.name y data.capturedAt en columnas propias, o lo que necesites. Omite o filtra las solicitudes donde test sea true.

  6. 6

    Actívalo y comprueba un contacto real

    Publica el Zap, activa el escenario o activa el flujo de trabajo de n8n, y activa tu automatización de Chat33. Prueba la automatización desde una segunda cuenta de Instagram. La tarjeta Zapier, Make, n8n, Google Sheets en Configuración, Integraciones muestra cuántos contactos se enviaron, están en espera o fallaron, y el Registro de entregas lista los últimos 50.

Solicitud de ejemplo

Lo que recibe tu herramienta

Un POST por contacto, con un cuerpo JSON. Esta es una solicitud real de Enviar contacto de prueba, palabra por palabra.

Encabezados
content-type: application/json
user-agent: Chat33-Webhooks/1.0
x-chat33-event: lead.captured
x-chat33-signature: t=1793009626,v1=0decb33a96de935324152cb242ec33c3c45849853d59e1ff330b20cb89ded992
Cuerpo
{
  "event": "lead.captured",
  "id": "evt_lead_test_1793009626943",
  "createdAt": "2026-10-26T10:13:46.944Z",
  "data": {
    "version": 1,
    "captureKey": "test_1793009626943",
    "email": "ana@example.com",
    "name": "Ana Lopez",
    "firstName": "Ana",
    "lastName": "Lopez",
    "username": "ana.lopez",
    "platform": "instagram",
    "platformId": "test_platform_id",
    "contactId": "test_contact",
    "channel": {
      "id": "test_channel",
      "name": "Test account"
    },
    "flow": {
      "id": "test_flow",
      "name": "Test flow"
    },
    "keyword": "guide",
    "postId": null,
    "postUrl": null,
    "tags": [],
    "question": "What is your email?",
    "capturedAt": "2026-10-26T10:13:46.943Z",
    "firstSeenAt": "2026-10-26T10:13:46.943Z"
  },
  "test": true
}
Qué se envía

Todos los campos

Anidados bajo data, excepto los cuatro primeros. Los campos solo se agregan, nunca se renombran ni se eliminan, y data.version indica la estructura.

event
Siempre lead.captured para un contacto. El mismo valor va en el encabezado X-Chat33-Event.
id
El id del evento, evt_lead_ seguido de la clave de captura. Se mantiene igual si el mismo contacto se entrega de nuevo (un reintento o Enviar contactos existentes), así que úsalo para omitir duplicados.
createdAt
Cuándo se hizo esta solicitud. Un reintento recibe un createdAt nuevo; el id se mantiene.
test
true en Enviar contacto de prueba. Los contactos reales no tienen este campo.
data.version
La versión de la carga, hoy 1.
data.captureKey
Una clave por persona, dirección de correo y automatización. Si una persona da la misma dirección a la misma automatización otra vez, no se vuelve a enviar. Los contactos de prueba tienen una clave que empieza con test_.
data.email
La dirección que escribió en el DM.
data.name, data.firstName, data.lastName
Su nombre en Instagram o Facebook, y el mismo nombre dividido en dos. El nombre y el apellido quedan en null cuando lo único que sabemos es su usuario.
data.username
Su usuario, sin la @. null cuando la plataforma no lo da.
data.platform, data.platformId
De dónde vino el contacto (instagram o facebook) y el id de la persona allí, el id que Meta le da para tu cuenta.
data.contactId
El id del contacto en Chat33, el mismo id que usa la API REST.
data.channel
La cuenta conectada a la que escribió el contacto: id y nombre.
data.flow
La automatización que pidió el correo: id y nombre, tal como estaban cuando llegó el correo.
data.keyword
La palabra clave que inició la automatización, o null.
data.postId, data.postUrl
La publicación que comentó, cuando un comentario inició la automatización. postUrl solo se completa para publicaciones hechas con Chat33; si no, es null.
data.tags
Las etiquetas de Chat33 del contacto cuando llegó el correo. Con frecuencia, una lista vacía.
data.question
La pregunta que envió el paso Pedir correo, tal como la vio la persona.
data.capturedAt, data.firstSeenAt
Cuándo dio el correo y cuándo apareció el contacto por primera vez en Chat33. ISO 8601, UTC.

Chat33 nunca escribe a tus contactos por correo. Lo que pase después depende de la automatización que construyas.

Seguridad

Comprueba que una solicitud viene de Chat33

Cada solicitud se firma con el secreto de firma de tu webhook, que aparece en la tarjeta Webhook de mensajes en Configuración, Claves de API. Las herramientas sin código pueden omitir este paso y mantener privada la URL del webhook. En tu propio servidor, verifica la firma antes de confiar en el cuerpo.

X-Chat33-Event

lead.captured para un contacto, message.received para un DM.

X-Chat33-Signature

Tiene esta forma: t=1793009626,v1=0decb33a..., donde t es la hora Unix en segundos y v1 es el HMAC-SHA256 de la marca de tiempo, un punto y el cuerpo sin procesar de la solicitud, con el secreto de firma completo (whsec_...) como clave. Cada intento se firma de nuevo con una marca de tiempo nueva.

User-Agent

Chat33-Webhooks/1.0, con Content-Type application/json.

Un secreto nuevo

Quitar el webhook y guardarlo de nuevo genera un secreto nuevo. Actualiza tu servidor cuando eso pase.

Node.js (Express)
const crypto = require("crypto");
const express = require("express");

// Settings, API Keys, Message webhook, Signing secret (whsec_...)
const SECRET = process.env.CHAT33_WEBHOOK_SECRET;

function verifyChat33(rawBody, header, toleranceSeconds = 300) {
  const parts = {};
  for (const piece of String(header || "").split(",")) {
    const i = piece.indexOf("=");
    if (i > 0) parts[piece.slice(0, i)] = piece.slice(i + 1);
  }
  if (!parts.t || !parts.v1) return false;
  if (Math.abs(Date.now() / 1000 - Number(parts.t)) > toleranceSeconds) return false;
  const expected = crypto
    .createHmac("sha256", SECRET)
    .update(`${parts.t}.${rawBody}`)
    .digest("hex");
  const a = Buffer.from(expected, "hex");
  const b = Buffer.from(parts.v1, "hex");
  return a.length === b.length && crypto.timingSafeEqual(a, b);
}

const app = express();

// The raw body: the signature covers the exact bytes Chat33 sent.
app.post("/chat33-webhook", express.raw({ type: "application/json" }), (req, res) => {
  const rawBody = req.body.toString("utf8");
  if (!verifyChat33(rawBody, req.get("X-Chat33-Signature"))) return res.sendStatus(401);

  const event = JSON.parse(rawBody);
  if (event.event === "lead.captured" && !event.test) {
    // Save event.data.email, skip event.id values you already have.
  }
  res.sendStatus(200);
});

app.listen(3000);
Opciones

Cómo funciona la entrega

Qué hace Chat33 con cada contacto y qué debe responder tu endpoint.

Responde con un 2xx en menos de 10 segundos

Cualquier estado 2xx cuenta como entregado. Cualquier otra cosa, un tiempo de espera agotado a los 10 segundos o un error de red cuenta como fallo. Las redirecciones no se siguen, así que guarda la dirección final.

Los contactos fallidos se reintentan

Un contacto fallido se intenta de nuevo después de aproximadamente 1 minuto, 5 minutos, 30 minutos, 2 horas y 12 horas. Después aparece como Fallido, y Reintentar los fallidos en la tarjeta lo envía de nuevo. Una respuesta 429 significa esperar: Chat33 lo intenta de nuevo un minuto después sin gastar un reintento.

Los contactos de prueba se envían una vez

Enviar contacto de prueba hace un solo intento, no se reintenta y no aparece en el registro de entregas. Se envía incluso cuando Nuevos contactos no está marcado, así que márcalo antes de confiar en contactos reales.

El mismo webhook puede enviar DM

Con Nuevos DM marcado, la misma URL también recibe message.received por cada DM que la gente envía a tus cuentas conectadas, para que tu propio bot pueda responderlos. La referencia de la API describe ese evento y los endpoints de webhook.

Contactos que ya tienes

Enviar los contactos que ya tienes

Los contactos que recogiste antes de activar Nuevos contactos no se envían solos. Haz clic en Enviar contactos existentes en la tarjeta Zapier, Make, n8n, Google Sheets en Configuración, Integraciones y salen en los próximos minutos, con los mismos ids de antes, para que tu herramienta pueda omitir los que ya tiene.

Solución de problemas

Cuando no llega nada

Chat33 guarda cada contacto, así que basta con arreglar el webhook. No hay que recoger nada de nuevo.

Revisa la tarjeta Webhook de mensajes

La URL debe estar guardada y Nuevos contactos marcado. La tarjeta muestra la última entrega con su estado HTTP o el error. Usa Enviar contacto de prueba para ver la respuesta al instante.

Zapier dice que la app necesita una mejora de plan

Webhooks by Zapier no está en el plan gratis de Zapier. Mejora tu plan o usa Make o n8n, que pueden recibir webhooks en sus planes gratis.

Tu herramienta responde con un error

Una respuesta 4xx o 5xx es un fallo y el contacto se reintenta. En n8n la Test URL solo funciona mientras escuchas un evento de prueba: usa la Production URL con el flujo de trabajo activo. En Make, el escenario debe estar activado.

No se aceptó la dirección

Chat33 solo envía a direcciones https:// públicas. Un n8n autoalojado en localhost o en una red privada no puede recibir contactos. Quita todo lo que haya después de un # en la URL.

Los contactos están en Chat33 pero no en tu herramienta

Abre el Registro de entregas en la tarjeta Zapier, Make, n8n, Google Sheets. Cada contacto muestra su estado y el motivo. Los contactos de cuentas que el webhook no cubre se omiten, y los recogidos antes de activar Nuevos contactos necesitan Enviar contactos existentes.

No se le pidió el correo a nadie

Revisa la automatización. Debe estar activa y, cuando empieza con un comentario de Instagram, el paso Pedir correo debe ir antes del primer DM. Pedirlo después de un comentario de Facebook aún no está disponible.

Preguntas sobre el webhook de contactos

¿Hay una app de Chat33 en Zapier o Make?
Todavía no. Usas el disparador de webhook que tiene toda herramienta de automatización: Webhooks by Zapier, Catch Hook en Zapier, Custom webhook en Make, el nodo Webhook en n8n. Para n8n también hay un nodo oficial de Chat33 para publicar y otras acciones de la API.
¿Qué planes de Chat33 incluyen el webhook de contactos?
Todos, incluido Free. Tu herramienta de automatización puede necesitar un plan de pago propio, como Zapier para los webhooks.
¿Qué tan rápido llegan los contactos?
Normalmente a los pocos segundos de que la persona envía su correo. Si tu endpoint está caído, Chat33 conserva el contacto y lo intenta de nuevo.
¿Puedo enviar contactos a Google Sheets sin Zapier ni Make?
No directamente. Google Sheets no puede recibir un webhook por sí solo, así que una herramienta como Zapier, Make o n8n se pone en medio y agrega la fila.
¿Puede llegar dos veces el mismo contacto?
Una persona que da la misma dirección a la misma automatización se envía una vez. Un reintento o Enviar contactos existentes puede entregar un contacto de nuevo, con el mismo id, así que elimina duplicados por id o por data.email.
¿Puedo usar el webhook y Mailchimp o HubSpot al mismo tiempo?
Sí. Cada contacto nuevo va a cada destino conectado.
¿Cómo distingo un contacto de prueba de uno real?
Los contactos de prueba tienen "test": true en el nivel superior y la dirección ana@example.com. Los contactos reales no tienen el campo test.
Mascota de Chat33 sosteniendo un botón de Obtenerlo aquí

Convierte comentarios en
filas, registros y alertas.

Crea una cuenta gratis, conecta Instagram, agrega un paso Pedir correo y pega la URL de tu webhook.