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:
Cabecera:
Cuerpo:
POSTCabecera:
Content-Type: application/jsonCuerpo:
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
| Campo | Tipo | Descripción |
|---|---|---|
answers | array | Respuestas a las preguntas del quiz |
contacts | object | Datos de contacto |
created | string | Fecha del lead, en formato dd.mm.aaaa hh:mm |
extra | object | UTM, cookies, URL de la página, referer y descuento |
result | object | null | Resultado del quiz (descuento y similares) |
id | number | ID del lead en LeadForms nuevo |
quizId | number | ID del quiz nuevo |
quizDurationSeconds | number | Tiempo que se tardó en completar el quiz, en segundos nuevo |
Campos de answers[]
| Campo | Descripción |
|---|---|
q | Texto de la pregunta |
questionId | ID de la pregunta |
a | Array de respuestas (cadenas) |
Campos de contacts
| Campo | Descripción |
|---|---|
name | Nombre |
phone | Teléfono |
email | |
address | Dirección nuevo |
text | Comentario o texto libre nuevo |
messenger | Mensajería: {"type": "telegram", "value": "@username"} nuevo |
messengerName | Nombre cuando el contacto llega por mensajería nuevo |
Tipos
messenger.type: telegram, whatsapp, viber, vk, messenger, instagram, teams, max, wechat, phone.Campos de result
| Campo | Descripción |
|---|---|
value | Valor (por ejemplo, el monto del descuento) |
title | Título |
description | Descripción |
Campos de extra
| Campo | Descripción |
|---|---|
href | URL de la página desde la que se envió el lead |
ref | Referer |
utm | Etiquetas UTM (objeto) |
cookies | Cookies (objeto) |
discount | Descuento, 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.