Mapa-Sistema · Integración CRM

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

¿Email ya existe en MigraNet?
SÍRegistro existente — se actualiza

Actualizar

Merge por email

OK 200

Mismo ID

NORegistro nuevo — se crea

Crear

Nuevo CRMLead

OK 201

Nuevo ID

Flujo 2 · Selección con IA (candidato → oferta)

Pipeline automático desde la candidatura hasta la videollamada

1

Oferta publicada

Empresa crea oferta con IA

2

Candidaturas recibidas

Score match automático 0-100

3

Entrevista IA enviada

Cuestionario por email al candidato

4

IA puntúa respuestas

Score 0-100 + resumen ejecutivo

5

Ranking generado

Finalista / Seguir / Descartar

6

Videollamada

Agendador automático con zonas horarias

7

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

¿Visado aprobado?
SÍEl candidato viaja e se incorpora

Viaje

Fase 6 — a España

Cobros

Fase 7 — cuotas

Portabilidad

Fase 8 — QR entre empresas

NOSe cancela o recurre

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

POST /functions/crm-webhook

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

X-CRM-Token: <TOKEN_SECRETO>

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

lead.created→ CRMLead

Nuevo lead comercial (empresa interesada en contratar)

CampoTipoReq.Descripción
nombrestringsíNombre del contacto o razón social
emailstringnoEmail de contacto
telefonostringnoTeléfono
empresastringnoEmpresa a la que pertenece
cargostringnoCargo del contacto
fuenteenumnopatronal | web | referido | llamada_entrante | importacion | manual
patronal_idstringnoID de la patronal en MigraNet
patronal_nombrestringnoNombre de la patronal origen
estadoenumnocandidato (default) | candidato_convertido | cuenta | cliente | descartado
paisstringnoPaís
ciudadstringnoCiudad
tagsstring[]noEtiquetas 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 event dentro 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 array leads admite hasta 500 registros por llamada.
  • 5. Si se recibe un event desconocido, 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.