MigraNet — Mapa del Sistema
Documento único para el equipo del CRM externo: cómo funciona la plataforma, qué flujos existen y qué webhook debe enviar para inyectar leads, cuentas y candidatos.
Qué es MigraNet
MigraNet es la plataforma de incorporación laboral internacional que conecta talento hispanoamericano con empresas españolas. No es un CRM: es el sistema que recibe los datos comerciales del CRM externo y los transforma en ofertas, selección, visado y cobros.
Recibe
Leads y cuentas de empresas que quieren contratar
Procesa
Selección IA, plan de incorporación, expediente y visado
Devuelve
Estado, IDs y resultado de cada registro inyectado
Flujos de la plataforma — vista resumen
Tres flujos conectados. El webhook del CRM alimenta el primero; los otros dos ocurren dentro de MigraNet.
Flujo 1 · Ingesta del CRM externo (webhook)
El CRM externo envía leads y cuentas a MigraNet automáticamente
CRM Externo
Patronal / comercial
Webhook
POST + X-CRM-Token
MigraNet
CRMLead / CRMCuenta
Flujo 2 · Pipeline comercial interno (B2B)
Empresas que quieren contratar — de lead frío a cliente multiproyecto
Lead frío
1er contacto
Lead obtenido
interés confirmado
Cuenta
negociando
Cliente
contrato firmado
Proyecto
multiproyecto
Flujo 3 · Plan de Incorporación Internacional
Candidato hispano → selección → visado → incorporación laboral
Oferta
Fase 1
Selección
Fase 2
Firma
Fase 4
Visado
Fase 6
Cobros
Fase 7
Portabilidad
Fase 8
Cómo se conectan los flujos
El Flujo 1 alimenta el Flujo 2: cada lead o cuenta que llega por webhook entra al pipeline comercial. Cuando una cuenta se convierte en cliente (Fase 0 del Flujo 3), publica ofertas y arranca el Plan de Incorporación para candidatos hispanos. El webhook es la única vía de entrada automatizada desde sistemas externos.
Diagramas de flujo detallados
Arquitectura técnica, ingesta con validación de duplicados, selección con IA y plan de incorporación con bifurcación de visado.
Arquitectura técnica del sistema
Capas de MigraNet: del frontend al CRM externo
Frontend
React + Vite
API Base44
SDK + Auth
Base de datos
Entidades + RLS
Integraciones IA
InvokeLLM + VoIP
Webhooks
CRM externo
Flujo 1 · Ingesta desde CRM externo
El CRM envía datos por webhook a un endpoint único
CRM Externo
Patronal / comercial
Webhook POST
X-CRM-Token
MigraNet API
Endpoint único
Validación de duplicados (idempotencia)
El email es la clave de deduplicación — nunca se duplica un registro
Actualizar
Merge por email
OK 200
Mismo ID
Crear
Nuevo CRMLead
OK 201
Nuevo ID
Flujo 2 · Selección con IA (candidato → oferta)
Pipeline automático desde la candidatura hasta la videollamada
Oferta publicada
Empresa crea oferta con IA
Candidaturas recibidas
Score match automático 0-100
Entrevista IA enviada
Cuestionario por email al candidato
IA puntúa respuestas
Score 0-100 + resumen ejecutivo
Ranking generado
Finalista / Seguir / Descartar
Videollamada
Agendador automático con zonas horarias
Candidato seleccionado
Pasa al Plan de Incorporación
Flujo 3 · Plan de Incorporación — fases previas
Del candidato seleccionado al expediente migratorio
Candidato seleccionado
Fase 0
Precontrato firmado
Fase 4 — anexo descuentos
Expediente migratorio
Fase 5 — documentación
Decisión crítica: visado
La aprobación del visado determina si el candidato viaja o se cancela el proceso
Viaje
Fase 6 — a España
Cobros
Fase 7 — cuotas
Portabilidad
Fase 8 — QR entre empresas
Cancelado
Reembolso si aplica
Recurso
Revisión de expediente
Webhook que el CRM debe enviar
Contrato de integración. El CRM hace un POST por cada evento, con el token en cabecera y el payload según el tipo de registro.
Endpoint
URL completa: https://<tu-dominio>/functions/crm-webhook
Una sola ruta, método POST, application/json. El campo event dentro del body determina la acción.
Autenticación
Cabecera obligatoria con el token compartido. Sin token o con token inválido → 401 Unauthorized. El token se proporciona por canal seguro.
Estructura del body
{
"event": "<nombre_del_evento>",
"data": { ...payload según el evento... }
}Eventos disponibles
Nuevo lead comercial (empresa interesada en contratar)
| Campo | Tipo | Req. | Descripción |
|---|---|---|---|
| nombre | string | sí | Nombre del contacto o razón social |
| string | no | Email de contacto | |
| telefono | string | no | Teléfono |
| empresa | string | no | Empresa a la que pertenece |
| cargo | string | no | Cargo del contacto |
| fuente | enum | no | patronal | web | referido | llamada_entrante | importacion | manual |
| patronal_id | string | no | ID de la patronal en MigraNet |
| patronal_nombre | string | no | Nombre de la patronal origen |
| estado | enum | no | candidato (default) | candidato_convertido | cuenta | cliente | descartado |
| pais | string | no | País |
| ciudad | string | no | Ciudad |
| tags | string[] | no | Etiquetas libres |
Ejemplo · lead.created
POST /functions/crm-webhook HTTP/1.1
Host: tu-dominio.base44.app
Content-Type: application/json
X-CRM-Token: <TOKEN_SECRETO>
{
"event": "lead.created",
"data": {
"nombre": "María González",
"email": "maria@logistica-sur.es",
"telefono": "+34 600 123 456",
"empresa": "Logística Sur S.L.",
"cargo": "Directora de RRHH",
"fuente": "patronal",
"patronal_id": "abc123",
"patronal_nombre": "AELMO Cádiz",
"ciudad": "Cádiz",
"tags": ["transporte", "20 vacantes"]
}
}Ejemplo · patronal.bulk_import
POST /functions/crm-webhook HTTP/1.1
Host: tu-dominio.base44.app
Content-Type: application/json
X-CRM-Token: <TOKEN_SECRETO>
{
"event": "patronal.bulk_import",
"data": {
"patronal_id": "abc123",
"patronal_nombre": "AELMO Cádiz",
"leads": [
{ "nombre": "Empresa A", "email": "rrhh@empresa-a.es", "telefono": "+34 600 1" },
{ "nombre": "Empresa B", "email": "info@empresa-b.es", "telefono": "+34 600 2" }
]
}
}Respuesta de MigraNet
200 OK — registro creado
{ "ok": true, "id": "<entity_id>", "event": "lead.created" }400 Bad Request — payload inválido
{ "ok": false, "error": "Falta el campo obligatorio: nombre" }401 Unauthorized — token ausente o inválido
{ "ok": false, "error": "Token inválido" }Reglas de oro para el CRM
- 1. Una sola URL para todo: el campo
eventdentro del body selecciona la acción. - 2. El token va siempre en la cabecera
X-CRM-Token, nunca en el body ni en la URL. - 3. Para
candidate.referred, el email es la clave de deduplicación: si ya existe, se actualiza en lugar de duplicar. - 4. En
patronal.bulk_import, el arrayleadsadmite hasta 500 registros por llamada. - 5. Si se recibe un
eventdesconocido, MigraNet responde 400 sin modificar nada. - 6. Idempotencia: reenviar el mismo lead no lo duplica si el email ya existe (mismo comportamiento que el flujo manual).
¿Dudas con la integración?
Revisa el mapa de flujos completo o contacta con el equipo de plataforma.
