{"id":13732,"date":"2025-10-28T09:00:00","date_gmt":"2025-10-28T09:00:00","guid":{"rendered":"https:\/\/www.mailgun.com\/blog\/criar-fluxos-de-trabalho-transacionais-para-notificacoes-de-carrinho-abandonado\/"},"modified":"2026-06-15T10:51:26","modified_gmt":"2026-06-15T10:51:26","slug":"criar-fluxos-de-trabalho-transacionais-para-notificacoes-de-carrinho-abandonado","status":"publish","type":"blog","link":"https:\/\/www.mailgun.com\/pt\/blog\/dev-life\/criar-fluxos-de-trabalho-transacionais-para-notificacoes-de-carrinho-abandonado\/","title":{"rendered":"Criando fluxos de trabalho de e-mail transacional para notifica\u00e7\u00f5es de carrinho abandonado com a API do Mailgun"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Em aplicativos modernos de com\u00e9rcio eletr\u00f4nico, os e-mails transacionais v\u00e3o al\u00e9m de confirma\u00e7\u00f5es de pedidos e atualiza\u00e7\u00f5es de envio. Eles tamb\u00e9m respondem ao comportamento do usu\u00e1rio; por exemplo, se um usu\u00e1rio adiciona itens ao seu carrinho, mas n\u00e3o conclui a compra, voc\u00ea pode enviar um lembrete, comumente conhecido como uma notifica\u00e7\u00e3o de &#8220;carrinho abandonado&#8221;. Isso n\u00e3o apenas incentiva a conclus\u00e3o, mas tamb\u00e9m fornece um ponto de contato \u00fatil caso o usu\u00e1rio encontre algum problema durante o checkout.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><br>Neste tutorial, voc\u00ea aprender\u00e1 como enviar um e-mail de carrinho abandonado aos usu\u00e1rios usando as APIs do Mailgun.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Implementando fluxos de trabalho de e-mail transacional para notifica\u00e7\u00f5es de carrinho abandonado<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Para implementar fluxos de trabalho de e-mail transacional para notifica\u00e7\u00f5es de carrinho abandonado, voc\u00ea criar\u00e1 uma interface de usu\u00e1rio simples para simular um carrinho de compras e um\u00a0<a href=\"https:\/\/flask.palletsprojects.com\/en\/stable\/\">Flask<\/a>\u00a0backend para rastrear carrinhos abandonados e acionar e-mails transacionais.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><br><strong>Antes de come\u00e7ar, certifique-se de ter o seguinte:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Uma\u00a0<a href=\"https:\/\/signup.mailgun.com\/new\/signup\">conta do Mailgun<\/a>\u00a0para enviar e-mails por meio da API do Mailgun; se voc\u00ea n\u00e3o tiver uma conta, siga o\u00a0<a href=\"https:\/\/documentation.mailgun.com\/docs\/mailgun\/quickstart-guide\/quickstart\/\">guia de in\u00edcio r\u00e1pido<\/a>\u00a0para configurar uma gratuitamente<\/li>\n\n\n\n<li><a href=\"https:\/\/www.python.org\/downloads\/\">Python<\/a>\u00a03.8 ou superior instalado em sua m\u00e1quina<\/li>\n\n\n\n<li>Alguma familiaridade com HTML e JavaScript para entender o c\u00f3digo da interface de usu\u00e1rio<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Configurando uma conta do Mailgun<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Primeiro, fa\u00e7a login em sua conta do Mailgun e anote seu dom\u00ednio de envio no painel do Mailgun. Se voc\u00ea estiver em um plano gratuito, ver\u00e1 um dom\u00ednio sandbox, que ser\u00e1 usado tanto no endpoint da API quanto no endere\u00e7o de e-mail <code>\"from\"<\/code>\u00a0ao enviar e-mails. O dom\u00ednio sandbox segue este formato:\u00a0<code>sandbox.mailgun.org<\/code>:<br><img decoding=\"async\" src=\"https:\/\/i.imgur.com\/7IYAFRf.png\" alt=\"Dom\u00ednio de envio do Mailgun\"><br><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Nota:<\/strong>\u00a0Se voc\u00ea quiser enviar e-mails de seu pr\u00f3prio dom\u00ednio personalizado, precisar\u00e1 de um plano pago do Mailgun. O plano gratuito oferece suporte apenas ao dom\u00ednio sandbox e limita o envio a\u00a0<a href=\"https:\/\/help.mailgun.com\/hc\/en-us\/articles\/217531258-Authorized-Recipients\">cinco destinat\u00e1rios 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\">Se voc\u00ea quiser enviar e-mails de seu pr\u00f3prio dom\u00ednio personalizado, precisar\u00e1 de um plano pago do Mailgun. O plano gratuito oferece suporte apenas ao dom\u00ednio sandbox e limita o envio a <a href=\"https:\/\/help.mailgun.com\/hc\/en-us\/articles\/217531258-Authorized-Recipients\">\u00a0cinco destinat\u00e1rios autorizados.<\/a><\/p><\/div>\r\n    <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\">Em seguida, voc\u00ea precisa gerar uma chave de API na p\u00e1gina de\u00a0<strong>Seguran\u00e7a da API<\/strong>. Voc\u00ea pode encontrar essa op\u00e7\u00e3o no menu suspenso sob o seu nome no canto superior direito do painel do Mailgun:<br><img decoding=\"async\" src=\"https:\/\/i.imgur.com\/YEm9s1u.png\" alt=\"Criando uma chave de API\"><br><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Voc\u00ea usar\u00e1 essa chave de API em seu aplicativo Flask para enviar notifica\u00e7\u00f5es de carrinho abandonado por meio da API do Mailgun.<br><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Configurando um novo projeto Python<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Para configurar um novo projeto, abra um terminal no diret\u00f3rio do projeto de sua prefer\u00eancia e execute os seguintes comandos para buscar o c\u00f3digo necess\u00e1rio \u2013 tanto a interface de usu\u00e1rio quanto o backend \u2013 em sua 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\">Em seguida, dentro do diret\u00f3rio\u00a0<code>mailgun-abandoned-cart-notifications<\/code>, renomeie\u00a0<code>.env.example<\/code>\u00a0para\u00a0<code>.env<\/code>\u00a0e atualize-o com suas credenciais da API do Mailgun:<br><code># Substitua por seu dom\u00ednio e chave de API do Mailgun reais MAILGUN_API_KEY=\"SUA-CHAVE-DE-API\" MAILGUN_DOMAIN=\"SEU-DOMINIO-MAILGUN\"<\/code><br><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Antes de prosseguir, \u00e9 recomend\u00e1vel que voc\u00ea crie e ative um novo\u00a0<a href=\"https:\/\/docs.python.org\/3\/library\/venv.html\">ambiente virtual<\/a>\u00a0para isolar seu projeto e evitar conflitos de depend\u00eancia.<br>Uma vez que seu ambiente virtual esteja ativo, instale as depend\u00eancias necess\u00e1rias:<br><code>pip install -r requirements.txt<\/code><br>Isso instala todos os pacotes necess\u00e1rios, incluindo o\u00a0<code>Flask<\/code>, a estrutura web leve que executa o backend.<br>Ap\u00f3s a conclus\u00e3o da instala\u00e7\u00e3o, inicie o aplicativo Flask com este comando:<br><code>python app.py<\/code><br>A interface de usu\u00e1rio do aplicativo estar\u00e1 dispon\u00edvel em\u00a0<a href=\"http:\/\/localhost:5000\/\">http:\/\/localhost:5000\/<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Criando a interface de carrinho abandonado<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A captura de tela abaixo mostra uma interface de usu\u00e1rio simples de com\u00e9rcio eletr\u00f4nico para simular cen\u00e1rios de carrinho abandonado. Na parte superior, o cabe\u00e7alho exibe o t\u00edtulo, junto com um perfil de usu\u00e1rio (mostrando o nome e e-mail) e um \u00edcone de carrinho de compras indicando o n\u00famero de itens no carrinho. H\u00e1 quatro cart\u00f5es de produtos exibindo imagens, nomes, pre\u00e7os e descri\u00e7\u00f5es, e os usu\u00e1rios podem selecionar quantidades antes de adicionar itens com o bot\u00e3o\u00a0<strong>Add to Cart<\/strong> (Adicionar ao carrinho). No canto inferior esquerdo, um painel de configura\u00e7\u00f5es permite configurar o tempo limite de carrinho abandonado (em segundos) e redefinir o carrinho, se necess\u00e1rio. Na vida real, o tempo limite seria em horas e deveria ser rastreado pelo backend.<br>Voc\u00ea pode usar essa interface para acionar um evento quando um usu\u00e1rio deixa itens em seu carrinho sem concluir a compra:<br><img decoding=\"async\" src=\"https:\/\/i.imgur.com\/c99b7OU.png\" alt=\"Interface de usu\u00e1rio de carrinho abandonado\"><br><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Voc\u00ea pode encontrar o c\u00f3digo para essa interface de carrinho de compras em\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 arquivo tem duas se\u00e7\u00f5es importantes: a configura\u00e7\u00e3o da interface de usu\u00e1rio e uma fun\u00e7\u00e3o para enviar os dados de carrinho abandonado para o backend.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><br>Para a configura\u00e7\u00e3o da interface de usu\u00e1rio, localize e edite\u00a0<code>USER_NAME<\/code>\u00a0e\u00a0<code>USER_EMAIL<\/code>\u00a0dentro da tag\u00a0<code><\/code>\u00a0para enviar os dados corretos para seu backend. Estes dois par\u00e2metros representam o usu\u00e1rio conectado no seu aplicativo de com\u00e9rcio eletr\u00f4nico:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><br><code>\/\/ Configura\u00e7\u00e3o: Substitua estes valores pelos seus pr\u00f3prios const USER_NAME = \"John Smith\"; const USER_EMAIL = \"john.smith@example.com\"; \/\/ E-mail verificado para a conta sandbox do Mailgun const BACKEND_URL = 'http:\/\/localhost:5000\/abandoned-cart'; \/\/ Atualize para o seu endpoint da API do Flask, se necess\u00e1rio let ABANDONED_CART_TIMEOUT = 60; \/\/ Tempo limite padr\u00e3o em 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:\u00a0Se voc\u00ea estiver usando o plano gratuito do Mailgun, certifique-se de que\u00a0USER_EMAIL\u00a0seja um dos endere\u00e7os verificados em sua conta do Mailgun. Voc\u00ea pode deixar os dois par\u00e2metros restantes inalterados.<\/p><\/div>\r\n    <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\"><br>A seguinte fun\u00e7\u00e3o em JavaScript,\u00a0<code>sendToBackend(data)<\/code>, lida com o processo de enviar detalhes do carrinho abandonado \u2013 como informa\u00e7\u00f5es do usu\u00e1rio, itens no carrinho e o valor total \u2013 para o backend com o objetivo de acionar uma notifica\u00e7\u00e3o:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><br><code>\/\/ Enviar dados para o backend function sendToBackend(data) { console.log('Enviando dados do carrinho abandonado para o backend...'); fetch(BACKEND_URL, { method: 'POST', headers: { 'Content-Type': 'application\/json', }, body: JSON.stringify(data) }) .then(response =&gt; { \/\/ Verificar se o status da resposta \u00e9 200 (OK) if (response.status === 200) { return response.json(); } else { \/\/ Lan\u00e7ar um erro se o status n\u00e3o for 200 throw new Error(`Erro HTTP! Status: ${response.status}`); } }) .then(result =&gt; { console.log('Resposta do backend:', result); alert('Notifica\u00e7\u00e3o de carrinho abandonado enviada com sucesso!'); resetCart(); }) .catch(error =&gt; { console.error('Erro ao enviar notifica\u00e7\u00e3o de carrinho abandonado:', error); alert('Erro ao enviar notifica\u00e7\u00e3o de carrinho abandonado. Verifique o console para obter detalhes.'); }); }<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><br>Essa fun\u00e7\u00e3o primeiro faz uma solicita\u00e7\u00e3o HTTP POST para\u00a0<code>BACKEND_URL<\/code>\u00a0usando a chamada\u00a0<code>fetch<\/code>, convertendo os dados do carrinho em um payload JSON.<br>Se o servidor responder com sucesso (HTTP\u00a0<code>200<\/code>), a resposta ser\u00e1 processada e registrada no console, e um alerta confirmar\u00e1 que a notifica\u00e7\u00e3o de carrinho abandonado foi enviada. O carrinho \u00e9 ent\u00e3o redefinido.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><br>Se a solicita\u00e7\u00e3o falhar \u2013 devido a problemas de rede ou a um problema no lado do servidor (como erros HTTP\u00a0<code>5XX<\/code>) \u2013 a fun\u00e7\u00e3o capturar\u00e1 o erro, far\u00e1 o registro no console e alertar\u00e1 o usu\u00e1rio de que algo deu errado. Dessa forma, a fun\u00e7\u00e3o garante que as tentativas bem-sucedidas e com falha de notificar o backend sejam tratadas de forma elegante, mantendo o usu\u00e1rio informado durante todo o processo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><br>O restante do c\u00f3digo em\u00a0<code>shopping_cart.html<\/code>\u00a0lida com a estiliza\u00e7\u00e3o CSS para um layout limpo e visualmente atraente, l\u00f3gica JavaScript para calcular o valor total do carrinho e gerenciamento de temporizador para simular o abandono do carrinho.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Processando notifica\u00e7\u00f5es de carrinho abandonado no backend<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><br>Quando a interface de usu\u00e1rio posta dados de carrinho abandonado para\u00a0<code>BACKEND_URL<\/code>, o aplicativo Flask (<a href=\"https:\/\/github.com\/manishh\/gifts-giveaways\/blob\/master\/python\/mailgun-abandoned-cart-notifications\/app.py\"><code>app.py<\/code><\/a>) os processa usando a seguinte fun\u00e7\u00e3o:<br><code>@app.route('\/abandoned-cart', methods=['POST']) def abandoned_cart(): \"\"\" Endpoint para receber os dados do carrinho abandonado incluindo as informa\u00e7\u00f5es do usu\u00e1rio. Envia uma notifica\u00e7\u00e3o por e-mail para o usu\u00e1rio em quest\u00e3o. \"\"\" try: # Obter dados do carrinho da solicita\u00e7\u00e3o cart_data = request.json # Extrair informa\u00e7\u00f5es do usu\u00e1rio user_info = cart_data.get('user', {}) user_email = user_info.get('email', 'unknown') # Registrar os dados recebidos logger.info(f\"Carrinho abandonado recebido de {user_email} em {datetime.datetime.now()}, Total de itens: {len(cart_data.get('items', []))}\") # Enviar e-mail sobre o carrinho abandonado html_message = _generate_abandoned_cart_email(cart_data) _send_email(f\"{user_info.get('name', user_email)} \", \"Seu carrinho est\u00e1 aguardando...\", html_message) # Retornar resposta de sucesso return jsonify({ \"status\": \"success\", \"message\": f\"Notifica\u00e7\u00e3o de carrinho abandonado enviada para: {user_info.get('email')}\", \"timestamp\": datetime.datetime.now().isoformat(), }), 200 except Exception as e: logger.error(f\"Erro ao processar carrinho abandonado: {str(e)}\") return jsonify({\"status\": \"error\", \"message\": str(e)}), 500<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><br>Este endpoint da API (<code>\/abandoned-cart<\/code>) escuta solicita\u00e7\u00f5es POST quando um usu\u00e1rio abandona o carrinho. Ele extrai os detalhes do carrinho a partir do payload JSON da solicita\u00e7\u00e3o, recupera o nome e o e-mail do usu\u00e1rio, e registra o evento junto com o carimbo de data\/hora e o n\u00famero de itens.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><br>Em seguida, ele gera um e-mail usando\u00a0<code>_generate_abandoned_cart_email(cart_data)<\/code>, que converte os detalhes do carrinho em um modelo de e-mail em HTML organizado. O e-mail \u00e9 ent\u00e3o enviado para o\u00a0<code>user_email<\/code>\u00a0por meio de\u00a0<code>_send_email()<\/code>, usando o assunto &#8220;Seu carrinho est\u00e1 aguardando&#8230;&#8221; para lembrar o usu\u00e1rio de sua compra pendente.<br>Se for bem-sucedida, a fun\u00e7\u00e3o retorna uma resposta JSON confirmando que o e-mail foi enviado. Se ocorrer um erro, como um problema com a solicita\u00e7\u00e3o ou servi\u00e7o de e-mail, ele registrar\u00e1 o erro e retornar\u00e1 uma resposta HTTP\u00a0<code>500 Internal Server Error<\/code>, que a interface de usu\u00e1rio poder\u00e1 usar para informar o usu\u00e1rio sobre o status da notifica\u00e7\u00e3o.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Projetando o modelo de e-mail<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Os e-mails de lembrete de carrinho abandonado n\u00e3o devem ser apenas informativos, mas tamb\u00e9m visualmente atraentes. Um e-mail em HTML bem projetado com imagens apresenta os detalhes do carrinho claramente e aumenta as chances de o usu\u00e1rio retornar para concluir a compra. A fun\u00e7\u00e3o\u00a0<code>_generate_abandoned_cart_email(...)<\/code>\u00a0cuida disso:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><br><code>def _generate_abandoned_cart_email(cart_data: Dict[str, Any]) -&gt; str: \"\"\" Gera um e-mail em HTML para um carrinho abandonado usando os dados do carrinho fornecidos. Args: cart_data: Dicion\u00e1rio contendo as informa\u00e7\u00f5es do carrinho, incluindo detalhes e itens do usu\u00e1rio Returns: String HTML para o e-mail \"\"\" try: # Extrair os dados com tratamento de erros user_name = cart_data.get('user', {}).get('name', 'Cliente Valioso') 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) # Formatar carimbo de data\/hora, se dispon\u00edvel timestamp_str = cart_data.get('timestamp', '') timezone_offset = cart_data.get('timezoneOffset', 0) # Representar o fuso hor\u00e1rio do usu\u00e1rio if timestamp_str: try: timestamp = datetime.datetime.fromisoformat(timestamp_str.replace('Z', '+00:00')) - datetime.timedelta(minutes=timezone_offset) abandonment_time = f\"em <b>{timestamp.strftime('%d de %B \u00e0s %I:%M %p')}<\/b>\" except (ValueError, TypeError): abandonment_time = 'recentemente' else: abandonment_time = 'recentemente' # Gerar o conte\u00fado HTML com CSS m\u00ednimo combinado html = f\"\"\"     \/* Estiliza\u00e7\u00e3o CSS aqui *\/    <div class=\"container\"> <div class=\"header\"> <h1>Seu carrinho est\u00e1 aguardando!<\/h1> <\/div> <div class=\"content\"> <p>Ol\u00e1 {first_name},<\/p> <p>Notamos que voc\u00ea deixou alguns itens em seu carrinho {abandonment_time}. N\u00e3o se preocupe, n\u00f3s os salvamos para voc\u00ea!<\/p> <h2>Itens do seu carrinho:<\/h2>\"\"\" # Adicionar cada item ao e-mail for item in items: item_name = item.get('name', 'Produto') item_price = item.get('price', 0) item_quantity = item.get('quantity', 1) item_image = item.get('image', '') item_description = item.get('description', '') # Formatar tag de imagem com fallback image_tag = f'<img decoding=\"async\" src=\"{item_image}\" alt=\"{item_name}\" style=\"max-width:100%;max-height:100%\">' if item_image else item_name[0].upper() html += f\"\"\" <div class=\"item\"> <div class=\"img\">{image_tag}<\/div> <div class=\"details\"> <h3>{item_name}<\/h3> <p style=\"font-size:14px\">{item_description}<\/p> <p style=\"color:#666\">Quantidade: {item_quantity}<\/p> <p style=\"font-weight:bold\">${item_price:.2f}<\/p> <\/div> <\/div>\"\"\" # Adicionar o total e a chamada para a\u00e7\u00e3o html += f\"\"\" <div class=\"total\">Total: ${total_value:.2f}<\/div> <div style=\"text-align:center\"> <a href=\"#\" class=\"btn\">Conclua Sua Compra<\/a> <\/div> <p>Se voc\u00ea tiver alguma d\u00favida sobre o seu pedido, n\u00e3o hesite em entrar em contato com a nossa equipe de atendimento ao cliente.<\/p> <p>Obrigado por comprar conosco!<\/p> <\/div> <div class=\"footer\"> <p>\u00a9 2025 Nome da Sua Empresa. Todos os direitos reservados.<\/p> <\/div> <\/div>  \"\"\" return html except Exception as e: # Retornar um e-mail de fallback simples se algo der errado return \"\"\"   <h1>Seu Carrinho Est\u00e1 Aguardando!<\/h1> <p>Ol\u00e1,<\/p> <p>Voc\u00ea tem itens aguardando no seu carrinho. Clique abaixo para concluir a sua compra!<\/p> <a href=\"#\" style=\"display:inline-block;background:#eb5454;color:white;padding:10px 20px;text-decoration:none;border-radius:4px;font-weight:bold\">Conclua Sua Compra<\/a>  \"\"\"<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Essa fun\u00e7\u00e3o constr\u00f3i um e-mail em HTML lembrando um usu\u00e1rio sobre o seu carrinho abandonado. Ela primeiro extrai os detalhes principais a partir dos dados fornecidos, incluindo o nome do usu\u00e1rio, os itens do carrinho e o pre\u00e7o total. Se um carimbo de data\/hora estiver dispon\u00edvel, ele o converter\u00e1 para o fuso hor\u00e1rio do usu\u00e1rio (uma vez que os fusos hor\u00e1rios do servidor e do cliente seriam diferentes) e o formatar\u00e1 em uma string de data e hora amig\u00e1vel (como &#8220;em 25 de mar\u00e7o \u00e0s 15h49&#8221;). Caso contr\u00e1rio, o padr\u00e3o ser\u00e1 &#8220;recentemente.&#8221;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><br>O e-mail informa ao usu\u00e1rio que o carrinho foi salvo e lista os itens deixados para tr\u00e1s, incluindo o nome do produto, a quantidade, o pre\u00e7o, a descri\u00e7\u00e3o e uma imagem. O valor total do carrinho \u00e9 exibido em destaque, seguido por um bot\u00e3o\u00a0<strong>Conclua Sua Compra<\/strong>\u00a0para incentivar o usu\u00e1rio a retornar e finalizar a compra.<br>Se ocorrer um erro, como dados ausentes ou problemas de formata\u00e7\u00e3o, a fun\u00e7\u00e3o voltar\u00e1 a usar um e-mail simples com uma mensagem b\u00e1sica e o link de compra. Isso garante que, mesmo que a vers\u00e3o detalhada falhe, os usu\u00e1rios ainda recebam um lembrete para concluir a sua transa\u00e7\u00e3o.<\/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>Dica profissional:<\/b>\u00a0O Mailgun oferece\u00a0modelos de e-mail predefinidos\u00a0e um construtor visual intuitivo para criar e-mails bonitos e responsivos sem escrever uma \u00fanica linha de c\u00f3digo.<\/div>\r\n    <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\">Navegue at\u00e9\u00a0<strong>Send &gt; Sending &gt; Templates<\/strong> (Enviar &gt; Enviando &gt; Modelos) na sua conta do Mailgun para criar os seus pr\u00f3prios modelos de e-mail:<br><img decoding=\"async\" src=\"https:\/\/i.imgur.com\/rJ9PTpE.png\" alt=\"Modelos de e-mail\"><br><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Implementando a funcionalidade de envio de e-mail com a API do Mailgun<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><br>Uma vez que o conte\u00fado do e-mail \u00e9 gerado, ele precisa ser entregue de forma confi\u00e1vel. A fun\u00e7\u00e3o\u00a0<code>_send_email(...)<\/code>\u00a0lida com o envio de notifica\u00e7\u00f5es de carrinho abandonado usando a API do Mailgun:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><br><code>def _send_email(to_address: str, subject: str, html_message: str): \"\"\" Envia um \u00fanico e-mail para o endere\u00e7o de e-mail fornecido usando a API do Mailgun. :param to_address: :param subject: :param message: \"\"\" api_key = os.getenv(\"MAILGUN_API_KEY\") # Obter a chave de API do arquivo `.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: # Sucesso logging.info(f\"E-mail enviado com sucesso para '{to_address}' via API do Mailgun.\") else: # Erro raise RuntimeError(f\"N\u00e3o foi poss\u00edvel enviar o e-mail, motivo: {resp.text}\")<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><br>Essa fun\u00e7\u00e3o l\u00ea\u00a0<code>MAILGUN_API_KEY<\/code>\u00a0e, em seguida, envia um e-mail via API do Mailgun usando uma solicita\u00e7\u00e3o HTTP POST. A solicita\u00e7\u00e3o inclui detalhes essenciais do e-mail, incluindo endere\u00e7o do remetente, endere\u00e7o do destinat\u00e1rio, assunto e conte\u00fado em HTML gerado pela fun\u00e7\u00e3o\u00a0<code>_generate_abandoned_cart_email(...)<\/code>.<br>Se a solicita\u00e7\u00e3o for bem-sucedida (<code>resp.status_code == 200<\/code>), ela registrar\u00e1 uma mensagem de sucesso. Caso contr\u00e1rio, ela gerar\u00e1 uma exce\u00e7\u00e3o com os detalhes da resposta.<br>\u00c9 importante entender que\u00a0<code>_send_email(...)<\/code>\u00a0deliberadamente n\u00e3o lida com erros, deixando isso para a fun\u00e7\u00e3o de chamada (<code>abandoned_cart()<\/code>, que atende ao endpoint\u00a0<code>\/abandoned-cart<\/code>), para que ela possa capturar as exce\u00e7\u00f5es e retornar uma resposta HTTP apropriada. Se o e-mail for enviado com sucesso,\u00a0<code>abandoned_cart()<\/code>\u00a0retornar\u00e1 uma resposta HTTP\u00a0<code>200<\/code>\u00a0confirmando que a notifica\u00e7\u00e3o foi enviada. Se ocorrer um erro, como uma chave de API inv\u00e1lida ou falha de rede, ela retornar\u00e1 uma resposta HTTP\u00a0<code>500<\/code>, garantindo que a interface de usu\u00e1rio seja informada sobre o problema.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Testando o fluxo de trabalho<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Agora que voc\u00ea explorou todos os componentes principais, \u00e9 hora de testar o fluxo de trabalho de e-mail de carrinho abandonado de ponta a ponta.<br>Primeiro, certifique-se de que o seu servidor Flask esteja em execu\u00e7\u00e3o e que a interface de usu\u00e1rio esteja acess\u00edvel no seu navegador em\u00a0<a href=\"http:\/\/localhost:5000\/\">http:\/\/localhost:5000\/<\/a>. Voc\u00ea pode ajustar o tempo limite do carrinho abandonado no painel de configura\u00e7\u00f5es no canto inferior esquerdo da p\u00e1gina, conforme necess\u00e1rio.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><br>Em seguida, adicione alguns itens ao seu carrinho. Toda vez que voc\u00ea adiciona um item, o temporizador de contagem regressiva do carrinho \u00e9 redefinido e recome\u00e7a. Quando terminar, clique no \u00edcone do carrinho para visualizar o painel deslizante, que exibe os produtos selecionados, os seus pre\u00e7os e o bot\u00e3o\u00a0<strong>Proceed to Checkout<\/strong> (Avan\u00e7ar para o Checkout):<\/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\">Em vez de prosseguir com o checkout, permita que o temporizador termine a sua contagem regressiva. Assim que a contagem regressiva chegar a zero, um alerta dever\u00e1 aparecer na interface de usu\u00e1rio confirmando que a notifica\u00e7\u00e3o de carrinho abandonado foi enviada. A mensagem de alerta dever\u00e1 dizer:<br><code>Notifica\u00e7\u00e3o de carrinho abandonado enviada com sucesso!<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><br>Ao mesmo tempo, o terminal do seu aplicativo Flask dever\u00e1 registrar mensagens como esta:<br><code>INFO:__main__:Carrinho abandonado recebido de  em 2025-03-24 14:02:00.077949, Total de itens: 3 INFO:root:E-mail enviado com sucesso para 'Name ' via API do Mailgun.<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><br>Por fim, verifique a sua caixa de entrada em busca do e-mail de carrinho abandonado. Se tudo funcionou corretamente, voc\u00ea dever\u00e1 receber esta mensagem:<\/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>\u00a0Se voc\u00ea estiver usando o plano gratuito do Mailgun, o e-mail poder\u00e1 parar na pasta de spam.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><br>Parab\u00e9ns! Voc\u00ea implementou e testou com sucesso o fluxo de trabalho de notifica\u00e7\u00e3o por e-mail de carrinho abandonado usando a API do Mailgun.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Monitorando e gerenciando e-mails<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Uma vez que os seus e-mails de carrinho abandonado estejam sendo enviados, \u00e9 importante monitorar a entrega deles, rastrear o engajamento e lidar com quaisquer falhas de forma eficaz. O Mailgun fornece ferramentas de relat\u00f3rios integradas para monitorar e-mails enviados, taxas de abertura e falhas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><br>Para acessar esses insights, navegue at\u00e9\u00a0<strong>Enviar &gt; Relat\u00f3rios &gt; M\u00e9tricas<\/strong> em seu painel do 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\">Aqui, voc\u00ea encontrar\u00e1 um detalhamento gr\u00e1fico das principais estat\u00edsticas de e-mail, como:<br><strong>Contagem de envios:<\/strong>\u00a0N\u00famero total de tentativas de envio de e-mails<br><strong>Contagem de entregues:<\/strong>\u00a0E-mails recebidos com sucesso pelos destinat\u00e1rios<br><strong>Contagem de abertos:<\/strong>\u00a0N\u00famero de e-mails abertos pelos destinat\u00e1rios (se o rastreamento de aberturas estiver ativado)<br><strong>Contagem de falhas:<\/strong>\u00a0E-mails que falharam devido a problemas como endere\u00e7os inv\u00e1lidos ou filtro de spam<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><br>Para uma an\u00e1lise mais profunda, a guia\u00a0<strong>Logs<\/strong>\u00a0fornece registros detalhados do status de cada e-mail, enquanto a guia\u00a0<strong>Classifica\u00e7\u00e3o de devolu\u00e7\u00e3o<\/strong>\u00a0ajuda a diagnosticar falhas.<br>Altas taxas de devolu\u00e7\u00e3o podem impactar negativamente a sua entregabilidade de e-mail. Para reduzir as devolu\u00e7\u00f5es, analise regularmente a guia\u00a0<strong>Classifica\u00e7\u00e3o de devolu\u00e7\u00e3o<\/strong>\u00a0no Mailgun, remova e-mails inv\u00e1lidos e use listas de supress\u00e3o para evitar reenvios a endere\u00e7os devolvidos.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclus\u00e3o<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Neste tutorial, voc\u00ea aprendeu como implementar um fluxo de trabalho de e-mail de carrinho abandonado usando o Mailgun. O processo abrangeu a cria\u00e7\u00e3o de uma interface de usu\u00e1rio simples para simular um site de com\u00e9rcio eletr\u00f4nico, o envio de dados do carrinho para o backend, o processamento deles com o Flask, a gera\u00e7\u00e3o de modelos de e-mail, o envio de notifica\u00e7\u00f5es por meio da API do Mailgun e o rastreamento das m\u00e9tricas de entrega. E-mails transacionais como esses ajudam a recuperar vendas perdidas e a melhorar o engajamento do cliente.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><br>Voc\u00ea pode encontrar todo o c\u00f3digo deste tutorial em\u00a0<a href=\"https:\/\/github.com\/manishh\/gifts-giveaways\/tree\/master\/python\/mailgun-abandoned-cart-notifications\">este reposit\u00f3rio do GitHub<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><br>Agora, voc\u00ea pode colocar esse conhecimento em a\u00e7\u00e3o \u2013 integre o Mailgun em seus projetos e comece a usar e-mails transacionais para aprimorar a experi\u00eancia do usu\u00e1rio.\u00a0Explore <a href=\"https:\/\/www.mailgun.com\/pt\/blog\/email\/transactional-html-email-templates\/\">modelos de e-mail transacional<\/a> e <a href=\"https:\/\/signup.mailgun.com\/new\/signup\">experimente a API do Mailgun<\/a>\u00a0gratuitamente hoje mesmo!<\/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                    Mantenha-me informado! Receba \u00f3timos recursos em sua caixa de entrada toda 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-4500\" class=\"form-check-input\"\r\n                                        type=\"checkbox\" name=\"terms\">\r\n                                    <label for=\"formSubscriptionAcceptance-terms-4500\" class=\"form-check-label text-body-color\">\r\n                                        I have read and agree to the Terms of Service.                                        <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-6374\" class=\"form-check-input\"\r\n                                        type=\"checkbox\" name=\"privacy\">\r\n                                    <label for=\"formSubscriptionAcceptance-privacy-6374\" class=\"form-check-label text-body-color\">\r\n                                        I have read and agree to the Privacy Policy.                                        <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                            Envie-me a newsletter da Mailgun. Eu concordo expressamente em receber a newsletter e sei que posso cancelar a inscri\u00e7\u00e3o facilmente a qualquer 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                    Verifique sua caixa de entrada mensalmente para ver sua newsletter da Mailgun!                <\/p>\r\n            <\/div>\r\n        <\/div>\r\n        <\/div>\r\n    <\/div>\r\n","protected":false},"excerpt":{"rendered":"<p>Em aplicativos modernos de com\u00e9rcio eletr\u00f4nico, os e-mails transacionais v\u00e3o al\u00e9m de confirma\u00e7\u00f5es de pedidos e atualiza\u00e7\u00f5es de envio. Eles tamb\u00e9m respondem ao comportamento do usu\u00e1rio; por exemplo, se um usu\u00e1rio adiciona itens ao seu carrinho, mas n\u00e3o conclui a compra, voc\u00ea pode enviar um lembrete, comumente conhecido como uma notifica\u00e7\u00e3o de &#8220;carrinho abandonado&#8221;. Isso [&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-13732","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>Crie fluxos de trabalho de e-mail transacional para mensagens de carrinho abandonado<\/title>\n<meta name=\"description\" content=\"Aprenda como enviar e-mails de carrinho abandonado eficazes usando as APIs do Mailgun para gerenciar e aprimorar suas convers\u00f5es de com\u00e9rcio eletr\u00f4nico.\" \/>\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\/pt\/blog\/dev-life\/criar-fluxos-de-trabalho-transacionais-para-notificacoes-de-carrinho-abandonado\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Crie fluxos de trabalho de e-mail transacional para mensagens de carrinho abandonado\" \/>\n<meta property=\"og:description\" content=\"Aprenda como enviar e-mails de carrinho abandonado eficazes usando as APIs do Mailgun para gerenciar e aprimorar suas convers\u00f5es de com\u00e9rcio eletr\u00f4nico.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.mailgun.com\/pt\/blog\/dev-life\/criar-fluxos-de-trabalho-transacionais-para-notificacoes-de-carrinho-abandonado\/\" \/>\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:26+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\\\/pt\\\/blog\\\/dev-life\\\/criar-fluxos-de-trabalho-transacionais-para-notificacoes-de-carrinho-abandonado\\\/\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/blog\\\/dev-life\\\/criar-fluxos-de-trabalho-transacionais-para-notificacoes-de-carrinho-abandonado\\\/\",\"name\":\"Crie fluxos de trabalho de e-mail transacional para mensagens de carrinho abandonado\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/blog\\\/dev-life\\\/criar-fluxos-de-trabalho-transacionais-para-notificacoes-de-carrinho-abandonado\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/blog\\\/dev-life\\\/criar-fluxos-de-trabalho-transacionais-para-notificacoes-de-carrinho-abandonado\\\/#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:26+00:00\",\"description\":\"Aprenda como enviar e-mails de carrinho abandonado eficazes usando as APIs do Mailgun para gerenciar e aprimorar suas convers\u00f5es de com\u00e9rcio eletr\u00f4nico.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/blog\\\/dev-life\\\/criar-fluxos-de-trabalho-transacionais-para-notificacoes-de-carrinho-abandonado\\\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/blog\\\/dev-life\\\/criar-fluxos-de-trabalho-transacionais-para-notificacoes-de-carrinho-abandonado\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/blog\\\/dev-life\\\/criar-fluxos-de-trabalho-transacionais-para-notificacoes-de-carrinho-abandonado\\\/#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\\\/pt\\\/blog\\\/dev-life\\\/criar-fluxos-de-trabalho-transacionais-para-notificacoes-de-carrinho-abandonado\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/In\u00edcio\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Blog\",\"item\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Criando fluxos de trabalho de e-mail transacional para notifica\u00e7\u00f5es de carrinho abandonado com a API do Mailgun\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/#website\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/\",\"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\\\/pt\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/#organization\",\"name\":\"Transactional Email API Service For Developers | Mailgun\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/#\\\/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\\\/pt\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Crie fluxos de trabalho de e-mail transacional para mensagens de carrinho abandonado","description":"Aprenda como enviar e-mails de carrinho abandonado eficazes usando as APIs do Mailgun para gerenciar e aprimorar suas convers\u00f5es de com\u00e9rcio eletr\u00f4nico.","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\/pt\/blog\/dev-life\/criar-fluxos-de-trabalho-transacionais-para-notificacoes-de-carrinho-abandonado\/","og_locale":"pt_BR","og_type":"article","og_title":"Crie fluxos de trabalho de e-mail transacional para mensagens de carrinho abandonado","og_description":"Aprenda como enviar e-mails de carrinho abandonado eficazes usando as APIs do Mailgun para gerenciar e aprimorar suas convers\u00f5es de com\u00e9rcio eletr\u00f4nico.","og_url":"https:\/\/www.mailgun.com\/pt\/blog\/dev-life\/criar-fluxos-de-trabalho-transacionais-para-notificacoes-de-carrinho-abandonado\/","og_site_name":"Transactional Email API Service For Developers | Mailgun","article_modified_time":"2026-06-15T10:51:26+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\/pt\/blog\/dev-life\/criar-fluxos-de-trabalho-transacionais-para-notificacoes-de-carrinho-abandonado\/","url":"https:\/\/www.mailgun.com\/pt\/blog\/dev-life\/criar-fluxos-de-trabalho-transacionais-para-notificacoes-de-carrinho-abandonado\/","name":"Crie fluxos de trabalho de e-mail transacional para mensagens de carrinho abandonado","isPartOf":{"@id":"https:\/\/www.mailgun.com\/pt\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.mailgun.com\/pt\/blog\/dev-life\/criar-fluxos-de-trabalho-transacionais-para-notificacoes-de-carrinho-abandonado\/#primaryimage"},"image":{"@id":"https:\/\/www.mailgun.com\/pt\/blog\/dev-life\/criar-fluxos-de-trabalho-transacionais-para-notificacoes-de-carrinho-abandonado\/#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:26+00:00","description":"Aprenda como enviar e-mails de carrinho abandonado eficazes usando as APIs do Mailgun para gerenciar e aprimorar suas convers\u00f5es de com\u00e9rcio eletr\u00f4nico.","breadcrumb":{"@id":"https:\/\/www.mailgun.com\/pt\/blog\/dev-life\/criar-fluxos-de-trabalho-transacionais-para-notificacoes-de-carrinho-abandonado\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.mailgun.com\/pt\/blog\/dev-life\/criar-fluxos-de-trabalho-transacionais-para-notificacoes-de-carrinho-abandonado\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.mailgun.com\/pt\/blog\/dev-life\/criar-fluxos-de-trabalho-transacionais-para-notificacoes-de-carrinho-abandonado\/#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\/pt\/blog\/dev-life\/criar-fluxos-de-trabalho-transacionais-para-notificacoes-de-carrinho-abandonado\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.mailgun.com\/pt\/In\u00edcio\/"},{"@type":"ListItem","position":2,"name":"Blog","item":"https:\/\/www.mailgun.com\/pt\/blog\/"},{"@type":"ListItem","position":3,"name":"Criando fluxos de trabalho de e-mail transacional para notifica\u00e7\u00f5es de carrinho abandonado com a API do Mailgun"}]},{"@type":"WebSite","@id":"https:\/\/www.mailgun.com\/pt\/#website","url":"https:\/\/www.mailgun.com\/pt\/","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\/pt\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.mailgun.com\/pt\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Organization","@id":"https:\/\/www.mailgun.com\/pt\/#organization","name":"Transactional Email API Service For Developers | Mailgun","url":"https:\/\/www.mailgun.com\/pt\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.mailgun.com\/pt\/#\/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\/pt\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/www.mailgun.com\/pt\/wp-json\/wp\/v2\/blog\/13732","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mailgun.com\/pt\/wp-json\/wp\/v2\/blog"}],"about":[{"href":"https:\/\/www.mailgun.com\/pt\/wp-json\/wp\/v2\/types\/blog"}],"author":[{"embeddable":true,"href":"https:\/\/www.mailgun.com\/pt\/wp-json\/wp\/v2\/users\/11"}],"version-history":[{"count":2,"href":"https:\/\/www.mailgun.com\/pt\/wp-json\/wp\/v2\/blog\/13732\/revisions"}],"predecessor-version":[{"id":13991,"href":"https:\/\/www.mailgun.com\/pt\/wp-json\/wp\/v2\/blog\/13732\/revisions\/13991"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mailgun.com\/pt\/wp-json\/wp\/v2\/media\/11750"}],"wp:attachment":[{"href":"https:\/\/www.mailgun.com\/pt\/wp-json\/wp\/v2\/media?parent=13732"}],"wp:term":[{"taxonomy":"blog_category","embeddable":true,"href":"https:\/\/www.mailgun.com\/pt\/wp-json\/wp\/v2\/blog_category?post=13732"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}