Cómo interactuar con MailChimp usando PHP

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.

mchojrin

Docente y consultor PHP at Leeway Academy
Ayudo a desarrolladores PHP a acelerar su llegada a Sr.

2 comentarios en “Cómo interactuar con MailChimp usando PHP

  • 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

¿Te quedó alguna duda? Publica aca tu pregunta

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

A %d blogueros les gusta esto: