{"id":13381,"date":"2025-10-28T09:00:00","date_gmt":"2025-10-28T09:00:00","guid":{"rendered":"https:\/\/www.mailgun.com\/blog\/creacion-de-flujos-de-trabajo-transaccionales-para-notificaciones-de-carritos-abandonados\/"},"modified":"2026-06-15T10:51:19","modified_gmt":"2026-06-15T10:51:19","slug":"creacion-de-flujos-de-trabajo-transaccionales-para-notificaciones-de-carritos-abandonados","status":"publish","type":"blog","link":"https:\/\/www.mailgun.com\/es\/blog\/dev-life\/creacion-de-flujos-de-trabajo-transaccionales-para-notificaciones-de-carritos-abandonados\/","title":{"rendered":"Creaci\u00f3n de flujos de trabajo de emails transaccionales para notificaciones de carritos abandonados con la API de Mailgun"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">En las aplicaciones de comercio electr\u00f3nico modernas, los emails transaccionales van m\u00e1s all\u00e1 de las confirmaciones de pedidos y las actualizaciones de env\u00edo. Tambi\u00e9n responden al comportamiento del usuario; por ejemplo, si un usuario a\u00f1ade art\u00edculos a su carrito pero no completa la compra, puedes enviar un recordatorio, conocido com\u00fanmente como notificaci\u00f3n de \u00abcarrito abandonado\u00bb. Esto no solo fomenta que se complete la compra, sino que tambi\u00e9n proporciona un punto de contacto \u00fatil en caso de que el usuario tenga alg\u00fan problema durante el proceso de pago.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><br>En este tutorial, aprender\u00e1s a enviar un email de carrito abandonado a los usuarios utilizando las API de Mailgun.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Implementaci\u00f3n de flujos de trabajo de emails transaccionales para notificaciones de carritos abandonados<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Para implementar flujos de trabajo de emails transaccionales para notificaciones de carritos abandonados, crear\u00e1s una sencilla interfaz de usuario para simular un carrito de la compra y un\u00a0<a href=\"https:\/\/flask.palletsprojects.com\/en\/stable\/\">Flask<\/a>\u00a0backend para hacer un seguimiento de los carritos abandonados y disparar emails transaccionales.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><br><strong>Antes de comenzar, aseg\u00farate de tener lo siguiente:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Una\u00a0<a href=\"https:\/\/signup.mailgun.com\/new\/signup\">Cuenta de Mailgun<\/a>\u00a0para enviar emails a trav\u00e9s de la API de Mailgun; si no tienes una cuenta, sigue las instrucciones\u00a0<a href=\"https:\/\/documentation.mailgun.com\/docs\/mailgun\/quickstart-guide\/quickstart\/\">gu\u00eda de inicio r\u00e1pido<\/a>\u00a0para configurar una de forma gratuita<\/li>\n\n\n\n<li><a href=\"https:\/\/www.python.org\/downloads\/\">Python<\/a>\u00a03.8 o superior instalado en tu m\u00e1quina<\/li>\n\n\n\n<li>Cierta familiaridad con HTML y JavaScript para entender el c\u00f3digo de la interfaz de usuario<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Configurar una cuenta de Mailgun<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Primero, inicia sesi\u00f3n en tu cuenta de Mailgun y anota tu dominio de env\u00edo en el panel de control de Mailgun. Si est\u00e1s en un plan gratuito, ver\u00e1s un dominio sandbox, que se utilizar\u00e1 tanto en el punto de conexi\u00f3n de API como en la direcci\u00f3n de email <code>\"from\"<\/code>\u00a0al enviar emails. El dominio sandbox sigue este formato:\u00a0<code>sandbox.mailgun.org<\/code>:<br><img decoding=\"async\" src=\"https:\/\/i.imgur.com\/7IYAFRf.png\" alt=\"Dominio de env\u00edo de Mailgun\"><br><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Nota:<\/strong>\u00a0Si deseas enviar emails desde tu propio dominio personalizado, necesitar\u00e1s un plan de pago de Mailgun. El plan gratuito solo admite el dominio sandbox y limita el env\u00edo a\u00a0<a href=\"https:\/\/help.mailgun.com\/hc\/en-us\/articles\/217531258-Authorized-Recipients\">cinco destinatarios autorizados<\/a>.<\/p>\n\n\n    <div data-content-type=\"longform\"  class=\"callout text-body-color px-5 py-6 px-md-6 px-lg-7 py-md-7 longform-spacings rounded-lg bg-light\" data-theme=\"light\">\r\n\r\n        <div class=\"content-body\"> <p class=\"mb-0\">Si deseas enviar emails desde tu propio dominio personalizado, necesitar\u00e1s un plan de pago de Mailgun. El plan gratuito solo admite el dominio sandbox y limita el env\u00edo a<a href=\"https:\/\/help.mailgun.com\/hc\/en-us\/articles\/217531258-Authorized-Recipients\">\u00a0cinco destinatarios autorizados.<\/a><\/p><\/div>\r\n    <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\">A continuaci\u00f3n, debes generar una clave de API desde la p\u00e1gina de\u00a0<strong>seguridad de la API<\/strong>. Puedes encontrar esta opci\u00f3n en el men\u00fa desplegable debajo de tu nombre en la esquina superior derecha del panel de control de Mailgun:<br><img decoding=\"async\" src=\"https:\/\/i.imgur.com\/YEm9s1u.png\" alt=\"Crear una clave de API\"><br><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Utilizar\u00e1s esta clave de API en tu aplicaci\u00f3n Flask para enviar notificaciones de carritos abandonados a trav\u00e9s de la API de Mailgun.<br><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Configurar un nuevo proyecto de Python<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Para configurar un nuevo proyecto, abre un terminal dentro del directorio de proyecto que prefieras y ejecuta los siguientes comandos para obtener el c\u00f3digo requerido (tanto la interfaz de usuario como el backend) en tu m\u00e1quina:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><br><code>git clone https:\/\/github.com\/manishh\/gifts-giveaways.git cd gifts-giveaways\/python\/mailgun-abandoned-cart-notifications<\/code><br><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A continuaci\u00f3n, dentro del directorio\u00a0<code>mailgun-abandoned-cart-notifications<\/code>, renombra\u00a0<code>.env.example<\/code>\u00a0a\u00a0<code>.env<\/code>, y actual\u00edzalo con tus credenciales de la API de Mailgun:<br><code># Sustituye por tu clave de API de Mailgun y dominio reales MAILGUN_API_KEY=\"TU-CLAVE-DE-API\" MAILGUN_DOMAIN=\"TU-DOMINIO-DE-MAILGUN\"<\/code><br><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Antes de continuar, es recomendable que crees y actives un nuevo\u00a0<a href=\"https:\/\/docs.python.org\/3\/library\/venv.html\">entorno virtual<\/a>\u00a0para aislar tu proyecto y evitar conflictos de dependencias.<br>Una vez que tu entorno virtual est\u00e9 activo, instala las dependencias requeridas:<br><code>pip install -r requirements.txt<\/code><br>Esto instala todos los paquetes necesarios, incluyendo\u00a0<code>Flask<\/code>, el marco web ligero que ejecuta el backend.<br>Una vez completada la instalaci\u00f3n, inicia la aplicaci\u00f3n Flask con este comando:<br><code>python app.py<\/code><br>La interfaz de usuario de la aplicaci\u00f3n estar\u00e1 disponible en\u00a0<a href=\"http:\/\/localhost:5000\/\">http:\/\/localhost:5000\/<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Creaci\u00f3n de la interfaz de carrito abandonado<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">La captura de pantalla siguiente muestra una sencilla interfaz de usuario de comercio electr\u00f3nico para simular escenarios de carritos abandonados. En la parte superior, el encabezado muestra el t\u00edtulo, junto con un perfil de usuario (mostrando el nombre y el email) y un icono de carrito de la compra que indica el n\u00famero de art\u00edculos en el carrito. Hay cuatro tarjetas de productos que muestran im\u00e1genes, nombres, precios y descripciones, y los usuarios pueden seleccionar cantidades antes de a\u00f1adir art\u00edculos con el bot\u00f3n de\u00a0<strong>A\u00f1adir al carrito<\/strong>. En la parte inferior izquierda, un panel de ajustes te permite configurar el tiempo de espera del carrito abandonado (en segundos) y restablecer el carrito si es necesario. En la vida real, el tiempo de espera ser\u00eda en horas, y el backend deber\u00eda hacer un seguimiento de este.<br>Puedes utilizar esta interfaz para disparar un evento cuando un usuario deja art\u00edculos en su carrito sin completar la compra:<br><img decoding=\"async\" src=\"https:\/\/i.imgur.com\/c99b7OU.png\" alt=\"Interfaz de usuario de carrito abandonado\"><br><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Puedes encontrar el c\u00f3digo para esta interfaz de carrito de la compra en\u00a0<a href=\"https:\/\/github.com\/manishh\/gifts-giveaways\/blob\/master\/python\/mailgun-abandoned-cart-notifications\/templates\/shopping_cart.html\"><code>templates\/shopping_cart.html<\/code><\/a>. Este archivo tiene dos secciones importantes: la configuraci\u00f3n de la interfaz de usuario y una funci\u00f3n para enviar los datos del carrito abandonado al backend.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><br>Para la configuraci\u00f3n de la interfaz de usuario, localiza y edita\u00a0<code>USER_NAME<\/code>\u00a0y\u00a0<code>USER_EMAIL<\/code>\u00a0dentro de la etiqueta\u00a0<code><\/code>\u00a0para enviar los datos correctos a tu backend. Estos dos par\u00e1metros representan al usuario que ha iniciado sesi\u00f3n en tu aplicaci\u00f3n de comercio electr\u00f3nico:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><br><code>\/\/ Configuraci\u00f3n: Sustituye estos por tus propios valores const USER_NAME = \"John Smith\"; const USER_EMAIL = \"john.smith@example.com\"; \/\/ Email verificado para la cuenta sandbox de Mailgun const BACKEND_URL = 'http:\/\/localhost:5000\/abandoned-cart'; \/\/ Actualiza a tu punto de conexi\u00f3n de API de Flask, si es necesario let ABANDONED_CART_TIMEOUT = 60; \/\/ Tiempo de espera predeterminado en segundos<\/code><\/p>\n\n\n    <div data-content-type=\"longform\"  class=\"callout text-body-color px-5 py-6 px-md-6 px-lg-7 py-md-7 longform-spacings rounded-lg bg-light\" data-theme=\"light\">\r\n\r\n        <div class=\"content-body\"> <p>Nota:\u00a0Si utilizas el plan gratuito de Mailgun, aseg\u00farate de que\u00a0USER_EMAIL\u00a0sea una de las direcciones verificadas en tu cuenta de Mailgun. Puedes dejar los dos par\u00e1metros restantes sin cambios.<\/p><\/div>\r\n    <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\"><br>La siguiente funci\u00f3n de JavaScript,\u00a0<code>sendToBackend(data)<\/code>, se encarga del proceso de enviar detalles del carrito abandonado (como la informaci\u00f3n del usuario, los art\u00edculos en el carrito y el valor total) al backend para disparar una notificaci\u00f3n:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><br><code>\/\/ Funci\u00f3n para enviar datos al backend sendToBackend(data) { console.log('Enviando datos de carrito abandonado al backend...'); fetch(BACKEND_URL, { method: 'POST', headers: { 'Content-Type': 'application\/json', }, body: JSON.stringify(data) }) .then(response =&gt; { \/\/ Comprueba si el estado de la respuesta es 200 (OK) if (response.status === 200) { return response.json(); } else { \/\/ Lanza un error si el estado no es 200 throw new Error(`\u00a1Error HTTP! Estado: ${response.status}`); } }) .then(result =&gt; { console.log('Respuesta del backend:', result); alert('\u00a1Notificaci\u00f3n de carrito abandonado enviada con \u00e9xito!'); resetCart(); }) .catch(error =&gt; { console.error('Error al enviar la notificaci\u00f3n de carrito abandonado:', error); alert('Error al enviar la notificaci\u00f3n de carrito abandonado. Consulta la consola para obtener m\u00e1s detalles.'); }); }<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><br>En primer lugar, esta funci\u00f3n hace una solicitud HTTP POST a\u00a0<code>BACKEND_URL<\/code>\u00a0utilizando la llamada\u00a0<code>fetch<\/code>, para convertir los datos del carrito en una carga \u00fatil de JSON.<br>Si el servidor responde correctamente (HTTP\u00a0<code>200<\/code>), la respuesta se procesa y se guarda en los logs de la consola, y una alerta confirma que la notificaci\u00f3n de carrito abandonado se ha enviado. A continuaci\u00f3n, se restablece el carrito.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><br>Si la solicitud falla, debido a problemas de red o a un problema del lado del servidor (como errores HTTP\u00a0<code>5XX<\/code>), la funci\u00f3n detecta el error, lo guarda en los logs de la consola y alerta al usuario de que algo ha salido mal. De este modo, la funci\u00f3n garantiza que tanto los intentos correctos como los fallidos de notificar al backend se gestionan de forma elegante, manteniendo al usuario informado durante todo el proceso.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><br>El c\u00f3digo restante en\u00a0<code>shopping_cart.html<\/code>\u00a0se encarga del estilo CSS para conseguir un dise\u00f1o limpio y visualmente atractivo, de la l\u00f3gica de JavaScript para calcular el valor total del carrito y de la gesti\u00f3n del temporizador para simular el abandono del carrito.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Procesamiento de notificaciones de carritos abandonados en el backend<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><br>Cuando la interfaz de usuario env\u00eda datos de carrito abandonado a\u00a0<code>BACKEND_URL<\/code>, la aplicaci\u00f3n Flask (<a href=\"https:\/\/github.com\/manishh\/gifts-giveaways\/blob\/master\/python\/mailgun-abandoned-cart-notifications\/app.py\"><code>app.py<\/code><\/a>) los procesa utilizando la siguiente funci\u00f3n:<br><code>@app.route('\/abandoned-cart', methods=['POST']) def abandoned_cart(): \"\"\" Punto de conexi\u00f3n para recibir datos de carrito abandonado, incluyendo informaci\u00f3n del usuario. Env\u00eda una notificaci\u00f3n por email al usuario en cuesti\u00f3n. \"\"\" try: # Obtiene los datos del carrito a partir de la solicitud cart_data = request.json # Extrae la informaci\u00f3n del usuario user_info = cart_data.get('user', {}) user_email = user_info.get('email', 'unknown') # Guarda los datos recibidos en los logs logger.info(f\"Carrito abandonado recibido de {user_email} a las {datetime.datetime.now()}, Total de art\u00edculos: {len(cart_data.get('items', []))}\") # Env\u00eda un email sobre el carrito abandonado html_message = _generate_abandoned_cart_email(cart_data) _send_email(f\"{user_info.get('name', user_email)} \", \"Tu carrito te est\u00e1 esperando...\", html_message) # Devuelve la respuesta de \u00e9xito return jsonify({ \"status\": \"success\", \"message\": f\"Notificaci\u00f3n de carrito abandonado enviada a: {user_info.get('email')}\", \"timestamp\": datetime.datetime.now().isoformat(), }), 200 except Exception as e: logger.error(f\"Error al procesar el carrito abandonado: {str(e)}\") return jsonify({\"status\": \"error\", \"message\": str(e)}), 500<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><br>Este punto de conexi\u00f3n de API (<code>\/abandoned-cart<\/code>) escucha solicitudes POST cuando un usuario abandona su carrito. Extrae los detalles del carrito de la carga \u00fatil JSON de la solicitud, recupera el email y el nombre del usuario, y registra el evento en los logs junto con la marca de tiempo y el n\u00famero de art\u00edculos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><br>A continuaci\u00f3n, genera un email utilizando\u00a0<code>_generate_abandoned_cart_email(cart_data)<\/code>, que convierte los detalles del carrito en una ordenada plantilla de email HTML. A continuaci\u00f3n, el email se env\u00eda a\u00a0<code>user_email<\/code>\u00a0a trav\u00e9s de\u00a0<code>_send_email()<\/code>, utilizando el asunto \u00abTu carrito te est\u00e1 esperando&#8230;\u00bb para recordar al usuario su compra pendiente.<br>Si tiene \u00e9xito, la funci\u00f3n devuelve una respuesta JSON para confirmar que el email ha sido enviado. Si se produce un error, como un problema con la solicitud o con el servicio de env\u00edo de emails, guarda el error en los logs y devuelve una respuesta HTTP\u00a0<code>500 Internal Server Error<\/code>, que la interfaz de usuario puede usar para informar al usuario sobre el estado de la notificaci\u00f3n.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Dise\u00f1o de la plantilla de email<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Los emails de recordatorio de carrito abandonado no solo deben ser informativos, sino tambi\u00e9n visualmente atractivos. Un email HTML bien dise\u00f1ado con im\u00e1genes presenta los detalles del carrito de forma clara y aumenta las posibilidades de que el usuario regrese para completar su compra. La funci\u00f3n\u00a0<code>_generate_abandoned_cart_email(...)<\/code>\u00a0se encarga de esto:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><br><code>def _generate_abandoned_cart_email(cart_data: Dict[str, Any]) -&gt; str: \"\"\" Genera un email HTML para un carrito abandonado utilizando los datos proporcionados del carrito. Args: cart_data: Diccionario que contiene la informaci\u00f3n del carrito, incluyendo los detalles del usuario y los art\u00edculos Returns: Cadena HTML para el email \"\"\" try: # Extrae datos con gesti\u00f3n de errores user_name = cart_data.get('user', {}).get('name', 'Estimado cliente') first_name = user_name.split()[0] if ' ' in user_name else user_name items = cart_data.get('items', []) total_value = cart_data.get('totalValue', 0) # Formatea la marca de tiempo si est\u00e1 disponible timestamp_str = cart_data.get('timestamp', '') timezone_offset = cart_data.get('timezoneOffset', 0) # Representa la zona horaria del usuario if timestamp_str: try: timestamp = datetime.datetime.fromisoformat(timestamp_str.replace('Z', '+00:00')) - datetime.timedelta(minutes=timezone_offset) abandonment_time = f\"el <b>{timestamp.strftime('%d de %B a las %H:%M')}<\/b>\" except (ValueError, TypeError): abandonment_time = 'recientemente' else: abandonment_time = 'recientemente' # Genera el contenido HTML con un CSS m\u00ednimo combinado html = f\"\"\"     \/* El estilo CSS va aqu\u00ed *\/    <div class=\"container\"> <div class=\"header\"> <h1>\u00a1Tu carrito te est\u00e1 esperando!<\/h1> \n\n\n<p class=\"wp-block-paragraph\">Esta funci\u00f3n elabora un email HTML que recuerda a un usuario su carrito abandonado. En primer lugar, extrae detalles clave de los datos proporcionados, incluyendo el nombre del usuario, los art\u00edculos del carrito y el precio total. Si hay una marca de tiempo disponible, la convierte a la zona horaria del usuario (ya que las zonas horarias del servidor y del cliente ser\u00edan diferentes) y la formatea en una cadena de fecha y hora f\u00e1cil de leer (como \"el 25 de marzo a las 15:49\"). En caso contrario, el valor predeterminado es \"recientemente\".<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><br>El email informa al usuario de que se ha guardado su carrito y enumera los art\u00edculos que dej\u00f3, incluyendo el nombre del producto, la cantidad, el precio, la descripci\u00f3n y una imagen. El valor total del carrito se muestra de forma destacada, seguido de un bot\u00f3n de\u00a0<strong>Completa tu compra<\/strong>\u00a0para animar al usuario a regresar y terminar el proceso de pago.<br>Si se produce un error, como la falta de datos o problemas de formato, la funci\u00f3n recurre a un email sencillo con un mensaje b\u00e1sico y un enlace de compra. De este modo se garantiza que, aunque la versi\u00f3n detallada falle, los usuarios sigan recibiendo un recordatorio para completar su transacci\u00f3n.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n    <div data-content-type=\"longform\"  class=\"callout text-body-color px-5 py-6 px-md-6 px-lg-7 py-md-7 longform-spacings rounded-lg bg-light\" data-theme=\"light\">\r\n\r\n        <div class=\"content-body\"> <b>Consejo profesional:<\/b>\u00a0Mailgun ofrece\u00a0plantillas de email predise\u00f1adas\u00a0y un editor visual intuitivo para crear emails atractivos y adaptativos sin escribir ni una sola l\u00ednea de c\u00f3digo.<\/div>\r\n    <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\">Navega a\u00a0<strong>Send &gt; Env\u00edos &gt; Plantillas<\/strong>\u00a0en tu cuenta de Mailgun para dise\u00f1ar tus propias plantillas de email:<br><img decoding=\"async\" src=\"https:\/\/i.imgur.com\/rJ9PTpE.png\" alt=\"Plantillas de emails\"><br><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Implementaci\u00f3n de la funcionalidad de env\u00edo de emails con la API de Mailgun<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><br>Una vez generado el contenido del email, debe entregarse de forma fiable. La funci\u00f3n\u00a0<code>_send_email(...)<\/code>\u00a0se encarga de realizar los env\u00edos de notificaciones de carritos abandonados utilizando la API de Mailgun:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><br><code>def _send_email(to_address: str, subject: str, html_message: str): \"\"\" Env\u00eda un solo email a la direcci\u00f3n de email especificada utilizando la API de Mailgun. :param to_address: :param subject: :param message: \"\"\" api_key = os.getenv(\"MAILGUN_API_KEY\") # Obtiene la clave de API del archivo `.env` resp = requests.post(MAILGUN_API_URL, auth=(\"api\", api_key), data={\"from\": FROM_EMAIL_ADDRESS, \"to\": to_address, \"subject\": subject, \"html\": html_message}) if resp.status_code == 200: # \u00c9xito logging.info(f\"Se ha enviado correctamente un email a '{to_address}' a trav\u00e9s de la API de Mailgun.\") else: # Error raise RuntimeError(f\"No se pudo enviar el email, motivo: {resp.text}\")<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><br>Esta funci\u00f3n lee\u00a0<code>MAILGUN_API_KEY<\/code>\u00a0y a continuaci\u00f3n env\u00eda un email a trav\u00e9s de la API de Mailgun mediante una solicitud HTTP POST. La solicitud incluye los detalles b\u00e1sicos del email, como la direcci\u00f3n del remitente, la direcci\u00f3n del destinatario, el asunto y el contenido HTML generado por la funci\u00f3n\u00a0<code>_generate_abandoned_cart_email(...)<\/code>.<br>Si la solicitud tiene \u00e9xito (<code>resp.status_code == 200<\/code>), guarda un mensaje de \u00e9xito en los logs. En caso contrario, genera una excepci\u00f3n con los detalles de la respuesta.<br>Es importante entender que\u00a0<code>_send_email(...)<\/code>\u00a0deliberadamente no gestiona los errores, dej\u00e1ndolo a cargo de la funci\u00f3n de llamada (<code>abandoned_cart()<\/code>, que sirve al punto de conexi\u00f3n\u00a0<code>\/abandoned-cart<\/code>), para que pueda detectar las excepciones y devolver una respuesta HTTP adecuada. Si el email se env\u00eda correctamente,\u00a0<code>abandoned_cart()<\/code>\u00a0devuelve una respuesta HTTP\u00a0<code>200<\/code>\u00a0para confirmar que la notificaci\u00f3n ha sido enviada. Si se produce un error, como una clave de API inv\u00e1lida o un fallo en la red, devuelve una respuesta HTTP\u00a0<code>500<\/code>, asegurando que la interfaz de usuario est\u00e9 informada del problema.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Probar el flujo de trabajo<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Ahora que has explorado todos los componentes clave, es hora de probar el flujo de trabajo del email de carrito abandonado de principio a fin.<br>Primero, aseg\u00farate de que tu servidor Flask se est\u00e9 ejecutando y de que se pueda acceder a la interfaz de usuario en tu navegador en\u00a0<a href=\"http:\/\/localhost:5000\/\">http:\/\/localhost:5000\/<\/a>. Puedes ajustar el tiempo de espera del carrito abandonado en el panel de ajustes en la parte inferior izquierda de la p\u00e1gina seg\u00fan sea necesario.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><br>A continuaci\u00f3n, a\u00f1ade algunos art\u00edculos a tu carrito. Cada vez que a\u00f1ades un art\u00edculo, el temporizador de cuenta atr\u00e1s del carrito se restablece y vuelve a empezar. Cuando hayas terminado, haz clic en el icono del carrito para ver el panel deslizable, que muestra los productos seleccionados, sus precios y el bot\u00f3n de\u00a0<strong>Continuar con el pago<\/strong>:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><br><img decoding=\"async\" src=\"https:\/\/i.imgur.com\/Qos5lQa.png\" alt=\"Triggering an abandoned cart\"><br><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En lugar de continuar con el pago, deja que el temporizador termine su cuenta atr\u00e1s. Una vez que la cuenta atr\u00e1s llegue a cero, deber\u00eda aparecer una alerta en la interfaz de usuario para confirmar que la notificaci\u00f3n de carrito abandonado se ha enviado. El mensaje de alerta deber\u00eda decir:<br><code>\u00a1Notificaci\u00f3n de carrito abandonado enviada con \u00e9xito!<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><br>Al mismo tiempo, el terminal de tu aplicaci\u00f3n Flask deber\u00eda registrar mensajes en los logs como este:<br><code>INFO:__main__:Carrito abandonado recibido de  a las 2025-03-24 14:02:00.077949, Total de art\u00edculos: 3 INFO:root:Se ha enviado correctamente un email a 'Nombre ' a trav\u00e9s de la API de Mailgun.<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><br>Por \u00faltimo, revisa tu bandeja de entrada en busca del email de carrito abandonado. Si todo ha funcionado correctamente, deber\u00edas recibir este mensaje:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><br><img decoding=\"async\" src=\"https:\/\/i.imgur.com\/Jd0ferZ.png\" alt=\"Abandoned cart notification email\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><br><strong>Nota:<\/strong>\u00a0Si utilizas el plan gratuito de Mailgun, el email puede acabar en la carpeta de spam.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><br>\u00a1Enhorabuena! Has implementado y probado con \u00e9xito el flujo de trabajo de notificaciones por email de carritos abandonados utilizando la API de Mailgun.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Seguimiento y gesti\u00f3n de emails<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Una vez que se realizan los env\u00edos de los emails de carritos abandonados, es importante hacer un seguimiento de su entrega, seguir la interacci\u00f3n y gestionar los fallos de forma eficaz. Mailgun proporciona herramientas de panel de informes integradas para hacer un seguimiento de los emails enviados, las tasas de aperturas y los fallos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><br>Para acceder a esta informaci\u00f3n estrat\u00e9gica, navega a\u00a0<strong>Send &gt; Panel de informes &gt; M\u00e9tricas<\/strong>\u00a0en el panel de control de Mailgun:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><br><img decoding=\"async\" src=\"https:\/\/i.imgur.com\/J71wf64.png\" alt=\"Mailgun email monitoring\"><br><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Aqu\u00ed encontrar\u00e1s un desglose gr\u00e1fico de las estad\u00edsticas de email clave, como:<br><strong>Recuento de enviados:<\/strong>\u00a0N\u00famero total de emails intentados<br><strong>Recuento de entregados:<\/strong>\u00a0Emails recibidos con \u00e9xito por los destinatarios<br><strong>Recuento de abiertos:<\/strong>\u00a0N\u00famero de aperturas de emails por los destinatarios (si se ha activado el seguimiento de aperturas)<br><strong>Recuento de fallidos:<\/strong>\u00a0Emails que han fallado debido a problemas como direcciones inv\u00e1lidas o filtros de correo no deseado<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><br>Para un an\u00e1lisis m\u00e1s profundo, la pesta\u00f1a\u00a0<strong>Logs<\/strong>\u00a0proporciona registros detallados del estado de cada email, mientras que la pesta\u00f1a de\u00a0<strong>clasificaci\u00f3n de rebotes<\/strong>\u00a0ayuda a diagnosticar los fallos.<br>Una alta tasa de rebotes puede afectar de forma negativa a la entregabilidad de tu email. Para reducir los rebotes, revisa peri\u00f3dicamente la pesta\u00f1a de\u00a0<strong>clasificaci\u00f3n de rebotes<\/strong>\u00a0en Mailgun, elimina los emails inv\u00e1lidos y utiliza listas de supresi\u00f3n para evitar reenv\u00edos a las direcciones de los rebotes.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">En resumen<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">En este tutorial, has aprendido c\u00f3mo implementar un flujo de trabajo de emails de carritos abandonados utilizando Mailgun. El proceso abarc\u00f3 la creaci\u00f3n de una interfaz de usuario sencilla para simular un sitio de comercio electr\u00f3nico, los env\u00edos de datos del carrito al backend, su procesamiento con Flask, la generaci\u00f3n de plantillas de email, los env\u00edos de notificaciones a trav\u00e9s de la API de Mailgun y el seguimiento de las m\u00e9tricas de entrega. Los emails transaccionales como estos son una gran ayuda para recuperar ventas perdidas y mejorar la interacci\u00f3n del cliente.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><br>Puedes encontrar el c\u00f3digo completo de este tutorial en\u00a0<a href=\"https:\/\/github.com\/manishh\/gifts-giveaways\/tree\/master\/python\/mailgun-abandoned-cart-notifications\">este repositorio de GitHub<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><br>Ahora puedes poner estos conocimientos en pr\u00e1ctica: integra Mailgun en tus proyectos y comienza a usar emails transaccionales para mejorar la experiencia de usuario.\u00a0Explorar <a href=\"https:\/\/www.mailgun.com\/es\/blog\/email\/plantillas-de-email-html-transaccional\/\">Plantillas para correos transaccionales<\/a> y <a href=\"https:\/\/signup.mailgun.com\/new\/signup\">prueba la API de Mailgun<\/a>\u00a0gratis hoy mismo!<\/p>\n\n\n    <div data-content-type=\"longform\" class=\"longform-spacings\">\r\n        <div class=\"cta bg-primary rounded-lg px-5 py-6 p-md-7 px-md-6\">\r\n                    <div class=\"form-subscription\">\r\n                            <div class=\"h4 mb-3\">\r\n                    \u00a1Mantenme al d\u00eda! Recibe excelentes recursos en tu bandeja de entrada cada semana.                <\/div>\r\n                                    <form accept-charset=\"UTF-8\" action=\"\" enctype=\"multipart\/form-data\" data-form-subscription method=\"POST\" style=\"max-width: 400px;\">\r\n                <div class=\"row justify-content-between align-items-top g-2\">\r\n                    <div class=\"col-10\">\r\n                        <input type=\"email\" name=\"email\" class=\"form-control\" placeholder=\"Email\" autocomplete=\"email\" required>\r\n                        <div data-fs=\"error\" role=\"alert\" class=\"invalid-feedback\">\r\n                            Please complete this required field.                        <\/div>\r\n                    <\/div>\r\n                                            <div class=\"col-12 order-last mt-3 fs-xxs\" data-fs=\"acceptance\" style=\"display:none;\">\r\n                            \r\n                                <div class=\"form-check\">\r\n                                    <input id=\"formSubscriptionAcceptance-terms-4852\" class=\"form-check-input\"\r\n                                        type=\"checkbox\" name=\"terms\">\r\n                                    <label for=\"formSubscriptionAcceptance-terms-4852\" class=\"form-check-label text-body-color\">\r\n                                        He le\u00eddo y acepto los T\u00e9rminos de Servicio.                                        <span class=\"hs-form-required\">*<\/span>\r\n                                    <\/label>\r\n                                <\/div>\r\n\r\n                            \r\n                                <div class=\"form-check\">\r\n                                    <input id=\"formSubscriptionAcceptance-privacy-1974\" class=\"form-check-input\"\r\n                                        type=\"checkbox\" name=\"privacy\">\r\n                                    <label for=\"formSubscriptionAcceptance-privacy-1974\" class=\"form-check-label text-body-color\">\r\n                                        He le\u00eddo y acepto la Pol\u00edtica de Privacidad.                                        <span class=\"hs-form-required\">*<\/span>\r\n                                    <\/label>\r\n                                <\/div>\r\n\r\n                                                    <\/div>\r\n                    \r\n                                            <div class=\"col-12 order-last fs-xxs mb-0 mt-2 text-body-color\">\r\n                            Env\u00edame la newsletter de Mailgun. Acepto expresamente recibir la newsletter y s\u00e9 que puedo darme de baja f\u00e1cilmente en cualquier momento.                        <\/div>\r\n                    \r\n                    <div class=\"col-2\">\r\n                        <button type=\"submit\" value=\"Submit\" aria-label=\"Submit\" class=\"btn btn-secondary btn-icon\">\r\n                            <svg aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/layout\/chevron-right.svg\"><\/svg>\r\n                        <\/button>\r\n                    <\/div>\r\n                <\/div>\r\n\r\n                <input type=\"hidden\" name=\"formSubscriptionRecaptchaToken\" data-fs=\"recaptcha-token\">\r\n                <input type=\"hidden\" name=\"customListID\" value=\"\">\r\n\r\n            <\/form>\r\n            <div data-fs=\"message-success\" style=\"display: none;\">\r\n                <p class=\"mb-0 mt-2 text-body-color\">\r\n                    \u00a1Revisa tu bandeja de entrada cada mes para ver tu newsletter de Mailgun!                <\/p>\r\n            <\/div>\r\n        <\/div>\r\n        <\/div>\r\n    <\/div>\r\n","protected":false},"excerpt":{"rendered":"<p>En las aplicaciones de comercio electr\u00f3nico modernas, los emails transaccionales van m\u00e1s all\u00e1 de las confirmaciones de pedidos y las actualizaciones de env\u00edo. Tambi\u00e9n responden al comportamiento del usuario; por ejemplo, si un usuario a\u00f1ade art\u00edculos a su carrito pero no completa la compra, puedes enviar un recordatorio, conocido com\u00fanmente como notificaci\u00f3n de \u00abcarrito abandonado\u00bb. [&hellip;]<\/p>\n","protected":false},"author":11,"featured_media":11750,"menu_order":0,"template":"","meta":{"_acf_changed":true,"footnotes":""},"blog_category":[19],"class_list":["post-13381","blog","type-blog","status-publish","has-post-thumbnail","hentry","blog_category-dev-life"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Creaci\u00f3n de flujos de trabajo de emails transaccionales para mensajes de carritos abandonados<\/title>\n<meta name=\"description\" content=\"Aprende a realizar env\u00edos eficaces de emails de carritos abandonados utilizando las API de Mailgun para gestionar y mejorar las conversiones de tu comercio electr\u00f3nico.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.mailgun.com\/es\/blog\/dev-life\/creacion-de-flujos-de-trabajo-transaccionales-para-notificaciones-de-carritos-abandonados\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Creaci\u00f3n de flujos de trabajo de emails transaccionales para mensajes de carritos abandonados\" \/>\n<meta property=\"og:description\" content=\"Aprende a realizar env\u00edos eficaces de emails de carritos abandonados utilizando las API de Mailgun para gestionar y mejorar las conversiones de tu comercio electr\u00f3nico.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.mailgun.com\/es\/blog\/dev-life\/creacion-de-flujos-de-trabajo-transaccionales-para-notificaciones-de-carritos-abandonados\/\" \/>\n<meta property=\"og:site_name\" content=\"Transactional Email API Service For Developers | Mailgun\" \/>\n<meta property=\"article:modified_time\" content=\"2026-06-15T10:51:19+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/08\/Screenshot-2025-08-25-at-3.37.12-PM.png\" \/>\n\t<meta property=\"og:image:width\" content=\"2466\" \/>\n\t<meta property=\"og:image:height\" content=\"1532\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"10 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/blog\\\/dev-life\\\/creacion-de-flujos-de-trabajo-transaccionales-para-notificaciones-de-carritos-abandonados\\\/\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/blog\\\/dev-life\\\/creacion-de-flujos-de-trabajo-transaccionales-para-notificaciones-de-carritos-abandonados\\\/\",\"name\":\"Creaci\u00f3n de flujos de trabajo de emails transaccionales para mensajes de carritos abandonados\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/blog\\\/dev-life\\\/creacion-de-flujos-de-trabajo-transaccionales-para-notificaciones-de-carritos-abandonados\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/blog\\\/dev-life\\\/creacion-de-flujos-de-trabajo-transaccionales-para-notificaciones-de-carritos-abandonados\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/08\\\/Screenshot-2025-08-25-at-3.37.12-PM.png\",\"datePublished\":\"2025-10-28T09:00:00+00:00\",\"dateModified\":\"2026-06-15T10:51:19+00:00\",\"description\":\"Aprende a realizar env\u00edos eficaces de emails de carritos abandonados utilizando las API de Mailgun para gestionar y mejorar las conversiones de tu comercio electr\u00f3nico.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/blog\\\/dev-life\\\/creacion-de-flujos-de-trabajo-transaccionales-para-notificaciones-de-carritos-abandonados\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.mailgun.com\\\/es\\\/blog\\\/dev-life\\\/creacion-de-flujos-de-trabajo-transaccionales-para-notificaciones-de-carritos-abandonados\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/blog\\\/dev-life\\\/creacion-de-flujos-de-trabajo-transaccionales-para-notificaciones-de-carritos-abandonados\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/08\\\/Screenshot-2025-08-25-at-3.37.12-PM.png\",\"contentUrl\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/08\\\/Screenshot-2025-08-25-at-3.37.12-PM.png\",\"width\":2466,\"height\":1532},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/blog\\\/dev-life\\\/creacion-de-flujos-de-trabajo-transaccionales-para-notificaciones-de-carritos-abandonados\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Blog\",\"item\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Creaci\u00f3n de flujos de trabajo de emails transaccionales para notificaciones de carritos abandonados con la API de Mailgun\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/#website\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/\",\"name\":\"Transactional Email API Service For Developers | Mailgun\",\"description\":\"Powerful Transactional Email APIs that enable you to send, receive, and track emails, built with developers in mind. Learn more today!\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/#organization\",\"name\":\"Transactional Email API Service For Developers | Mailgun\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/cropped-android-chrome-512x512-1.png\",\"contentUrl\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/cropped-android-chrome-512x512-1.png\",\"width\":512,\"height\":512,\"caption\":\"Transactional Email API Service For Developers | Mailgun\"},\"image\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Creaci\u00f3n de flujos de trabajo de emails transaccionales para mensajes de carritos abandonados","description":"Aprende a realizar env\u00edos eficaces de emails de carritos abandonados utilizando las API de Mailgun para gestionar y mejorar las conversiones de tu comercio electr\u00f3nico.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.mailgun.com\/es\/blog\/dev-life\/creacion-de-flujos-de-trabajo-transaccionales-para-notificaciones-de-carritos-abandonados\/","og_locale":"es_ES","og_type":"article","og_title":"Creaci\u00f3n de flujos de trabajo de emails transaccionales para mensajes de carritos abandonados","og_description":"Aprende a realizar env\u00edos eficaces de emails de carritos abandonados utilizando las API de Mailgun para gestionar y mejorar las conversiones de tu comercio electr\u00f3nico.","og_url":"https:\/\/www.mailgun.com\/es\/blog\/dev-life\/creacion-de-flujos-de-trabajo-transaccionales-para-notificaciones-de-carritos-abandonados\/","og_site_name":"Transactional Email API Service For Developers | Mailgun","article_modified_time":"2026-06-15T10:51:19+00:00","og_image":[{"width":2466,"height":1532,"url":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/08\/Screenshot-2025-08-25-at-3.37.12-PM.png","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"10 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.mailgun.com\/es\/blog\/dev-life\/creacion-de-flujos-de-trabajo-transaccionales-para-notificaciones-de-carritos-abandonados\/","url":"https:\/\/www.mailgun.com\/es\/blog\/dev-life\/creacion-de-flujos-de-trabajo-transaccionales-para-notificaciones-de-carritos-abandonados\/","name":"Creaci\u00f3n de flujos de trabajo de emails transaccionales para mensajes de carritos abandonados","isPartOf":{"@id":"https:\/\/www.mailgun.com\/es\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.mailgun.com\/es\/blog\/dev-life\/creacion-de-flujos-de-trabajo-transaccionales-para-notificaciones-de-carritos-abandonados\/#primaryimage"},"image":{"@id":"https:\/\/www.mailgun.com\/es\/blog\/dev-life\/creacion-de-flujos-de-trabajo-transaccionales-para-notificaciones-de-carritos-abandonados\/#primaryimage"},"thumbnailUrl":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/08\/Screenshot-2025-08-25-at-3.37.12-PM.png","datePublished":"2025-10-28T09:00:00+00:00","dateModified":"2026-06-15T10:51:19+00:00","description":"Aprende a realizar env\u00edos eficaces de emails de carritos abandonados utilizando las API de Mailgun para gestionar y mejorar las conversiones de tu comercio electr\u00f3nico.","breadcrumb":{"@id":"https:\/\/www.mailgun.com\/es\/blog\/dev-life\/creacion-de-flujos-de-trabajo-transaccionales-para-notificaciones-de-carritos-abandonados\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.mailgun.com\/es\/blog\/dev-life\/creacion-de-flujos-de-trabajo-transaccionales-para-notificaciones-de-carritos-abandonados\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.mailgun.com\/es\/blog\/dev-life\/creacion-de-flujos-de-trabajo-transaccionales-para-notificaciones-de-carritos-abandonados\/#primaryimage","url":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/08\/Screenshot-2025-08-25-at-3.37.12-PM.png","contentUrl":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/08\/Screenshot-2025-08-25-at-3.37.12-PM.png","width":2466,"height":1532},{"@type":"BreadcrumbList","@id":"https:\/\/www.mailgun.com\/es\/blog\/dev-life\/creacion-de-flujos-de-trabajo-transaccionales-para-notificaciones-de-carritos-abandonados\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.mailgun.com\/es\/"},{"@type":"ListItem","position":2,"name":"Blog","item":"https:\/\/www.mailgun.com\/es\/blog\/"},{"@type":"ListItem","position":3,"name":"Creaci\u00f3n de flujos de trabajo de emails transaccionales para notificaciones de carritos abandonados con la API de Mailgun"}]},{"@type":"WebSite","@id":"https:\/\/www.mailgun.com\/es\/#website","url":"https:\/\/www.mailgun.com\/es\/","name":"Transactional Email API Service For Developers | Mailgun","description":"Powerful Transactional Email APIs that enable you to send, receive, and track emails, built with developers in mind. Learn more today!","publisher":{"@id":"https:\/\/www.mailgun.com\/es\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.mailgun.com\/es\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/www.mailgun.com\/es\/#organization","name":"Transactional Email API Service For Developers | Mailgun","url":"https:\/\/www.mailgun.com\/es\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.mailgun.com\/es\/#\/schema\/logo\/image\/","url":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/06\/cropped-android-chrome-512x512-1.png","contentUrl":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/06\/cropped-android-chrome-512x512-1.png","width":512,"height":512,"caption":"Transactional Email API Service For Developers | Mailgun"},"image":{"@id":"https:\/\/www.mailgun.com\/es\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/www.mailgun.com\/es\/wp-json\/wp\/v2\/blog\/13381","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mailgun.com\/es\/wp-json\/wp\/v2\/blog"}],"about":[{"href":"https:\/\/www.mailgun.com\/es\/wp-json\/wp\/v2\/types\/blog"}],"author":[{"embeddable":true,"href":"https:\/\/www.mailgun.com\/es\/wp-json\/wp\/v2\/users\/11"}],"version-history":[{"count":2,"href":"https:\/\/www.mailgun.com\/es\/wp-json\/wp\/v2\/blog\/13381\/revisions"}],"predecessor-version":[{"id":13989,"href":"https:\/\/www.mailgun.com\/es\/wp-json\/wp\/v2\/blog\/13381\/revisions\/13989"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mailgun.com\/es\/wp-json\/wp\/v2\/media\/11750"}],"wp:attachment":[{"href":"https:\/\/www.mailgun.com\/es\/wp-json\/wp\/v2\/media?parent=13381"}],"wp:term":[{"taxonomy":"blog_category","embeddable":true,"href":"https:\/\/www.mailgun.com\/es\/wp-json\/wp\/v2\/blog_category?post=13381"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}