Saltar a la navegación

¿Cuáles son los errores más comunes con la API?

Un id desconocido no devuelve un 404

Si compruebas si existe una lista o un suscriptor verificando si devuelve un 404, pasarás por alto cualquier id desconocido. En ese caso, la API devuelve un 400:

{ "error": { "type": "invalid_input", "message": "Unknown list", "code": 203, "parameter": "list_id" } }

Solo recibirás un 404 cuando la ruta no exista, por ejemplo por un error tipográfico en la URL. Por lo tanto, comprueba el code 203 en lugar del código de estado.

Ten en cuenta la diferencia entre dos códigos: un id o una dirección de correo electrónico que no existe en la lista devuelve 203, mientras que 202 (“Invalid member_id”) significa que la sintaxis del parámetro no es correcta.

Un campo de selección múltiple vacío no se vacía

Si envías una lista vacía para un campo select_multiple, las opciones seleccionadas no desaparecen. Los valores existentes se mantienen y recibes igualmente un 200 sin mensaje de error.

curl
curl https://api.laposta.nl/v2/member/suscriptor@example.net \
-u TU_CLAVE_API: \
-d list_id=BaImMu3JZA \
-d "custom_fields[intereses][]="
PHP
$laposta = new Laposta('TU_CLAVE_API');
$laposta->memberApi()->update('BaImMu3JZA', 'suscriptor@example.net', [
'custom_fields' => ['intereses' => ['']],
]);

Si quieres asegurarte de que una selección ha quedado vacía, comprueba la respuesta y avisa a través de helpdesk@laposta.nl si todavía contiene valores.

Enviar etiquetas sin corchetes no funciona

Un suscriptor puede tener varias etiquetas, por lo que el campo espera una matriz. Si envías un único valor sin corchetes, recibirás un 200 sin mensaje de error con el suscriptor en la respuesta, pero no habrá cambiado nada.

curl
-d "custom_fields[labels]=Cliente" # tiene éxito, pero no hace nada
-d "custom_fields[labels][]=Cliente" # así es como debe hacerse
PHP
'custom_fields' => ['labels' => 'Cliente'] // tiene éxito, pero no hace nada
'custom_fields' => ['labels' => ['Cliente']] // así es como debe hacerse

El campo labels solo existe a partir del momento en que la lista tiene al menos una etiqueta. Antes de eso, no aparecerá entre los campos ni en los datos del suscriptor. Tampoco puedes crear una etiqueta con él: un nombre que la lista no reconozca devuelve un 400.

{ "error": { "type": "invalid_input", "message": "Field labels: unknown option", "code": 203, "parameter": "labels" } }

Envía siempre el nombre y no el id de options_full. Enviar un id devuelve el mismo mensaje.

En las operaciones en bloque (bulk) envías JSON, por lo que no se usan corchetes en el nombre del parámetro, sino un array. Si envías un texto suelto, la API contabiliza al suscriptor como modificado sin dar ningún mensaje de error, pero las etiquetas de ese suscriptor quedarán vacías.

"custom_fields": { "labels": "Cliente" } // 200, edited_count 1, etiquetas vacías después
"custom_fields": { "labels": ["Cliente"] } // así es como debe hacerse

Si en una operación en bloque envías una etiqueta desconocida, ese suscriptor aparecerá en errors con el mismo código 203 y no se añadirá.

Las operaciones en bloque están desactivadas por defecto

El endpoint para la sincronización en bloque (bulk) existe en todas las cuentas, pero devuelve un 401 si no tienes permiso:

{ "error": { "type": "invalid_request", "message": "Not permitted to issue bulk requests (1)" } }

Esto no es un fallo en tu código. En Sincronizar suscriptores a través de la API se explica quién puede utilizar las operaciones en bloque y cómo solicitar su activación.

Una campaña se envía por duplicado con una segunda llamada

Si llamas dos veces a Enviar campaña, recibirás un 200 en ambas ocasiones y el envío se pondrá en marcha de nuevo. En Enviar una campaña a través de la API puedes ver cómo evitarlo en tu propio código.

Tampoco se bloquea la modificación de una campaña que ya ha sido enviada.

Solicitar el contenido de una campaña no funciona con todas las campañas

Si solicitas el contenido de una campaña creada en el editor drag & drop, recibirás:

{ "error": { "type": "invalid_input", "message": "Wrong campaign type", "code": 203, "parameter": "campaign_id" } }

No se trata de una avería. En Enviar una campaña a través de la API se indica con qué campañas sí es posible hacerlo.

El campo _iso puede no estar presente

Cuando un campo de fecha está vacío, a veces la variante _iso no aparece en absoluto en la respuesta en lugar de tener el valor null. Por tanto, comprueba primero si este campo existe en la respuesta antes de leerlo; de lo contrario, tu código fallará por una clave inexistente. Ver: Campos de fecha y hora en la API.

Es fácil alcanzar el límite de solicitudes

En una cuenta gratuita puedes hacer 30 solicitudes por minuto, y en una cuenta de pago, 120. Una sincronización que haga una llamada por cada suscriptor agotará este límite enseguida en cuanto tenga unos pocos cientos de suscriptores.

HTTP/1.1 429 Too Many Requests
Retry-After: 60

Espera el número de segundos indicado en el encabezado Retry-After en lugar de volver a intentarlo inmediatamente, y utiliza la sincronización en bloque para grandes volúmenes. Puedes leer más sobre este tema en Límites y mensajes de error de la API.

Un nombre de campo desconocido en un segmento no devuelve ningún mensaje de error

Un segmento se crea mediante una definición en JSON. La API comprueba el formato y las comparaciones, pero no verifica si el campo por el que estás filtrando existe realmente. Por lo tanto, un error tipográfico en el nombre de un campo devolverá igualmente un 201, creando un segmento que no seleccionará a nadie.

Por eso, comprueba los nombres de los campos de tu definición comparándolos con los campos obtenidos mediante Solicitar todos los campos.

Artículos relacionados