Resultados y cumplimiento
Traer de vuelta qué pasó con cada llamada, y empujar hacia acá las bajas que se enteró tu sistema.
Una fila por conversación
El registro de llamadas devuelve una fila por conversación, no por pata. Adentro una transferencia genera una fila nueva y cada participante de una conferencia otra; por la API ves la raíz, que es lo que le pegás a una cuenta en tu sistema.
Filtrás por contacto, por campaña, por dirección, por resultado y por fechas.
curl -G https://api.dialsprint.com/api/v1/calls \
-H "Authorization: Bearer $DIALSPRINT_API_KEY" \
--data-urlencode "contact_id=01M2XEM2ESR7K9A0AR29EDT9WJ" \
--data-urlencode "outcome=answered"Lo que trae cada llamada
El agente, la campaña y la tipificación vienen embebidos con id y nombre: leer el log no te obliga a pedir aparte un directorio de gente.
notes es lo que escribió el agente al tipificar, y suele ser la razón por la que querías el log.
{
"data": [
{
"id": "01M2XF1111111111111CALL01",
"direction": "outbound",
"status": "completed",
"outcome": "answered",
"from": "+541155559000",
"to": "+5491155550000",
"contact_id": "01M2XEM2ESR7K9A0AR29EDT9WJ",
"agent": { "id": "01M2X8...", "name": "Ana Gómez" },
"campaign": null,
"inbox": null,
"disposition": {
"id": "01M2X9...",
"name": "Interesado",
"category": "terminal",
"outcome": "won"
},
"notes": "Confirma el viernes",
"duration_seconds": 184,
"has_recording": true,
"started_at": "2026-09-19T14:02:11.000000Z",
"answered_at": "2026-09-19T14:02:19.000000Z",
"ended_at": "2026-09-19T14:05:15.000000Z",
"created_at": "2026-09-19T14:02:11.000000Z"
}
]
}El audio no se entrega
has_recording te dice si hay grabación, pero la API no devuelve el audio ni un link. Los links del producto son URLs firmadas de 12 horas hechas para su propio reproductor, y una de esas guardada en los logs de tu sistema es una conversación con un cliente que reproduce cualquiera que la vea.
Si necesitás el audio para algo puntual, hablemos: es una decisión aparte y no un campo que agregamos sin pensarlo.
Mapeá las tipificaciones una vez
El catálogo de tipificaciones se pide una vez y se guarda. category y action no son decoración: son lo que decide si el contacto se vuelve a llamar, se reprograma o se cierra. Las archivadas no vienen en el catálogo, pero las llamadas que ya tipificaron las siguen nombrando, así que guardá las que conocés aunque dejen de aparecer.
Traerlo de entrada te evita descubrir el vocabulario fila por fila a medida que aparecen llamadas.
Empujá las bajas que escuchás vos
Muchas veces tu sistema es donde primero se sabe que alguien no quiere que lo llamen: se lo dijo a alguien por otro canal, llegó una carta. Sin esta llamada ese dato se queda ahí y nosotros seguimos discando.
Es idempotente: reenviar el lote de ayer no agrega nada. Un número inválido se reporta y no voltea el lote entero.
curl https://api.dialsprint.com/api/v1/suppression-lists/01M2XA.../entries \
-H "Authorization: Bearer $DIALSPRINT_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "phones": ["+5491155550000", "11 5555 0001"] }'Qué contesta
added son los que entraron, already_present los que ya estaban, invalid los que no pudimos leer como teléfono.
Se suprime el NÚMERO, no la persona. Para marcar un contacto entero hay que hacerlo desde la app, que además deja la fila de auditoría que la API no escribiría.
{
"data": {
"added": 2,
"already_present": 0,
"invalid": [],
"entries_count": 1432
}
}