Webhook de Number Insight

Cuando un job asíncrono de Number Insight se resuelve, Hablame te avisa con un webhook, así reaccionas al resultado sin hacer polling. Esta página documenta los eventos que emite el servicio y cómo procesarlos; los encuentras todos en el catálogo de eventos. El contrato general de webhooks (firma, headers, reintentos) está en Generalidades.

Catálogo de eventos

typeServicioCuándo
numberinsight.batch.completedNumber InsightUn job batch terminó correctamente.
numberinsight.batch.failedNumber InsightUn job batch falló de forma definitiva.

Evento numberinsight.batch.completed

Cuando un job asíncrono de Number Insight termina con éxito, llega este evento: sirve para activar la descarga del NDJSON resultante sin hacer polling.

payload del evento
{
  "id":         "5e3f2a7c-1d8b-4c19-9e6c-8e0f7d5a2c3e",
  "type":       "numberinsight.batch.completed",
  "version":    1,
  "service":    "numberinsight",
  "accountId":  123,
  "occurredAt": "2026-06-18T09:14:22+00:00",
  "data": {
    "jobId":     "4e2c8b91-3f12-4ad6-9b91-09e8e9c5e7a1",
    "count":     12450,
    "processed": 12450,
    "format":    "ndjson"
  }
}

La URL de descarga temporal no viaja en el evento (su vigencia es distinta de la firma del webhook). Llama a GET /api/v6/numberinsight/batch/{jobId} para obtener una URL de descarga temporal vigente.

El archivo descargado es NDJSON: una línea JSON por número.

numbers-out.ndjson
{"input":"3001234567","result":{"phoneNumber":{ … },"valid":true,"country":{ … },…}}
{"input":"6017430000","result":{"phoneNumber":{ … },"valid":true,"country":{ … },…}}
{"input":"+5491123456789","result":{"phoneNumber":{ … },"valid":true,"country":{ … },…}}

Cada línea tiene input (lo que enviaste sin tocar, con el orden original) y result (mismo objeto que la consulta 1:1).

Evento numberinsight.batch.failed

Si el job no se puede completar, llega este evento en lugar de completed. El data trae el jobId y un error con la causa.

payload del evento
{
  "id":         "7a1c9e4d-2b6f-4d3a-8c12-1f0e6d9b4a2c",
  "type":       "numberinsight.batch.failed",
  "version":    1,
  "service":    "numberinsight",
  "accountId":  123,
  "occurredAt": "2026-06-18T09:15:03+00:00",
  "data": {
    "jobId": "4e2c8b91-3f12-4ad6-9b91-09e8e9c5e7a1",
    "error": "no se pudo leer el archivo de entrada"
  }
}