Mailchimp es un servicio en la nube que nos permite gestionar nuestras listas de correo y campañas de email de una manera bastante sencilla. Dispone de multitud de opciones para integrar en una web el formulario a través del que el usuario se suscribirá a la lista, pero si queremos conseguir una integración perfecta con nuestro sitio, no nos queda más remedio que utilizar la API. Veamos qué sencillo puede ser este proceso.
Conseguir la API key de Mailchimp
La API Key será la forma que tengamos de identificarnos ante Mailchimp como los legítimos usuarios de nuestras listas de correo y campañas. Para conseguir la nuestra tendremos que ir a la web de Mailchimp, identificarnos y acceder a las «Opciones de la cuenta«. Allí pincharemos en «Extras» y elegiremos «API keys».
Si no nos aparece ya una creada, haremos clic en el botón «Crear una API Key».
Copiamos esa cadena de números y letras que será nuestra API Key.
Descargar la librería necesaria
Mailchimp pone a nuestra disposición diferentes herramientas para conectar y utilizar la API. En nuestro caso, orientado a PHP, utilizaremos MCAPI.php, pero para otros usos podéis consultar esta página.
Si descomprimimos el fichero que nos acabamos de descargar veremos que junto con el archivo de la clase principal, existe una carpeta llamada «examples» en la que podemos encontrar casos prácticos de uso de todos y cada uno de los métodos definidos.
Por eso vamos a ver los métodos más básicos para comprender el funcionamiento y poder dar de alta correos a través de nuestra web y en un futuro, cuando queramos profundizar, solo tendremos que dirigirnos a esos ejemplos.
Obtener las listas de correo disponibles
Aunque es una información que podemos obtener directamente en el panel de control, vamos a tomarlo como ejercicio básico para ver como instanciar la clase MCAPI y romper el hielo.
<? include_once('MCAPI.class.php'); $apikey="INSERTA_AQUI_TU_API_KEY"; $mailchimp = new MCAPI($apikey,true); $listasdecorreo=$mailchimp->lists(); //Controlamos los errores if ($mailchimp->errorCode) { echo "\tCode=".$mailchimp->errorCode."\n"; echo "\tMsg=".$mailchimp->errorMessage."\n"; } else { print_r($listasdecorreo); } ?>
Añadir un usuario a una lista de correo
La otra acción básica es añadir un usuario a una lista de correo.
<? include_once('MCAPI.class.php'); $apikey="INSERTA_AQUI_TU_API_KEY"; $mailchimp = new MCAPI($apikey,true); $email=$_GET['email']; $nombre=$_GET['nombre']; $listId="ID_DE_LA_LISTA_DE_CORREO"; $merge_vars = array('FNAME'=>$nombre ); $resultado=$mailchimp->listSubscribe( $listId, $email, $merge_vars ); //Controlamos los errores if ($mailchimp->errorCode) { echo "\tCode=".$mailchimp->errorCode."\n"; echo "\tMsg=".$mailchimp->errorMessage."\n"; } else { echo("Todo ha salido OK. Revise su correo para confirmar el alta."); } ?>
El ID de la lista podemos obtenerlo o bien por el método anterior o mirándolo en la web de Mailchimp, en el menú de la lista –> Opciones.
Y mucho más
Ya solo nos queda seguir investigando y probar cosas nuevas. Espero que os haya resultado útil. ¡No olvidéis dejar vuestro comentario!
Hola David.
Precisamente estaba hablando con mi programador sobre como podíamos mejorar a #Bundi y éste me avisa de tu post.
Nos viene que no pintado!!!
Gracias! 🙂
¡¡Hola Victor!!
Jeje ¡qué gran invento ese #Bundi! ¡Y qué presión mete! Enhorabuena por la iniciativa y me alegro de que os sea útil lo que escribo.
¡Un abrazo!
Hola David,
Fantastico post.
De hecho lo he utilizado para introducir contactos de una landing en mailchimp y funciona perfectamente. Sin embargo, me gustaría saber si tienes idea de lo siguiente. Lo que me gustaría implementar es lo siguiente: Cuando un usuario introduce su dirección de correo electrónico se le envía un correo con un link de «unsubscribe». De forma que, al introducir la dirección el contacto pasa automáticamente a mi lista a menos que haga clic en el link.
Alguna idea?
Hola Ricardo:
Pues no he encontrado la forma. Además no sé si se vulneraría alguno de los puntos de los términos de uso de Mailchimp. ¡Si descubres la manera de hacerlo espero que la compartas!
Un saludo y gracias por el comentario.
Hola David.
Me ha parecido muy bueno tu post y me ha servido de mucho por lo menos aclarándome algunas ideas de como es que podría utilizar esta api. Estoy intentando hacer que esto funcione para un proyecto que estoy implementando pero me sucede que estoy por detrás de un proxy y entonces cuando hago la petición para adicionar un correo a alguna de mis listas entonces me da una error 503. Tienes alguna idea de lo que puede ser. Ya le he configurado el proxy al curl para la petición y con otras peticiones me funciona pero cuando intento llamar a mailchimp entonces me da este error.
Hola Rolando
Al parecer la API no funciona detrás de un proxy. Voy a investigar un poco y si encuentro algo te escribo un email.
Muchas gracias por el comentario.
Hola David, qué tal?
Enhorabuena por el contenido, es muy útil. ¿Como podríamos hacer para recuperar el número de suscriptores de una lista?
Salud.
Hola Jordi
Utilizando el método lists con un filtro:
$filters = array('list_id'=>$listId);
$retval = $api->lists($filters);
if ($api->errorCode){
$respuesta="\tCode=".$api->errorCode."\n";
$respuesta.="\tMsg=".$api->errorMessage."\n";
} else {
$respuesta=$retval['data']['0']['stats']["member_count"];
}
¡Un saludo!
Hola,
Tengo una consulta, talvez me puedas ayudar, tengo una cuenta de mailchimp y he generado el API, pero tengo 2 sitios web diferentes, debo generar otro API para mi segundo sitio web?
Muchas gracias de antemano!
Un saludo
Gina
Buenas david.
Queria saber si hay alguna manera para que no pida confirmacion a la hora de añadir a un usuario a una lista ya que solo se va a usar para enviar un correo y sacarles de la lista.
Un saludo.
Hola Cristian:
Pues es la pregunta del millón ¡y sí! ¡Se puede! Consultando la documentación encuentras que:
listSubscribe($id, $email_address, $merge_vars, $email_type = 'html', $double_optin = true, $update_existing = false, $replace_interests = true, $send_welcome = false)
Es decir, que en nuestro ejemplo bastaría con hacer:
$resultado=$mailchimp->listSubscribe( $listId, $email, $merge_vars,'html',false );
Espero que te haya servido.
Un saludo!
buen dia, estoy implementando esto en la web de un colegio y el asunto es este, actualmente tenemos configurado el sistema para que el colegio pueda decidir si enviar el mensaje a todos los representantes del plantel o a los representantes de un grado en especifico (1er grado, por ej.); la cosa es que ahora queremos darles la posibilidad de seleccionar varios grados si asi lo desean, pero no se como tendria q hacer; me puedes ayudar?
Esta es la funcion que implementamos para crear la campaña:
function create_camp($asunto,$html,$email,$name,$key,$lista,$grado){
$type = ‘regular’;
$opts[‘subject’] = $asunto;
$opts[‘from_email’] = $email;
$opts[‘from_name’] = $name;
$opts[‘list_id’] = $lista[‘idList’];
$opts[‘authenticate’] = true;
$opts[‘title’] = $asunto;
//$opts[‘template_id’] = 78801;
$content = array(‘html’=>$html);
$api = new MCAPI($key[‘apikey’],true);
if($grado != ‘0’){
$conditions = array();
$conditions[] = array(‘field’=>’Grado’, ‘op’=>’like’, ‘value’=>$grado.’%’);
$optsSegment = array(‘match’=>’all’, ‘conditions’=>$conditions);
$retval = $api->campaignCreate($type, $opts, $content, $optsSegment);
}else{
$retval = $api->campaignCreate($type, $opts, $content);
}
if ($api->errorCode){
$request[‘mensaje’] = «ERROR DE ENVIO\n\tCode=».$api->errorCode.»\n\tMsg=».$api->errorMessage.»\n»;
$request[‘accion’] = 1;
} else {
//return «New Campaign ID:».$retval.»\n»;
$request[‘idCamp’] = $retval;
$request[‘mensaje’] = «Solicitud enviada.»;
$request[‘accion’] = 2;
}
return $request;
}
Hola David,
Muy bueno el post. En mi caso, quiero usar la API para transportar los contactos que tengo en una web a Mailchimp. Mi pregunta es, si modifico (elimino, añado) algún contacto desde mi web, las actualizaciones se harán también en Mailchimp? Ejemplo:
Tengo una lista de contactos en mi web. La exporto a Mailchimp mediante el proceso que has descrito aquí arriba, a través de la AIP. Una semana mas tarde, añado 3 contactos más a la lista de la web. Esos contactos, ¿se actualizarán al mismo tiempo en la lista de Mailchimp?
Sería un gran alivio que así funcionase, porque evitaría ir actualizando la lista de Mailchimp manualmente.
Gracias!
Por supuesto que sí, cualquier cambio que hagas en la lista mediante la API tendrá su reflejo en el panel de Mailchimp. ¡Cualquier cambio, incluso eliminar! 😀
Hola David,
me ha servido de gran ayuda tu post, pero no consigue sacar la forma para en vez de añadir contactos para eliminarlos.
¿Es posible hacerlo?
Gracias.
Hola David,
me ha servido de gran ayuda tu post, pero no consigue sacar la forma para en vez de añadir contactos para eliminarlos.
¿Es posible hacerlo?
Gracias.