Preguntas frecuentes (FAQ)¶
⚠️ BORRADOR — validar/expandir con preguntas reales de soporte.
Estas preguntas se derivaron de la documentación de la API y del material de habilitación. Cuando lleguen las primeras consultas reales de clientes que integran la API, hay que revisar las respuestas, ajustar el wording y agregar los casos que falten.
Esta página responde las dudas más comunes de quienes integran la API de campañas de llamadas con AI. Todos los ejemplos usan la URL base de Producción:
Si tu pregunta no está aquí, contacta a tu equipo de soporte.
Autenticación y acceso¶
1. ¿Cómo obtengo una API Key?¶
La emisión de API Keys no es self-serve: no se generan desde el panel. Las crea un administrador de tu organización (con verificación en dos pasos) y la key se muestra una sola vez al momento de crearse, así que guárdala en un lugar seguro apenas la recibas.
Para obtener la tuya, solicítala a tu contacto de Neuron o al administrador de tu organización. Si la pierdes, hay que emitir una nueva (no se puede recuperar la anterior).
Una vez que la tienes, se envía en cada request como header:
2. ¿Cuál es la diferencia entre una key con scope read y una con scope full?¶
| Scope | Qué permite |
|---|---|
read |
Solo métodos GET (consultas): estado, campañas, analytics, agents, plantillas. |
full |
Todo el ciclo: iniciar, detener, pausar, reanudar y programar campañas, además de todas las lecturas. |
Si usas una key con scope read para un POST, PATCH o DELETE, la API responde
403 Forbidden. Para operar campañas (no solo consultarlas) necesitas una key full.
3. ¿Por qué mi POST devuelve 403 si la autenticación es correcta?¶
Un 403 con credenciales válidas casi siempre significa una de dos cosas:
- Tu API Key tiene scope
ready estás intentando una operación de escritura (start/stop/pause/resume/schedule). Necesitas una key con scopefull. - El
agent_idque enviaste no está asignado a tu organización. Cada key solo puede usar agents de su propia organización. Verifica elagent_idcontraGET /api/agents.
Si descartaste ambas, el body del error trae un error_id que puedes citar al pedir
soporte.
4. ¿Puedo usar el login con usuario y contraseña (JWT) en vez de la API Key?¶
POST /api/auth/login existe y devuelve un access_token para sesiones de navegador.
Para integraciones servidor-a-servidor recomendamos la API Key, no el JWT: la key
es estable, no expira por sesión y está pensada para automatización. El JWT está
orientado a la interfaz web.
5. ¿La organización va en algún header (tipo X-Tenant-ID)?¶
No. La organización va implícita en la API Key. No existe header de organización ni de tenant: cada key solo ve y opera datos de su propia organización.
Campañas y formato de datos¶
6. ¿Qué formato tiene que tener el CSV?¶
Las columnas requeridas dependen del tipo de campaña (campaign_type):
| Tipo | 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 |
Reglas generales:
to_number: teléfono en formato E.164 (ver pregunta 13).lead_id: identificador único por contacto.- Las columnas extra que agregues (por ejemplo
Fecha_Limite_Pago) se preservan y se pasan al motor de llamadas. - Tamaño máximo del archivo: 10 MB.
- Las filas sin
to_numbero sinlead_idse saltan automáticamente.
Puedes descargar una plantilla lista para usar con
GET /api/csv-template?type=<tipo>.
7. ¿Cómo inicio una campaña? ¿Mando el CSV como texto o como archivo?¶
Hay dos formas, equivalentes en comportamiento:
- CSV inline (JSON):
POST /api/campaign/startcon el CSV como texto plano en el campocsv_content.
API_BASE_URL="https://api.neuronstudio.ai"
curl -X POST "$API_BASE_URL/api/campaign/start" \
-H "X-API-Key: nrn_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"name": "Cobranza Enero",
"csv_content": "to_number,lead_id,client_name,debt\n+525512345678,L001,Juan,5000",
"campaign_type": "collections"
}'
- Archivo CSV (multipart):
POST /api/campaign/start-uploadcon el.csvcomo archivo en unmultipart/form-data(camposfileyname, más los opcionalesagent_id,campaign_type,customer_email).
Ambas devuelven la misma respuesta con el campaign_id y el total de leads cargados.
8. ¿Qué pasa si lanzo dos campañas al mismo tiempo?¶
Solo puede haber una campaña activa por organización. Si intentas iniciar una segunda mientras hay una corriendo, la API responde 409 Conflict (límite de campañas alcanzado).
Si necesitas encadenar trabajo, primero detén (stop) o espera a que termine la
campaña activa, o programa la siguiente con POST /api/campaign/schedule para que
arranque más tarde.
9. ¿Puedo crear agents desde la API?¶
No. La API pública no permite crear ni modificar agents. Con
GET /api/agents puedes listar los agents asignados a tu organización y copiar el
agent_id que quieras usar al iniciar una campaña. La creación y asignación de agents
se coordina con tu contacto de Neuron.
Resultados, polling y webhooks¶
10. ¿Cómo obtengo los resultados de las llamadas?¶
Por polling (consulta periódica), no por push. El flujo recomendado:
- Llama a
GET /api/analytics/callspara traer la lista de llamadas con su resultado, sentimiento y datos de pago. - Para el detalle completo de una llamada (transcript + análisis), usa
GET /api/analytics/call/{call_id}. - Para métricas agregadas (totales, tasas, breakdowns), usa
GET /api/analytics/stats.
Patrón sugerido: consulta cada N minutos, filtrando por from_date/to_date o por
campaign_ids para traer solo lo nuevo, y pagina con el cursor (ver pregunta 12).
11. ¿Hay webhooks? ¿Pueden empujar los resultados a mi sistema?¶
Hoy no hay webhooks salientes hacia el cliente: no existe forma de registrar una
URL para recibir eventos push vía la API pública. La entrega por webhooks (push) está
en desarrollo; por ahora la sincronización es por consulta (polling), con
GET /api/analytics/calls (ver pregunta 10).
12. ¿Cómo pagino la lista de llamadas?¶
GET /api/analytics/calls usa paginación por cursor (no por offset):
- Haz el primer request, opcionalmente con
limit(default 100, máximo 100). - En la respuesta, el bloque
paginationtraehas_moreynext_cursor. - Mientras
has_moreseatrue, repite el request pasandocursor=<next_cursor>. - Cuando
has_moreseafalse(ynext_cursorseanull), llegaste al final.
API_BASE_URL="https://api.neuronstudio.ai"
# Primera página
curl "$API_BASE_URL/api/analytics/calls?limit=100" -H "X-API-Key: $KEY"
# Página siguiente
curl "$API_BASE_URL/api/analytics/calls?limit=100&cursor=<next_cursor>" -H "X-API-Key: $KEY"
Pruebas, límites y errores¶
13. ¿En qué formato tiene que ir el teléfono?¶
En formato E.164: el signo +, el código de país y el número, sin espacios ni
guiones ni paréntesis. Ejemplos:
- México:
+525512345678 - Estados Unidos:
+14155552671
Las filas con un to_number mal formado o vacío se saltan al cargar la campaña.
14. ¿Hay un modo sandbox o de prueba para no disparar llamadas reales?¶
No existe un modo sandbox ni un flag de dry-run. Un start exitoso dispara
llamadas reales de inmediato.
Para probar de forma segura sin impacto, la práctica recomendada es:
- Arma una lista de un solo contacto con tu propio número.
- Usa una lista chica y, si puedes, fuera del horario productivo.
- Lanza la campaña y valida el flujo completo (la llamada, el resultado, el polling) con esa única llamada controlada.
Así verificas la integración punta a punta sin contactar a clientes reales.
15. ¿Qué límites de rate (rate limits) tiene la API?¶
Algunos endpoints tienen límite de frecuencia. Los principales:
| Operación | Límite |
|---|---|
| Login | 5 cada 5 min por IP |
| Iniciar campaña (start / upload) | 5 por minuto por organización |
| Programar campaña (schedule) | 10 cada 5 min por organización |
| Listar campañas | 100 por minuto |
| Estadísticas (analytics/stats) | 30 por minuto |
Cuando excedes un límite, la API responde 429 e incluye el header Retry-After
con los segundos que tienes que esperar antes de reintentar. No existen headers
tipo X-RateLimit-*: el cliente infiere el límite a partir del 429 y del
Retry-After. Implementa backoff respetando ese valor.
16. ¿Qué significan los campos call_outcome y sentiment?¶
Son parte del análisis con AI de cada llamada:
call_outcome: el resultado categorizado de la conversación (por ejemplopromised_payment,no_answer,refused, etc.). Sirve para clasificar qué pasó en la llamada.sentiment: el sentimiento general detectado, normalmentepositive,negativeoneutral.
Ambos vienen en cada llamada de GET /api/analytics/calls y, con más detalle (junto al
resumen, las objeciones del cliente y los datos de pago), en
GET /api/analytics/call/{call_id}. Puedes filtrar las consultas por call_outcome y
sentiment.
17. Recibe un error con un error_id. ¿Qué hago con eso?¶
Todos los errores devuelven un body con esta forma:
El error_id (y el request_id) identifican de forma única ese error en nuestros
registros. Cuando pidas soporte por un error, incluye el error_id: nos permite
encontrar exactamente qué pasó sin que tengas que reproducir el problema.
Códigos de error más comunes:
| Código | Significado |
|---|---|
| 400 | CSV inválido o error de validación de datos |
| 401 | No autenticado (falta o es inválida la credencial) |
| 403 | Scope insuficiente o agent no asignado a tu organización (ver Q3) |
| 404 | Recurso no encontrado |
| 409 | Ya hay una campaña corriendo (límite de campañas, ver Q8) |
| 422 | Una función no está habilitada para tu organización |
| 429 | Rate limit excedido (mira Retry-After, ver Q15) |