Inicio Guías Webhooks

Cómo integrar el quiz con webhooks

Si usas tu propio CRM, tu aplicación o servicios para los que todavía no tenemos integración, la vía es el webhook: LeadForms envía los datos de cada lead nuevo a la URL que indiques.
Configuración
En el panel abre el quiz → «Ajustes»«Integraciones» → tarjeta Webhooks. Indica la URL a la que se enviará la petición POST.
Para probar puedes usar webhook.site.
Importante: tu receptor debe responder con un estado HTTP correcto (200, 204 y similares).
Formato de la petición
Método: POST
Cabecera: Content-Type: application/json
Cuerpo: JSON
Los campos antiguos se mantienen tal cual. Los nuevos solo aparecen si existen en ese lead, así que las integraciones hechas con el formato anterior siguen funcionando.
Ejemplo de payload completo
{
  "id": 12345,
  "quizId": 611,
  "answers": [
    {"q": "Pregunta 1", "questionId": 10, "a": ["Opción 2"]},
    {"q": "Pregunta 2", "questionId": 11, "a": ["Opción 3"]}
  ],
  "contacts": {
    "name": "Carlos",
    "phone": "79991234567",
    "email": "example@gmail.com",
    "address": "Ciudad de México, Av. Ejemplo 1",
    "text": "Quiero una asesoría",
    "messenger": {"type": "telegram", "value": "@username"},
    "messengerName": "Carlos"
  },
  "created": "17.08.2019 22:41",
  "quizDurationSeconds": 95,
  "result": {
    "value": "15%",
    "title": "Tu descuento",
    "description": "Completa tu solicitud"
  },
  "extra": {
    "href": "https://example.com/page",
    "ref": "https://google.com",
    "utm": {"utm_source": "google"},
    "cookies": {
      "_ga": "GA1.2.477745229.1562102022",
      "_ym_uid": "1562107156134812542"
    }
  }
}
Campos del nivel superior
CampoTipoDescripción
answersarrayRespuestas a las preguntas del quiz
contactsobjectDatos de contacto
createdstringFecha del lead, en formato dd.mm.aaaa hh:mm
extraobjectUTM, cookies, URL de la página, referer y descuento
resultobject | nullResultado del quiz (descuento y similares)
idnumberID del lead en LeadForms nuevo
quizIdnumberID del quiz nuevo
quizDurationSecondsnumberTiempo que se tardó en completar el quiz, en segundos nuevo
Campos de answers[]
CampoDescripción
qTexto de la pregunta
questionIdID de la pregunta
aArray de respuestas (cadenas)
Campos de contacts
CampoDescripción
nameNombre
phoneTeléfono
emailEmail
addressDirección nuevo
textComentario o texto libre nuevo
messengerMensajería: {"type": "telegram", "value": "@username"} nuevo
messengerNameNombre cuando el contacto llega por mensajería nuevo
Tipos messenger.type: telegram, whatsapp, viber, vk, messenger, instagram, teams, max, wechat, phone.
Campos de result
CampoDescripción
valueValor (por ejemplo, el monto del descuento)
titleTítulo
descriptionDescripción
Campos de extra
CampoDescripción
hrefURL de la página desde la que se envió el lead
refReferer
utmEtiquetas UTM (objeto)
cookiesCookies (objeto)
discountDescuento, si el quiz lo tiene configurado
Formulario de contacto en dos pasos
Si el quiz tiene el formulario en dos pasos:
• El webhook sale cuando el lead está completo, con todos los pasos recogidos.
• Si alguien rellena solo el primer paso y no vuelve, el lead puede salir unos 60 segundos después con los datos parciales.
Ejemplo de receptor en PHP
<?php
$data = json_decode(file_get_contents('php://input'), true);

$answers = $data['answers'] ?? [];
$contacts = $data['contacts'] ?? [];

$phone = $contacts['phone'] ?? null;
$email = $contacts['email'] ?? null;
$name = $contacts['name'] ?? ($contacts['messengerName'] ?? null);
$messenger = $contacts['messenger'] ?? null; // ['type' => 'telegram', 'value' => '@username']
$address = $contacts['address'] ?? null;
$comment = $contacts['text'] ?? null;

$createdDate = strtotime($data['created'] ?? 'now');
$utm = $data['extra']['utm'] ?? [];
$result = $data['result'] ?? null;
$quizDurationSeconds = $data['quizDurationSeconds'] ?? null;
$leadId = $data['id'] ?? null;
$quizId = $data['quizId'] ?? null;

// Tu lógica de procesamiento...

http_response_code(200);
exit;
Compatibilidad con versiones anteriores
Las integraciones que solo leen answers, contacts.name/phone/email, created, extra siguen funcionando. Los campos nuevos (address, text, messenger, quizDurationSeconds, id, quizId, result) se pueden usar cuando haga falta.

¿Te quedan dudas? Escríbenos

Nombre *
* Campo obligatorio
Correo electrónico *
* Campo obligatorio
Mensaje
¡Escríbenos!
Respondemos en 30 segundos