Uno de mis SaaS favoritos es MailChimp (El que uso para el envío de mis campañas de e-mail marketing y para algunos clientes también). Si bien su interface es algo rústica (A veces cuesta encontrar el modo de realizar ciertas tareas, sobre todo al comienzo cuando no se conoce bien), es sumamente funcional (Hasta tiene workflows automatizados).
Pero, como siempre, las posibilidades que brinda de fábrica son más limitadas de lo que a un desarrollador le gustaría… afortunadamente, cuenta con una API muy buena que permite manipular todos los objetos del sistema y lograr algunas cosas que desde la interfaz web son complejas (o directamente imposibles).
Algo que me sucedió recientemente (y que dio origen a este post) fue la necesidad de realizar un mismo envío (el cual incluyera el disparo de nuevos envíos dependiendo del comportamiento del usuario ante la lectura del envío original) en forma periódica.
La parte de los envíos condicionales los resolví en forma bastante simple usando las automatizaciones propias de MailChimp. El problema que tenía era cómo realizar los envíos en forma periódica.
Hurgando un poco en la documentación de la API llegué a la solución :).
Lo primero fue buscar alguna librería php que me ayudara en la interacción con la API. Para ello dirigí mi browser hacia packagist.org y busqué «MailChimp» y encontré:
Como no tenía ninguna otra referencia (ni estaba usando ningún framework en particular), decidí probar con la primera opción.
Armé mi proyecto usando composer:
mkdir mc cd mc composer init
Y aproveché para declarar la dependencia en forma interactiva:
Y una vez terminado el consabido composer install
para que todo tenga sentido…
Y ahora sí… ¡a codear!
require_once 'vendor/autoload.php'; use \DrewM\MailChimp\MailChimp; $MailChimp = new MailChimp('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-us15');
Lo primero que se necesita para usar la API es autenticarse, para eso necesitás conocer tu API-Key. Ese dato lo sacás de la sección Extras de la configuración de tu cuenta:
Si no tenés una API Key creada usá el botón de abajo, en mi caso ya la tenía, así que fue sólo copiar el contenido de la columna API key.
Y ahí es empezar a jugar un poco.
Por ejemplo, para saber qué listas tengo definidas:
$result = $MailChimp->get('lists'); print_r($result);
Da algo como:
Array ( [lists] => Array ( [1] => Array ( [id] => 897874fd1b [web_id] => 133557 [name] => Testing list ... ) ) )
Lo importante (entre todos los datos que devuelve la llamada) es el id de la lista (897874fd1b en este caso). Con este dato vamos a poder operar, por ejemplo, para obtener el listado de miembros:
$result = $MailChimp->get('lists/897874fd1b/members');
Una vez obtenida la lista de miembros, lo que quería hacer era sumarlos a la cola del envío automatizado. Para eso necesitaba hacer una llamada tipo POST (Estaba por agregar información en lugar de obtenerla), pero requería un par de ids (el del circuito de automatización y el de su primer correo):
$result = $MailChimp->get('automations');
Me dió el número 29f30d8f7a
.
Y:
$result = $MailChimp->get('automations/29f30d8f7a/emails');
Me dió el da174ffbca
.
Un punto importante, para que todo esto funcione, es la configuración de la automatización en MailChimp. El primer correo debe dispararse a partir de una llamada a la API:
Una vez obtenidos todos los datos, sólo quedaba ingresar los mails en la cola:
foreach ( $result['members'] as $member) { $email_address = $member['email_address']; echo "Enviando primer mail a ". $email_address; $MailChimp->post( 'automations/29f30d8f7a/emails/da174ffbca/queue', [ 'email_address' => $email_address, ] ); }
Y dejar que MailChimp hiciera el resto.
Conclusión
La API de MailChimp es bastante simple de usar, adhiere de cerca al estándar RESTFul, logrando una interface limpia y muy funcional.
El soporte para PHP está muy bien logrado, con lo cual, es muy sencillo integrar una aplicación desarrollada en este lenguaje con este potente motor de email marketing, así que… ¿para qué reinventar la rueda?
Aclaración
Claramente, para sacarle el máximo jugo hace falta conocer en profundidad MailChimp (y luego ver cómo integrarlo mediante la API), pero si ya conoces un poco la herramienta, esta posibilidad seguramente te abrira nuevas oportunidades.
- Cómo enviarencabezados SOAP desde PHP - 09/12/2024
- Por qué PHP 8 no satisface el requisito ^7.3 de composer - 09/12/2024
- Cómo usar PHPUnit - 03/12/2024
Hola buen día yo estoy comenzando con la integración de la API pero me arroja los datos en Json serializado alguien a podido encontrar la substring necesaria para esto??
Hola Salvador:
¿Probaste desserializar el resultado? Puedes usar https://www.php.net/manual/es/function.unserialize.php.
Si pudieras compartir el resultado que obtienes sería más fácil ayudarte.
Saludos!
Mauro, disculpá que recién ahora responda. No había visto tu respuesta hasta hoy.
Te comento que después que te escribí resolví el problema de una forma más rudimentaria. Con el siguiente código la API te devuelve un array con todos los datos de un determinado contacto:
$subscriber_hash = $mailchimp->subscriberHash($clieEmail);
$result = $mailchimp->get(«lists/$lista/members/$subscriber_hash»);
print_r($result);
En una sección de ese array salen los ID de todos los grupos de la lista (sin el nombre). También sale un 1 a la derecha de los grupos que el contacto está suscrito.
Lo que hice fue tomar un determinado contacto como testigo e ir añadiéndolo a un grupo por vez, a la vez que pedía la consulta a la API con el código de arriba código.
Así pude conocer los ID de cada uno de los grupos de la lista para luego utilizarlos según mi necesidad.
Es medio básico pero para mí fue suficiente.
Gracias por tomarte el tiempo de responder.
PD: El sistema de comentarios no me deja marcar las casillas para recibir notificaciones de las respuestas.
Bueno, me alegro de que lo hayas podido resolver 🙂
Y gracias por dejar la explicación para el resto de los lectores.
Voy a mirar el tema de las notificaciones.
Saludos
Hola Mauro. Te agradezco por compartir ésto ya que necesitaba hacer una integración con MailChimp y no sabía cómo.
Solo me queda algo que no pude resolver. Necesito agregar usuarios a determinados grupos de la lista usando la API y no di con la forma de obtener el ID del grupo.
En los ejemplos de Gitub no lo ponen. ¿Sabrías cuál es el método a utilizar en el GET para consultar ese dato?
Desde ya te lo agradezco.
Gracias por la pregunta Jorge! Honestamente, nunca me encontré con esa necesidad y, por lo poco que pude ver, la librería que usé de ejemplo no parece soportarlo… Lo que encontré que pienso que puede servirte es esto: https://rudrastyh.com/mailchimp-api/interest-groups.html.
— Edit:
Efectivamente, en ese artículo estaba la clave. La librería que usé como ejemplo en este post es bastante simple (Apenas un wrapper al cURL y demás), con lo cual, todo lo que está disponible a través de la API se puede usar…
En definitiva, con un código como este podés obtener lo que necesitás:
<?php
require_once 'vendor/autoload.php';
use \DrewM\MailChimp\MailChimp;
$MailChimp = new MailChimp('XXXXXXXXXXXXXXXXXXXX-us11');
$result = $MailChimp->get('lists');
$listId = $result['lists'][0]['id'];
$result = $MailChimp->get('lists/'.$listId.'/interest-categories');
$catId = $result['categories'][0]['id'];
$result = $MailChimp->get('lists/'.$listId.'/interest-categories/'.$catId.'/interests');
print_r($result);
— Fin edit
Comentá cómo te fue!
Saludos