Errores
Cuando una petición no se puede atender, la API responde con un código HTTP de error y un cuerpo JSON con esta forma:
{ "error": { "code": "file_too_large", "message": "The recording is larger than the plan allows." }}Programa contra code, no contra message. Los códigos son estables. Los mensajes están en inglés, están pensados para que los lea una persona y su redacción puede cambiar.
Códigos
Sección titulada «Códigos»| HTTP | code |
Qué ha pasado |
|---|---|---|
400 |
bad_request |
El cuerpo no es multipart/form-data, o la petición pesa 20 MB o más. |
400 |
no_file |
El formulario no trae un campo file con un archivo. |
400 |
empty_file |
El archivo está vacío. |
401 |
unauthorized |
Falta la clave, está mal escrita o ha sido revocada. |
402 |
no_minutes |
No quedan minutos de audio en este periodo. |
402 |
storage_full |
No queda almacenamiento en la cuenta. |
413 |
file_too_large |
El archivo supera el tamaño máximo del plan. |
415 |
not_audio |
El archivo no es una grabación de audio. |
422 |
agent_required |
La grabación no dice de quién es: no trae agent_code ni agent_name, ni un código de agente en el nombre del archivo. |
422 |
unknown_agent |
Nadie de Equipo tiene ese código o ese nombre. |
Qué hacer con cada uno
Sección titulada «Qué hacer con cada uno»Errores de la petición: 400, 413, 415
Sección titulada «Errores de la petición: 400, 413, 415»La petición está mal y seguirá estándolo si la repites igual. No la reintentes: corrige lo que envías.
bad_requesttiene dos causas. La primera, enviar el archivo como cuerpo de la petición en lugar de dentro de un formulario. La segunda, que la petición pese 20 MB o más: es el tope de la API, y por encima de él el formulario no llega a leerse. Si el error solo aparece con las grabaciones largas, es esta, y se resuelve comprimiendo el audio.no_filesignifica que el formulario ha llegado bien pero sin archivo. El campo tiene que llamarse exactamentefile.empty_filees un archivo de cero bytes. Si te ocurre, comprueba que tu sistema no envía la grabación antes de haber terminado de escribirla en disco.not_audiosignifica que el archivo no declara un tipoaudio/…y que su nombre no termina en una extensión de audio. Revisa cómo nombra tu sistema el archivo dentro del formulario.file_too_largesignifica que el archivo cabe en una petición pero supera el máximo por archivo de tu plan. Se resuelve comprimiendo el audio: para voz, MP3 a 64 kbps en mono es suficiente.
Falta el agente o no está en el equipo: 422
Sección titulada «Falta el agente o no está en el equipo: 422»Cada llamada pertenece a un agente de Equipo. Reintentar igual no sirve.
agent_required: envíaagent_codeoagent_name, o haz que el nombre del archivo lleve el código del agente.unknown_agent: da de alta al agente en Equipo, con el mismo código que usa tu centralita, y vuelve a enviar la grabación. Si el equipo ya ocupa todas las plazas del plan, antes hará falta una plaza libre.
Clave no válida: 401
Sección titulada «Clave no válida: 401»Comprueba que la cabecera es Authorization: Bearer ck_…, con un espacio tras Bearer y sin comillas ni saltos de línea alrededor de la clave. Si es correcta, puede que alguien la haya revocado: mira la lista en Integraciones. No reintentes con la misma clave.
Límites de la cuenta: 402
Sección titulada «Límites de la cuenta: 402»La petición es correcta, pero la cuenta no puede aceptar más por ahora. Reintentar enseguida no sirve.
no_minutesse resuelve solo cuando empieza el siguiente periodo, o ampliando los límites de la cuenta.storage_fulldepende del plan. En el plan gratuito el almacenamiento cuenta todo lo subido y no se recupera eliminando llamadas: hace falta otro plan o ampliar el límite de la cuenta. En los demás se resuelve eliminando llamadas antiguas en la app. Ver Plan y límites.
Lo razonable es parar el envío, avisar a quien lleve la cuenta y guardar las grabaciones pendientes para enviarlas después. El uso y los límites están en Ajustes → Plan y uso, y se explican en Plan y límites.
Fallos nuestros: 5xx y cortes de conexión
Sección titulada «Fallos nuestros: 5xx y cortes de conexión»Un 500, un 502, un 503 o una conexión que se corta sin respuesta indican un problema en nuestro lado o en el camino. Estos sí se reintentan:
- Espera antes de repetir y alarga la espera en cada intento: 5 segundos, 30 segundos, 2 minutos.
- Envía siempre el mismo
external_id. Si la primera petición sí llegó, la segunda no duplica la llamada. - Tras varios intentos fallidos, deja la grabación en una cola para más tarde en lugar de insistir.
Resumen
Sección titulada «Resumen»| Códigos | Qué hacer | |
|---|---|---|
| No reintentar | 400, 401, 413, 415 |
Corregir la petición o la clave. |
| Esperar | 402 |
Parar, avisar y reanudar cuando la cuenta tenga margen. |
| Reintentar | 5xx, sin respuesta |
Con espera creciente y el mismo external_id. |
El orden de las comprobaciones
Sección titulada «El orden de las comprobaciones»Si una petición tiene varios problemas, verás el primero de esta lista:
- La clave (
unauthorized). - El formato del cuerpo (
bad_request) y la presencia del archivo (no_file). - Que el archivo sea audio (
not_audio) y no esté vacío (empty_file). - Si el
external_idya existe: en ese caso la respuesta es200y no se comprueba nada más. - El agente (
agent_required,unknown_agent). - El tamaño (
file_too_large), el almacenamiento (storage_full) y los minutos (no_minutes).