Obtener detalles de aplicaciones mediante webhooks
Resumen
Hirevire no expone una API pública para obtener datos de aplicaciones. En su lugar, usa webhooks personalizados para recibir automáticamente cargas útiles completas de las aplicaciones cuando los candidatos envían sus respuestas o cambian entre etapas.
Esta guía te muestra cómo configurar webhooks, analizar las cargas útiles de las aplicaciones, incluidos los enlaces de video y audio, e integrarlas con herramientas de automatización como Make.com.
Los webhooks personalizados con cargas útiles avanzadas requieren el plan Agency. Los webhooks básicos están disponibles en el plan Professional.
Por qué usar webhooks en lugar de una API
Hirevire envía los datos de la aplicación a tu endpoint en tiempo real cuando ocurren eventos. Esto elimina la necesidad de consultar actualizaciones y garantiza que tus flujos de trabajo reciban la información del candidato inmediatamente después del envío.
Los webhooks entregan detalles completos de la aplicación, incluidos:
Información de contacto del solicitante y enlaces del currículum
Enlaces directos a respuestas de video y audio
Transcripciones generadas por IA en más de 90 idiomas
Archivos cargados y respuestas de texto
Cambios de etapa y metadatos
Configurar webhooks en Hirevire
Configura webhooks por oferta de trabajo para enviar los datos de la aplicación a tu endpoint.
Paso 1: Prepara tu endpoint
Tu endpoint del webhook debe aceptar solicitudes POST con cargas útiles JSON y devolver un código de estado 200. Hirevire reintenta automáticamente las entregas fallidas del webhook cuando tu endpoint no devuelve un código de estado 200.
Si usas Make.com, Zapier o herramientas similares, primero genera una URL de webhook desde su plataforma (se explica en la sección de Make.com más abajo).
Paso 2: Añade la URL del webhook a tu trabajo
Ve a Jobs y selecciona el trabajo que quieres monitorear
Haz clic en la pestaña Settings
Abre la sección Webhook
Pega la URL de tu endpoint (por ejemplo,
https://api.example.com/webhooks/applications)
Paso 3: Elige los disparadores
Selecciona cuándo Hirevire debe enviar datos a tu endpoint:
On new application: Envía la carga útil cuando un candidato completa y envía su evaluación
On stage change: Envía la carga útil cuando mueves manualmente a un candidato entre etapas después del envío
Puedes activar ambos disparadores al mismo tiempo.
Los webhooks no se activan para las etapas previas al envío. Los candidatos con estado "Invited" o "In-progress" aún no han enviado su solicitud, por lo que estas etapas no activan webhooks. Consulta "Understanding webhook triggers" más abajo para más detalles.
Paso 4: Activa los datos avanzados del webhook
Activa "Include answers, video urls and transcripts" para recibir detalles completos de la solicitud, incluidos enlaces a medios y transcripciones de IA. Sin esta configuración, solo recibirás metadatos básicos del solicitante.
Si la carga útil de tu webhook no incluye URLs de video ni datos de transcripción, verifica que el selector avanzado esté activado. Este es el problema de configuración más común.
Paso 5: Prueba y guarda
Haz clic en Test trigger para enviar una carga útil de ejemplo a tu endpoint. Verifica que tu sistema reciba y procese los datos correctamente y luego haz clic en Save.
Supervisa el estado de entrega en la página de registros. Las entregas fallidas mostrarán detalles del error.
Entender los disparadores de webhook
Los webhooks solo se activan para solicitudes enviadas, no para la actividad del candidato antes del envío. Esto evita que datos duplicados o incompletos lleguen a tus integraciones.
Qué activa los webhooks
New submission event: Se activa cuando un candidato completa su evaluación y hace clic en enviar. La solicitud pasa del estado "In-progress" a "New" o "To be reviewed". La carga útil del webhook incluye todas las respuestas, las URLs de los medios y las transcripciones.
Stage change event: Se activa cuando mueves manualmente una solicitud entre etapas después del envío. Esto incluye pasar de "To be reviewed" a etapas personalizadas como "Interview" o "Rejected." La carga útil incluye la etapa anterior y la actual.
Qué NO activa los webhooks
Estos estados de candidato no activan webhooks:
Invited: El candidato recibió una invitación, pero no ha शुरूado la solicitud. Consulta Bulk Invite candidates para ver cómo funciona esta etapa.
In-progress: El candidato empezó a completar los detalles, pero no ha enviado todas las respuestas. Consulta Why do we have a lot of applications in "In-Progress" para más contexto.
Los webhooks solo se activan después de que un candidato envía su solicitud completa o cuando cambias la etapa de una solicitud enviada.
Si necesitas hacer seguimiento de candidatos invitados o solicitudes en progreso, exporta estos datos manualmente en CSV desde el panel de tu trabajo o usa la función de invitación masiva para gestionar el alcance por separado.
Ejemplos de cargas útiles de webhook
Aquí tienes ejemplos de cargas útiles para cada tipo de disparador, para ayudarte a crear integraciones.
New submission payload:
{
"id": 12345,
"jobID": 789,
"jobTitle": "Senior Developer",
"applicantName": "John Doe",
"applicantEmail": "[email protected]",
"applicantContactNumber": "+1234567890",
"customFieldValue": "Referral code ABC",
"applicantResumeURL": "https://storage.hirevire.com/resumes/resume.pdf",
"shareableURL": "https://app.hirevire.com/shared/links/abc123",
"submittedOn": "2025-01-15T10:30:00Z",
"previousStage": null,
"currentStage": "New",
"answers": [
{
"question": {
"id": "q_123",
"text": "Tell us about yourself",
"responseType": "Video"
},
"id": 456,
"url": "https://storage.hirevire.com/videos/candidate-response.mp4",
"transcript": "I have 5 years of experience in full-stack development...",
"numberOfRetakes": 2
},
{
"question": {
"id": "q_124",
"text": "Why do you want this role?",
"responseType": "Text"
},
"id": 457,
"text": "I'm passionate about building scalable applications..."
}
]
}Stage change payload:
{
"id": 12345,
"jobID": 789,
"jobTitle": "Senior Developer",
"applicantName": "John Doe",
"applicantEmail": "[email protected]",
"applicantContactNumber": "+1234567890",
"customFieldValue": "Referral code ABC",
"applicantResumeURL": "https://storage.hirevire.com/resumes/resume.pdf",
"shareableURL": "https://app.hirevire.com/shared/links/abc123",
"submittedOn": "2025-01-15T10:30:00Z",
"previousStage": "New",
"currentStage": "Interview",
"answers": [
{
"question": {
"id": "q_123",
"text": "Tell us about yourself",
"responseType": "Video"
},
"id": 456,
"url": "https://storage.hirevire.com/videos/candidate-response.mp4",
"transcript": "I have 5 years of experience in full-stack development...",
"numberOfRetakes": 2
},
{
"question": {
"id": "q_124",
"text": "Why do you want this role?",
"responseType": "Text"
},
"id": 457,
"text": "I'm passionate about building scalable applications..."
}
]
}La diferencia clave: previousStage es null para nuevas solicitudes y tiene valor para cambios de etapa.
Entender las cargas útiles del webhook
Cuando se activa un webhook, Hirevire envía una solicitud POST con una carga útil JSON que contiene la aplicación completa.
Campos clave de la carga útil
Metadatos del solicitante:
id: ID único de la aplicaciónapplicantName,applicantEmail,applicantContactNumber: Datos de contactoapplicantResumeURL: Enlace directo de descarga del currículum cargadoshareableURL: Enlace para ver la solicitud completa en HireviresubmittedOn: Marca de tiempo ISO 8601currentStage/previousStage: Información de la etapa del flujo de trabajo
Array de respuestas: Cada objeto de respuesta contiene:
question.textyquestion.responseType: Qué se preguntó y cómourl: Enlace directo al archivo de video o audio (formato MP4/WebM)transcript: Transcripción de texto generada por IA si está habilitadatext: Contenido de la respuesta en textofileURLs: Array de enlaces a archivos cargadosnumberOfRetakes: Cuántas veces volvió a grabar el candidato
Analiza el array answers según responseType para manejar distintos formatos de pregunta. Las respuestas de video y audio usan el campo url, mientras que las respuestas de texto usan text y las cargas de archivos usan fileURLs.
Integrar con Make.com
Para una guía completa paso a paso sobre cómo conectar Hirevire a Make.com (anteriormente Integromat), consulta Connect Hirevire to Make.com.
Esta guía cubre la generación de tu clave de API, la creación de escenarios en Make, la configuración de webhooks y las pruebas de cargas útiles.
Descargar y almacenar archivos multimedia
Las URLs de video y audio en las cargas útiles del webhook son enlaces directos de descarga. Puedes obtener estos archivos de forma programática o manual.
Buenas prácticas para el manejo de medios
Descarga inmediata: Los archivos multimedia expiran según el período de retención de tu plan (90 días en todos los planes). Descarga las grabaciones importantes a tu propio almacenamiento tan pronto como lleguen los webhooks.
Almacenamiento seguro: Guarda los videos de los candidatos con los controles de acceso y el cifrado adecuados. Sigue las directrices del RGPD si procesas candidatos de la UE.
Consideraciones de ancho de banda: Los archivos de video pueden ser grandes (5-50 MB por grabación). Usa tareas en segundo plano o colas para descargar archivos de forma asíncrona sin bloquear tu endpoint del webhook.
Verificar descargas: Revisa los códigos de respuesta HTTP y el tamaño de los archivos para asegurarte de que las transferencias se completaron correctamente.
Para opciones de descarga manual y flujos de trabajo en el navegador, consulta Cómo descargar respuestas de video y audio de las aplicaciones.
Solución de problemas comunes
La carga útil del webhook no incluye URLs de video
Asegúrate de que el selector "Include answers, video urls and transcripts" esté activado en la configuración del webhook de tu trabajo. Los webhooks básicos solo envían metadatos del solicitante sin detalles de las respuestas.
El endpoint no recibe datos
Revisa lo siguiente:
La URL de tu endpoint es accesible públicamente mediante HTTPS
Tu servidor devuelve un código de estado 200 en las solicitudes POST
Revisa la página de registros en Hirevire para ver mensajes de error
Prueba tu endpoint con herramientas como Postman o curl usando la carga útil de ejemplo
Los videos caducaron o los enlaces devuelven 404
Los archivos multimedia se eliminan después del período de retención de tu plan. Actualiza a un plan con mayor retención o compra el complemento de extensión de almacenamiento ($9 por trabajo) para conservar los archivos 30 días adicionales más allá del límite de tu plan.
Los campos de transcripción están vacíos
Las transcripciones de IA están incluidas en todos los planes de pago. Si las transcripciones no aparecen, verifica que estén activadas en la configuración de preguntas de tu trabajo.
Webhook desactivado automáticamente tras varios fallos
Después de 5 entregas fallidas consecutivas, Hirevire desactiva automáticamente el webhook para proteger tu endpoint. Cuando esto ocurra, verás un banner en la configuración del webhook del trabajo que dirá:
Este webhook se desactivó automáticamente después de varios fallos
Si se muestra una marca de tiempo, incluirá la fecha y la hora en que se desactivó el webhook.
Hirevire también envía al propietario de la organización un correo electrónico con el asunto Hirevire: Webhook disabled for [Job Title] y el último error registrado.
Volver a activar un webhook desactivado:
Ve a Jobs y selecciona el trabajo afectado
Haz clic en la pestaña Settings
Abre la sección Webhook
Revisa el banner de estado desactivado y confirma que tu endpoint esté corregido
Haz clic en Re-enable
Hirevire vuelve a activar el webhook con una confirmación de Webhook re-enabled.
Reintentar una entrega fallida de webhook
Puedes reintentar entregas individuales de webhook fallidas desde los registros del panel:
Abre la página de registros del webhook
Filtra por Failed o Retrying
Selecciona las entregas que quieres reintentar
Elige la acción de reintento
También puedes filtrar los registros por Pending, Success o Failed para revisar el historial de entregas.
Los reintentos de webhook, la desactivación automática, la reactivación y las acciones de reintento en los registros están disponibles en todos los planes de pago.
Hirevire reintenta automáticamente las entregas fallidas del webhook. Si un webhook sigue fallando después de varios intentos, se desactiva automáticamente para proteger tu sistema. Corrige el endpoint y vuelve a activar el webhook desde la configuración del trabajo para reanudar la entrega.
Verificar firmas de webhook
Cuando configuras un secreto de firma en el webhook de un trabajo, Hirevire firma cada entrega con HMAC-SHA256. Tu endpoint debe volver a calcular la firma a partir del cuerpo sin procesar y compararla con los encabezados de la solicitud antes de confiar en la carga útil.
Configurar un secreto de firma
La firma se configura por trabajo en la misma configuración de Webhook que la URL y los disparadores.
Abre Jobs, selecciona el trabajo y luego ve a Settings → Webhook.
En Signing secret, haz clic en Generate o pega tu propio secreto. Los secretos generados usan el prefijo
whsec_seguido de 48 caracteres hexadecimales.Haz clic en Copy para guardar el secreto en tu receptor. Deja el campo en blanco para desactivar la firma.
Haz clic en Save.
Trata el secreto de firma como una contraseña. Cualquiera que tenga el secreto puede falsificar solicitudes que parezcan entregas de Hirevire.
Encabezados que envía Hirevire
Cuando se establece un secreto de firma, cada POST del webhook incluye estos encabezados:
Encabezado | Valor |
|---|---|
| Marca de tiempo Unix en segundos cuando se firmó la solicitud |
|
|
El valor t en X-Hirevire-Signature coincide con X-Hirevire-Timestamp. El valor sha256 es el HMAC codificado en hexadecimal de la cadena firmada descrita abajo.
Cómo se construye la firma
Hirevire construye una cadena y luego la firma:
Toma la marca de tiempo Unix (segundos).
Añade un solo punto (
.).Añade el cuerpo JSON bruto exactamente como se envió (no reformatees ni vuelvas a serializar el JSON).
Calcula
HMAC-SHA256de esa cadena con tu secreto de firma y codifica el resultado en hexadecimal.
En resumen: cadena firmada = timestamp + "." + rawBody, luego hex(HMAC-SHA256(secret, signedString)).
Pasos de verificación en tu endpoint
Lee el cuerpo bruto de la solicitud como bytes o como cadena antes de cualquier análisis JSON que cambie los espacios en blanco o el orden de las claves.
Lee
X-Hirevire-Timestamp.Lee
X-Hirevire-Signaturey extrae el valorsha256=del formatot=...,sha256=....Calcula
HMAC-SHA256sobretimestamp + "." + rawBodyusando tu secreto de firma, como un hash hexadecimal.Compara tu hash con el valor
sha256del encabezado. Acepta la solicitud solo cuando coincidan.
Ejemplo de verificación en Node.js:
const crypto = require("crypto");
function verifyHirevireSignature({ rawBody, timestampHeader, signatureHeader, secret }) {
const expected = crypto
.createHmac("sha256", secret)
.update(`${timestampHeader}.${rawBody}`)
.digest("hex");
// signatureHeader format: t=<timestamp>,sha256=<hex>
const match = /sha256=([a-f0-9]+)/i.exec(signatureHeader || "");
const provided = match ? match[1] : "";
if (!provided || provided.length !== expected.length) {
return false;
}
return crypto.timingSafeEqual(
Buffer.from(provided, "utf8"),
Buffer.from(expected, "utf8")
);
}
// Express-style handler: use the raw body string, not JSON.stringify(req.body)
app.post("/webhooks/hirevire", express.raw({ type: "application/json" }), (req, res) => {
const rawBody = req.body.toString("utf8");
const ok = verifyHirevireSignature({
rawBody,
timestampHeader: req.get("X-Hirevire-Timestamp"),
signatureHeader: req.get("X-Hirevire-Signature"),
secret: process.env.HIREVIRE_WEBHOOK_SECRET,
});
if (!ok) {
return res.status(401).send("Invalid signature");
}
const payload = JSON.parse(rawBody);
// process payload
res.status(200).send("ok");
});Ejemplo de verificación en Python:
import hmac
import hashlib
import re
def verify_hirevire_signature(raw_body: bytes | str, timestamp: str, signature_header: str, secret: str) -> bool:
if isinstance(raw_body, bytes):
raw_body = raw_body.decode("utf-8")
expected = hmac.new(
secret.encode("utf-8"),
f"{timestamp}.{raw_body}".encode("utf-8"),
hashlib.sha256,
).hexdigest()
match = re.search(r"sha256=([a-f0-9]+)", signature_header or "", re.I)
provided = match.group(1) if match else ""
return hmac.compare_digest(provided, expected)Usa Test trigger en la configuración del webhook del trabajo después de guardar un secreto de firma. La prueba POST se firma de la misma manera que las entregas reales cuando hay un secreto configurado.
Seguridad y retención de datos
Las cargas útiles del webhook contienen información sensible de los candidatos. Sigue estas pautas:
Usa endpoints HTTPS: Cifra los datos en tránsito para evitar su interceptación.
Verifica las firmas: Configura un secreto de firma y valida
X-Hirevire-SignatureyX-Hirevire-Timestampen cada solicitud usando los pasos de verificación anteriores.Limita la retención de datos: Guarda los videos y la información personal de los candidatos solo el tiempo necesario para tomar decisiones de contratación y luego elimínalos según los requisitos del RGPD y de privacidad.
Controles de acceso: Restringe quién puede ver las grabaciones y transcripciones de candidatos en tus sistemas.
Registros de auditoría: Registra quién accedió a los datos de la aplicación y cuándo.
Hirevire elimina automáticamente los datos de los candidatos cuando vence tu período de retención. Comunica tus prácticas de manejo de datos a los candidatos en tu oferta de empleo o política de privacidad.
Mejoras recientes de los webhooks
Hirevire mejoró recientemente la funcionalidad de los webhooks con una estructura de carga útil y opciones de configuración mejoradas. Revisa el registro de cambios de mejoras de webhooks personalizados para ver las últimas novedades.
Siguientes pasos
Configura webhooks para tus trabajos activos
Prueba las cargas útiles con tus herramientas de automatización
Descarga a tu almacenamiento los videos importantes de candidatos
Explora integraciones nativas como Ashby ATS para una integración más estrecha del flujo de trabajo