Usando Mailchimp en Magento2 (parte 1, la básica)

En esta ocasión, voy a intentar hacer un articulo lo mas claro posible de cómo instalar y usar Mailchimp en Magento2.

Primero, me parece útil saber qué puedo hacer con Mailchimp (y por lo tanto qué no puedo hacer).

Obviamente todos tenemos la idea de que Mailchimp mantiene nuestras listas de suscriptores, y que es capaz de mandar campañas a estos suscriptores, pero a partir que Mailchimp integro en la API 3.0 el soporte para ecommerce, podemos hacer mucho más que eso.

A partir de la API 3.0 también podemos sincronizar todos nuestros customers, así como nuestros productos, nuestras ordenes e incluso nuestros carritos.

En este punto, es importante entender la diferencia entre un customer y un subscriber:

  • un subscriber es alguien que nos dio su permiso para sumarlo a nuestra lista, al cual le podemos incluir en nuestras campañas.
  • un customer es alguien que o bien se registro en nuestro sitio, o bien compro algo, o bien dejo un carrito abandonado, a un customer NO lo puedo incluir en una campaña. A un customer solo le podemos mandar mails transaccionales.

Un customer tiene un muy acotado conjunto de propiedades, estas las podemos ver mirando un poco la API aqui https://developer.mailchimp.com/documentation/mailchimp/reference/ecommerce/stores/customers/.

Como podemos ver, apenas tiene un nombre, apellido, dirección y apenas algún otro campo mas.

En cambio, un subscriber si bien parece que tiene menos propiedades (que podemos ver aqui), gracias al bendito merge_fields puedo agregarle cualquier cosa que sea un customer attribute.

Como vemos, un subscriber ni siquiera tiene un nombre, o un apellido.

Es bueno señalar que cuando creamos un customer, Mailchimp internamente también crea un subscriber, un subscriber especial que tiene como status ‘transactional’, esto nos da la ventaja de poder agregarle mediante los merge_fields casi cualquier cosa a nuestro customer (así como lo hicimos con nuestros subscribers).

Bueno, basta de cháchara y vamos a los bifes porque no quiero aburrir con cosas teóricas que podemos ir viendo a medida que surgen.

¿Cómo instalo Mailchimp para Magento?

Lo primero que debo hacer es ir al repo de la extension, alli en la parte de releases tengo todas las versiones, con sus respectivos changelogs, compatibilidades y el cómo instalarla.

Así que que voy a buscar según mi versión de Magento qué versión de mc-magento2 me sirve, y allí voy a tener el comando para poder instalarla.

En mi caso, voy a usar un Magento 2.3 para todo el ejemplo, así que debo ejecutar:

composer require mailchimp/mc-magento2:102.3.36

Una pequeña observación si no sabés porque miércoles use el comando which ahí en el medio.

Como en mi maquina tengo muchas versiones de PHP instaladas y todas corriendo al mismo tiempo, tengo que decirle a Composer con qué versión de PHP quiero que corra (sino se va a armar cocoa, y por ejemplo si tengo Magento 2.2 y ejecuto con PHP 7.2 me va a decir que la versión de PHP no esta soportada y va a fallar mi Composer), lo que hago es llamar a la versión correcta de PHP. Pero como tengo Composer instalado globalmente, tengo que llamar a which para que me devuelva el path completo de Composer, ya que PHP sólo va a buscar en el directorio actual (la magia de la retrocomilla).

Una vez que tengo instalada la extensión mediante Composer, lo que me queda es como con cualquier extensión, así que ejecuto bin/magento setup:upgrade, bin/magento -f setup:static-content:deploy y finalmente bin/magento cache:clean.

Así que ahora cuando vaya a mi admin de Magento, voy a ver mi menú a Freddie.

Si vemos el menú de Freddie, nos vamos a encontrar con 3 opciones:

La configuración de la extensión, una opción para el mantenimiento de nuestras Mailchimp Stores y una grilla donde vamos a poder ver los errores que se generan en la sincronización de nuestra tienda.

Para empezar vamos a ir a la configuración, allí nos vamos a encontrar con que la extensión por defecto esta deshabilitada y la vamos a habilitar.

Al no tener una API Key, obviamente nos dice que la API Key es inválida, y no tenemos nada adentro del combo de Mailchimp Stores.

Así que lo primero es clickear en el botón de ‘Get API credentials’, seguimos el proceso que es muy simple. Se nos va a abrir una ventana de Mailchimp, donde nos va a pedir usuario y password, y una vez que ingresemos, nos va a mostrar una API Key, la cual tenemos que copiar.

Así que una vez tenemos la API Key, la pegamos en nuestra configuración.

Acá hay que hacer una pausa. ¿Es lo mismo que clickee en el botón de ‘Get API credentials’ y obtenga la API Key acá y que la saque de mi cuenta de Mailchimp? NO, no es igual, no es lo mismo.

Si te fijas atentamente, la API Key que aparece mediante el botón de ‘Get API credentials’ no aparece en la lista de API Keys en Mailchimp. ¿Por qué?. Porque con el botón, estás autorizando específicamente a nuestra extensión a conectarse con tu cuenta de Mailchimp, no es una API Key común y corriente, es generada específicamente para nuestra extensión.

¿Y cuál debería usar? Deberías usar el del botón, así las cosas que se hagan a través de la extensión van a quedar asociadas a la extensión.

