Primeros pasos¶
De cero a tu primera campaña de prueba en unos 5 minutos. Esta guía asume que ya tienes —o estás por solicitar— tu API Key.
A lo largo de la guía usamos la base URL canónica mediante la variable API_BASE_URL:
Paso 1 — Obtén tu API Key¶
Las API Keys no son self-serve: no se generan desde un panel público. Las emite un administrador de tu organización y se muestran una sola vez al momento de crearlas.
👉 Solicita tu API Key a tu contacto de Neuron o al administrador de tu organización.
Tu key tiene este formato:
Cada key tiene un scope asociado (read o full). Para lanzar campañas necesitas una key
con scope full. Más detalle en Autenticación.
Guarda la key en un gestor de secretos o variable de entorno. Nunca la incrustes en código de frontend ni la subas a un repositorio.
Paso 2 — Prueba la autenticación con un GET simple¶
El test más rápido para confirmar que tu key funciona es listar los agents de tu organización.
Es una lectura (GET), así que funciona con cualquier scope:
Respuesta esperada:
{
"success": true,
"agents": [
{ "agent_id": "agent_abc123", "agent_name": "Cobranza Español", "agent_type": "collections" }
]
}
- Si ves la lista de agents → tu key está activa. Anota el
agent_idque vas a usar. - Si recibes
401→ la key es inválida o falta el headerX-API-Key. - Si
agentsviene vacío → tu organización todavía no tiene agents asignados; contacta a tu equipo de Neuron.
(Ver el catálogo completo de errores en Errores y troubleshooting.)
Paso 3 — Descarga la plantilla CSV¶
Cada tipo de campaña tiene su propio formato de columnas. Descarga la plantilla del tipo que vas a usar:
curl "$API_BASE_URL/api/csv-template?type=collections" \
-H "X-API-Key: nrn_live_abcdef1234567890abcdef1234567890" \
-o plantilla.csv
Columnas requeridas por tipo:
Tipo (type) |
Columnas requeridas |
|---|---|
collections (default) |
to_number, lead_id, client_name, debt |
sdr |
to_number, lead_id, client_name |
cx |
to_number, lead_id, client_name |
interviewer |
to_number, lead_id, client_name, position |
to_number: teléfono en formato E.164 (ej.+525512345678).lead_id: identificador único de cada contacto.- Las columnas extra que agregues se preservan y se pasan al motor de llamadas.
- Las filas sin
to_numbero sinlead_idse saltan.
Paso 4 — Lanza una primera campaña de prueba (1 contacto)¶
⚠️ No existe modo sandbox ni dry-run. Un
startexitoso dispara llamadas reales de inmediato. Para probar sin impacto, usa una lista de 1 solo contacto con tu propio número, fuera del horario productivo.El procedimiento seguro completo está en la receta “Probar sin impacto” (recipe 02).
Ejemplo mínimo con un único contacto (pon tu propio número en to_number):
curl -X POST "$API_BASE_URL/api/campaign/start" \
-H "X-API-Key: nrn_live_abcdef1234567890abcdef1234567890" \
-H "Content-Type: application/json" \
-d '{
"name": "Prueba de integración",
"csv_content": "to_number,lead_id,client_name,debt\n+525512345678,L001,Prueba,100",
"agent_id": "agent_abc123",
"campaign_type": "collections"
}'
Respuesta esperada:
{
"success": true,
"campaign_id": 123,
"total_leads": 1,
"agent_id": "agent_abc123",
"campaign_type": "collections",
"message": "Campaign 'Prueba de integración' started"
}
Guarda el campaign_id: lo vas a usar para monitorear y consultar resultados.
Mientras corre, puedes ver el estado en tiempo real:
curl "$API_BASE_URL/api/campaign/status" \
-H "X-API-Key: nrn_live_abcdef1234567890abcdef1234567890"
{
"success": true,
"status": { "state": "running", "campaign_id": 123, "active_calls": 1, "queue_size": 0 },
"campaign": { "...": "..." },
"global_status": { "...": "..." }
}
Paso 5 — Consulta los resultados (polling)¶
Los resultados se obtienen consultando los endpoints de analytics (no hay push por
webhooks todavía). Filtra por tu campaign_id y pagina con el cursor:
curl "$API_BASE_URL/api/analytics/calls?campaign_ids=123&limit=100" \
-H "X-API-Key: nrn_live_abcdef1234567890abcdef1234567890"
{
"success": true,
"calls": [
{
"call_id": "call_abc",
"campaign_id": 123,
"client_name": "Prueba",
"call_status": "completed",
"call_outcome": "promised_payment",
"sentiment": "positive",
"payment_promised": true,
"summary": "..."
}
],
"pagination": { "limit": 100, "count": 1, "has_more": false, "next_cursor": null }
}
Para campañas grandes, repite el GET pasando cursor=<next_cursor> hasta que has_more sea
false. El patrón completo de polling y paginación está en las
recetas.
Siguientes pasos¶
- Autenticación — scopes, JWT de sesión y buenas prácticas.
- Endpoints — referencia detallada de cada endpoint.
- Recetas — flujos completos: probar sin impacto, paginar resultados, etc.
- Límites de uso — cuántas requests por minuto y cómo manejar el
429.