Por ejemplo, estos dos subscribers fueron dados de alta el primero usando una API Key que saque de la cuenta de Mailchimp, y el segundo de la API Key que obtuve de seguir el proceso del botón ‘Get API credentials’.

Y como ves, el primero queda asociada a la lista, pero no a la extensión, no así la segunda, que queda clarísimo que este subscriber fue dado de alta por nuestra extensión.

Así que deberías usar la que obtenés del ‘Get API credentials’.

Entonces, una vez que tenés la API Key la pegas en el campo correspondiente, si tenes ya definidas Mailchimp Stores, se te van a cargar cuando saltes de campo, y simplemente tenes que elegir una. Esto va a hacer que automáticamente se te seleccione tambien una lista (audiencia) de Mailchimp.

Como una Mailchimp Store debe estar asocianda a una lista, no es necesario que elijas la lista (se hace solo cuando elegis la Mailchimp Store).

Una vez que creás una Mailchimp Store, NO es posible cambiarle la lista, si queres usar otra lista, vas a tener que crear una nueva Mailchimp Store y cambiarla acá en la configuración. Eso significa que toda la sincronizacion se va a hacer desde cero.

Una vez que elegiste la Mailchimp Store, vas a ver también que cambia el Account Details.

Ahí te va a mostrar un resúmen de tu Mailchimp Store, cuántos customers, orders y carts tiene, si se esta sincronizando o si ya terminó de sincronizar.

Este último punto es muy importante, ya que NINGÚN automation va a ser enviado hasta que tu store este completamente sincronizado. Una vez que lo esté, vas a ver la fecha en que se sincronizó por primera vez y desde ese momento todas las automations van a ser enviadas.

¿Qué quiere decir que tu store esta completamente sincronizado? Que todos tus productos, todas tu ordenes y todos tus customers son enviados a Mailchimp, y cuando la extensión termina de mandar toooooodas esas cosas, le avisa a Mailchimp que tu Mailchimp Store está pronta.

Pero… ¿si agrego un producto o una orden, mi Mailchimp Store deja de estar sincronizada? La respuesta es NO, no deja de estar sincronizada. Una vez que se hace la primera sincronización que puede demorar mas o menos tiempo dependiendo de la cantidad de datos que tengas en tu Magento, la store siempre va a seguir sincronizada.

Obviamente, para que la extensión sincronice estos datos, tenes que habilitar el Ecommerce.

No quiero ver ahora tooooodas las opciones, sino se puede volver larguísimo, uds. se aburren y yo también.

Lo cierto que con lo que tenés hasta acá, podés perfectamente empezar a sincronizar tus datos con Mailchimp.

¿Qué te falta? Esto obviamente no se hace solo, para eso la extension tiene definidos unos cuantos cronjobs, así que vas a tener que tener configurado en tu magento todo el cron (podes ir a la documentacion de magento).

Basicamente tenés que hacer un crontab -e (en mi caso todos los procesos los corre el usuario www-data, asi que voy a hacer un sudo crontab -u www-data -e).

No seas papanatas, pone las cosas como te dice la documentacion de magento, es decir:

~ MAGENTO START
 * * * * /usr/bin/php /var/www/html/magento2/bin/magento cron:run | grep -v Ran jobs by schedule >> /var/www/html/magento2/var/log/magento.cron.log
 * * * * /usr/bin/php /var/www/html/magento2/update/cron.php >> /var/www/html/magento2/var/log/update.cron.log
 * * * * /usr/bin/php /var/www/html/magento2/bin/magento setup:cron:run >> /var/www/html/magento2/var/log/setup.cron.log 
 ~ MAGENTO END

No quieras inventar cosas raras del estilo:

3,8,13,18,23,28,33,38,43,48,53,58 * * * * /usr/bin/php /var/www/html/magento2/bin/magento cron:run | grep -v Ran jobs by schedule >> /var/www/html/magento2/var/log/magento.cron.log

Aunque vos pienses… naaa pero tengo otras cosas en mi servidor que corren, y esto quiero que corra cada 5 minutos pero no a los 0, 5, 10, 15, etc sino a esos que yo le digo. Eso es una muuuuuuy mala idea.

Vamos a ver porque.. si miramos acá podemos ver todos los cronjobs que usa la extension.

Algunos con una expresion de cron */5 y otras que dicen 0.

Las que dicen 0, obviamente corren a las horas en punto (y que basicamente limpian tablas), el tema son las otras, si sos de los que pensas que */5 quiere decir «cada 5 minutos» siento decepcionarte y ser yo el que te abra los ojos y te traiga al mundo real. NO, */5 no quiere decir cada 5 minutos, */5 significa «cuando los minutos son multiplos de 5» (es decir a las horas en punto, a y 5, a y 10, etc).

Es decir que esos cronjobs se van a ejecutar como es de esperar si, cada 5 minutos, pero no cualquier 5 minutos, sino cuando los minutos son multiplo de 5. Así que si vos ponés ese invento en la expresion de tu crontab, los cronjobs de la extension NUNCA se van a ejecutar, se te va a llenar la tabla de cron_schedule de «missed».

Como ya es costumbre, voy a escribir 3 o 4 articulos al respecto para no hacerlo muy pesado, y siempre con ejemplos que puedas seguir y probar sin problemas. Y como siempre, si tenés dudas podes preguntarme por Twitter que trataré de ayudar.

Publicado por Gonzalo Dominguez

Magento fanatic developer. Do not try and bend the spoon. That's impossible. Instead... only try to realize the truth. There is no spoon. @gonzalezuy