<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>API Archives - Leonardo Nascimento | Engenheiro de Software</title>
	<atom:link href="https://leonardonascimento.dev/categoria/api/feed/" rel="self" type="application/rss+xml" />
	<link>https://leonardonascimento.dev/categoria/api/</link>
	<description>Especializado em backend, APIs e sistemas escaláveis. Experiência em arquitetura de sistemas, integrações, mensageria, performance e aplicações de alta disponibilidade.</description>
	<lastBuildDate>Thu, 29 Jan 2026 16:54:19 +0000</lastBuildDate>
	<language>pt-BR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://leonardonascimento.dev/wp-content/uploads/2021/05/cropped-programming-32x32.png</url>
	<title>API Archives - Leonardo Nascimento | Engenheiro de Software</title>
	<link>https://leonardonascimento.dev/categoria/api/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Arquitetura de uma API REST em Laravel preparada para produção</title>
		<link>https://leonardonascimento.dev/blog/arquitetura-de-uma-api-rest-em-laravel-preparada-para-producao/</link>
					<comments>https://leonardonascimento.dev/blog/arquitetura-de-uma-api-rest-em-laravel-preparada-para-producao/#respond</comments>
		
		<dc:creator><![CDATA[Leonardo]]></dc:creator>
		<pubDate>Wed, 28 Jan 2026 22:44:00 +0000</pubDate>
				<category><![CDATA[API]]></category>
		<category><![CDATA[Arquitetura]]></category>
		<category><![CDATA[Backend]]></category>
		<category><![CDATA[Dicas & Truques]]></category>
		<category><![CDATA[Laravel]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[teste]]></category>
		<category><![CDATA[api rest]]></category>
		<category><![CDATA[arquitetura de software]]></category>
		<category><![CDATA[autenticação api]]></category>
		<category><![CDATA[backend]]></category>
		<category><![CDATA[cache]]></category>
		<category><![CDATA[ci/cd]]></category>
		<category><![CDATA[clean architecture]]></category>
		<category><![CDATA[desenvolvimento backend]]></category>
		<category><![CDATA[docker]]></category>
		<category><![CDATA[docker compose]]></category>
		<category><![CDATA[documentação api]]></category>
		<category><![CDATA[engenharia de software]]></category>
		<category><![CDATA[github actions]]></category>
		<category><![CDATA[laravel]]></category>
		<category><![CDATA[laravel sanctum]]></category>
		<category><![CDATA[postgresql]]></category>
		<category><![CDATA[projeto para portfólio]]></category>
		<category><![CDATA[redis]]></category>
		<category><![CDATA[repository pattern]]></category>
		<category><![CDATA[service layer]]></category>
		<category><![CDATA[swagger]]></category>
		<category><![CDATA[testes automatizados]]></category>
		<guid isPermaLink="false">https://leonardonascimento.dev/?p=2358</guid>

					<description><![CDATA[<p>Em processos seletivos técnicos, não basta entregar código funcional. Cada vez mais, empresas avaliam arquitetura, decisões técnicas, organização do projeto, automação e capacidade de escalar a solução. Este artigo detalha a arquitetura de uma API REST desenvolvida em Laravel para gerenciamento de tarefas, criada como parte de um teste técnico, mas estruturada como um projeto [&#8230;]</p>
<p>The post <a href="https://leonardonascimento.dev/blog/arquitetura-de-uma-api-rest-em-laravel-preparada-para-producao/">Arquitetura de uma API REST em Laravel preparada para produção</a> appeared first on <a href="https://leonardonascimento.dev">Leonardo Nascimento | Engenheiro de Software</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Em processos seletivos técnicos, não basta entregar código funcional. Cada vez mais, empresas avaliam <strong>arquitetura, decisões técnicas, organização do projeto, automação e capacidade de escalar a solução</strong>.</p>



<p>Este artigo detalha a arquitetura de uma <strong><a href="https://leonardonascimento.dev/blog/como-monitorar-aplicacao-e-servidor-pelo-whatsapp-logs-erros-e-alertas/" type="post" id="2290">API REST</a> desenvolvida em Laravel para gerenciamento de tarefas</strong>, <a href="https://github.com/leonardop21/laravel-task" type="link" id="https://github.com/leonardop21/laravel-task" target="_blank" rel="noreferrer noopener nofollow">criada como parte de um teste técnico,</a> mas estruturada como um projeto <strong>pronto para produção</strong>, seguindo boas práticas amplamente utilizadas em ambientes corporativos.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-visao-geral-da-solucao">Visão geral da solução</h2>



<p>A aplicação consiste em uma <strong>API RESTful para gerenciamento de tarefas</strong>, com suporte a:</p>



<ul class="wp-block-list">
<li>Autenticação via Bearer Token (Laravel Sanctum)</li>



<li>CRUD completo de tarefas</li>



<li>Marcação de tarefas como concluídas</li>



<li>Cache de consultas com Redis</li>



<li>Banco de dados PostgreSQL</li>



<li>Documentação interativa via Swagger</li>



<li>Ambiente Dockerizado (dev, test e prod)</li>



<li>Testes automatizados</li>



<li>Pipeline de CI/CD com GitHub Actions</li>
</ul>



<p>O foco não foi apenas “fazer funcionar”, mas <strong>pensar a aplicação como um produto escalável e previsível</strong>.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-decisao-arquitetural-api-stateless-e-autenticacao">Decisão arquitetural: API stateless e autenticação</h2>



<p>A API foi construída como <strong>stateless</strong>, utilizando <strong>Bearer Token via Laravel Sanctum</strong>.</p>



<h3 class="wp-block-heading" id="h-beneficios-dessa-abordagem">Benefícios dessa abordagem:</h3>



<ul class="wp-block-list">
<li>Facilidade de integração com frontends (SPA, mobile, terceiros)</li>



<li>Independência de sessão</li>



<li>Escalabilidade horizontal</li>



<li>Compatibilidade com gateways, load balancers e proxies</li>
</ul>



<p>A autenticação é desacoplada do fluxo de negócio, o que facilita manutenção e evolução futura.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-postgresql-como-banco-principal">PostgreSQL como banco principal</h2>



<p>A escolha do <strong>PostgreSQL</strong> não foi aleatória. Ele é amplamente utilizado em ambientes corporativos por oferecer:</p>



<ul class="wp-block-list">
<li>Confiabilidade transacional</li>



<li>Suporte avançado a índices</li>



<li>Tipos de dados ricos</li>



<li>Excelente desempenho em cenários complexos</li>
</ul>



<p>Isso torna a aplicação preparada para crescer sem precisar trocar a base de dados no curto ou médio prazo.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-redis-como-camada-de-cache">Redis como camada de cache</h2>



<p>Para reduzir carga no banco e melhorar tempo de resposta, foi implementado <strong>cache com Redis</strong>, com TTL de 120 segundos nas consultas mais comuns.</p>



<h3 class="wp-block-heading" id="h-beneficios-diretos">Benefícios diretos:</h3>



<ul class="wp-block-list">
<li>Redução de queries repetitivas</li>



<li>Menor latência</li>



<li>Melhor desempenho sob carga</li>



<li>Escalabilidade em leitura</li>
</ul>



<p>Essa abordagem demonstra preocupação com <strong>performance real</strong>, não apenas com lógica funcional.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-arquitetura-limpa-repository-pattern-service-layer">Arquitetura limpa: Repository Pattern + Service Layer</h2>



<p><a href="https://leonardonascimento.dev/blog/php-alem-do-crud-como-escrever-codigo-que-nao-vira-problema-em-producao/" type="post" id="2348">A aplicação segue princípios de <strong>Clean Architecture</strong></a>, separando responsabilidades de forma clara:</p>



<ul class="wp-block-list">
<li><strong>Controllers</strong>: recebem requisições e retornam respostas</li>



<li><strong>Services</strong>: concentram regras de negócio</li>



<li><strong>Repositories</strong>: isolam o acesso a dados</li>



<li><strong>Models</strong>: representam as entidades</li>
</ul>



<h3 class="wp-block-heading" id="h-vantagens-dessa-separacao">Vantagens dessa separação:</h3>



<ul class="wp-block-list">
<li>Código mais legível</li>



<li>Facilidade de testes</li>



<li>Menor acoplamento</li>



<li>Evolução segura do domínio</li>
</ul>



<p>Essa estrutura é comum em times maduros e projetos de longo prazo.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-docker-como-base-do-ambiente">Docker como base do ambiente</h2>



<p>Toda a aplicação roda em <strong>Docker</strong>, com ambientes bem definidos:</p>



<h3 class="wp-block-heading" id="h-desenvolvimento">Desenvolvimento</h3>



<ul class="wp-block-list">
<li>Código em volume</li>



<li>Hot reload</li>



<li>PostgreSQL + Redis + Nginx</li>



<li>Testes executados automaticamente</li>
</ul>



<h3 class="wp-block-heading" id="h-producao">Produção</h3>



<ul class="wp-block-list">
<li>Build otimizado</li>



<li>Código embutido na imagem</li>



<li>Assets compilados no build</li>



<li>Sem dependência de volume</li>
</ul>



<p>Essa separação reduz o clássico problema de “funciona na minha máquina” e aproxima o ambiente local da produção.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-testes-automatizados-como-parte-do-fluxo">Testes automatizados como parte do fluxo</h2>



<p>A aplicação conta com <strong>testes unitários e de feature</strong>, executados de três formas:</p>



<ul class="wp-block-list">
<li>Localmente no ambiente dev</li>



<li>Isoladamente via Docker</li>



<li>Automaticamente no CI/CD</li>
</ul>



<p>Isso garante:</p>



<ul class="wp-block-list">
<li>Segurança para refatorações</li>



<li>Detecção precoce de bugs</li>



<li>Confiança na entrega contínua</li>
</ul>



<p>Testes não são tratados como opcional, mas como <strong>parte da arquitetura</strong>.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-ci-cd-com-github-actions">CI/CD com GitHub Actions</h2>



<p>Cada push ou pull request dispara um workflow que:</p>



<ol class="wp-block-list">
<li>Sobe toda a stack Docker (app, banco, cache)</li>



<li>Executa migrations</li>



<li>Roda a suíte completa de testes</li>



<li>Bloqueia o merge em caso de falha</li>
</ol>



<p>Esse processo simula um pipeline real de empresas que operam com <strong>entrega contínua e qualidade de código como requisito</strong>.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-documentacao-com-swagger">Documentação com Swagger</h2>



<p>A API possui <strong>documentação interativa via Swagger</strong>, acessível após subir a aplicação.</p>



<p>Isso permite:</p>



<ul class="wp-block-list">
<li>Testes manuais rápidos</li>



<li>Onboarding mais fácil</li>



<li>Comunicação clara entre backend e frontend</li>



<li>Uso por terceiros sem dependência de documentação externa</li>
</ul>



<p>Documentação é tratada como parte do produto, não como etapa posterior.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-beneficios-dessa-arquitetura-em-um-contexto-profissional">Benefícios dessa arquitetura em um contexto profissional</h2>



<p>Essa abordagem entrega vantagens claras em ambientes reais:</p>



<ul class="wp-block-list">
<li>Código organizado e previsível</li>



<li>Facilidade de manutenção</li>



<li>Escalabilidade técnica</li>



<li>Padronização de ambientes</li>



<li>Menor risco em deploys</li>



<li>Base sólida para crescimento</li>
</ul>



<p>Não se trata apenas de uma API de tarefas, mas de <strong>um modelo replicável para aplicações reais</strong>.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-o-que-esse-projeto-demonstra-tecnicamente">O que esse projeto demonstra tecnicamente</h2>



<p>Esse projeto evidencia competências como:</p>



<ul class="wp-block-list">
<li><a href="http://leonardonascimento.dev/categoria/laravel">Domínio de Laravel além do básico</a></li>



<li>Conhecimento de arquitetura backend</li>



<li>Uso consciente de cache e banco</li>



<li>Experiência com Docker e ambientes reais</li>



<li>Cultura de testes</li>



<li>Automação de CI/CD</li>



<li>Pensamento orientado a produto e escala</li>
</ul>



<p>São exatamente esses pontos que diferenciam um desenvolvedor <strong>pleno/sênior</strong> em processos seletivos.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-conclusao">Conclusão</h2>



<p>Mais do que cumprir um teste técnico, o objetivo deste projeto foi demonstrar <strong>capacidade de pensar sistemas como um todo</strong>, indo além do CRUD simples.</p>



<p>Arquitetura, automação, testes e previsibilidade são o que tornam uma aplicação sustentável — e é isso que empresas buscam quando contratam profissionais para projetos de longo prazo.</p>



<p></p>



<p><a href="https://github.com/leonardop21/laravel-task" target="_blank" rel="noreferrer noopener nofollow">Link do teste prático</a></p>
<p>The post <a href="https://leonardonascimento.dev/blog/arquitetura-de-uma-api-rest-em-laravel-preparada-para-producao/">Arquitetura de uma API REST em Laravel preparada para produção</a> appeared first on <a href="https://leonardonascimento.dev">Leonardo Nascimento | Engenheiro de Software</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://leonardonascimento.dev/blog/arquitetura-de-uma-api-rest-em-laravel-preparada-para-producao/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Automação de WhatsApp para WordPress: uma solução escalável para empresas e portais</title>
		<link>https://leonardonascimento.dev/blog/automacao-de-whatsapp-para-wordpress-uma-solucao-escalavel-para-empresas-e-portais/</link>
					<comments>https://leonardonascimento.dev/blog/automacao-de-whatsapp-para-wordpress-uma-solucao-escalavel-para-empresas-e-portais/#respond</comments>
		
		<dc:creator><![CDATA[Leonardo]]></dc:creator>
		<pubDate>Tue, 27 Jan 2026 11:39:00 +0000</pubDate>
				<category><![CDATA[API]]></category>
		<category><![CDATA[Backend]]></category>
		<category><![CDATA[Dicas & Truques]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Produção]]></category>
		<category><![CDATA[Seo & Marketing]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[automação de conteúdo]]></category>
		<category><![CDATA[automação editorial]]></category>
		<category><![CDATA[automação whatsapp]]></category>
		<category><![CDATA[comunicação empresarial]]></category>
		<category><![CDATA[distribuição de conteúdo]]></category>
		<category><![CDATA[integração wordpress]]></category>
		<category><![CDATA[marketing digital b2b]]></category>
		<category><![CDATA[plugin wordpress]]></category>
		<category><![CDATA[whatsapp wordpress]]></category>
		<category><![CDATA[wordpress para empresas]]></category>
		<guid isPermaLink="false">https://leonardonascimento.dev/?p=2355</guid>

					<description><![CDATA[<p>O Notifish é um plugin para WordPress oficialmente aprovado no repositório do WordPress que permite automatizar o envio de conteúdos publicados no site diretamente para o WhatsApp, integrando o fluxo editorial do WordPress a canais de distribuição de alto engajamento. Com a aprovação no diretório oficial, o plugin passa a atender padrões rígidos de segurança, [&#8230;]</p>
<p>The post <a href="https://leonardonascimento.dev/blog/automacao-de-whatsapp-para-wordpress-uma-solucao-escalavel-para-empresas-e-portais/">Automação de WhatsApp para WordPress: uma solução escalável para empresas e portais</a> appeared first on <a href="https://leonardonascimento.dev">Leonardo Nascimento | Engenheiro de Software</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p><a href="https://notifish.com/" target="_blank" rel="noreferrer noopener nofollow">O <strong>Notifish</strong> é um plugin para WordPress </a>oficialmente aprovado no repositório do WordPress que permite <strong>automatizar o envio de conteúdos publicados no site diretamente para o WhatsApp</strong>, integrando o fluxo editorial do WordPress a canais de distribuição de alto engajamento.</p>



<p>Com a aprovação no diretório oficial, o plugin passa a atender <strong>padrões rígidos de segurança, qualidade de código e boas práticas exigidas pela equipe do WordPress</strong>, o que garante mais confiabilidade para quem busca soluções profissionais de distribuição de conteúdo.</p>



<p>👉 Repositório oficial do plugin:<br><a href="https://wordpress.org/plugins/notifish/" target="_blank" rel="noreferrer noopener nofollow">https://wordpress.org/plugins/notifish/</a></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-o-que-e-o-plugin-notifish">O que é o plugin Notifish</h2>



<p>O Notifish é um plugin que conecta o WordPress à plataforma Notifish, permitindo que <strong>publicações sejam enviadas automaticamente para grupos, listas ou contatos no <a href="https://leonardonascimento.dev/blog/como-monitorar-aplicacao-e-servidor-pelo-whatsapp-logs-erros-e-alertas/" type="post" id="2290">WhatsApp</a></strong> a partir do momento em que um post é publicado ou atualizado.</p>



<p>Na prática, ele elimina processos manuais comuns em portais, blogs e sites de conteúdo, como copiar links, formatar mensagens e disparar envios individualmente, centralizando tudo dentro do próprio fluxo editorial.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-para-quem-o-notifish-e-indicado">Para quem o Notifish é indicado</h2>



<p>O plugin foi desenvolvido para cenários reais de uso, como:</p>



<ul class="wp-block-list">
<li>Portais de notícias e sites jornalísticos</li>



<li>Blogs com publicação frequente</li>



<li>Produtores de conteúdo e infoprodutores</li>



<li>Empresas que usam WhatsApp como canal de comunicação</li>



<li>Projetos WordPress que dependem de distribuição rápida de conteúdo</li>
</ul>



<p>Em todos esses casos, o WhatsApp deixa de ser apenas um canal complementar e passa a fazer parte da estratégia de publicação.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-como-funciona-a-integracao-com-o-wordpress">Como funciona a integração com o WordPress</h2>



<p>Após a instalação do plugin e a configuração da chave de API, o funcionamento é simples:</p>



<ol class="wp-block-list">
<li>O conteúdo é publicado normalmente no WordPress</li>



<li>O plugin identifica a publicação</li>



<li>O Notifish envia a mensagem para os grupos ou listas configuradas</li>



<li>O envio fica registrado para controle e auditoria</li>
</ol>



<p>Todo o processo acontece de forma transparente para o editor, sem necessidade de ferramentas externas ou fluxos paralelos.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-principais-vantagens-do-notifish">Principais vantagens do Notifish</h2>



<h3 class="wp-block-heading" id="h-automacao-real-no-fluxo-editorial">Automação real no fluxo editorial</h3>



<p>O envio das mensagens acontece no momento certo, integrado ao ciclo de publicação, sem depender de ações manuais.</p>



<h3 class="wp-block-heading" id="h-distribuicao-imediata-do-conteudo">Distribuição imediata do conteúdo</h3>



<p>Assim que a matéria vai ao ar, ela já pode ser entregue ao público em um canal com alta taxa de abertura e leitura.</p>



<h3 class="wp-block-heading" id="h-centralizacao-de-operacoes">Centralização de operações</h3>



<p>O <a href="https://leonardonascimento.dev/blog/wordpress-nao-e-amador-amador-e-o-uso-que-fazem-dele/" type="post" id="2338">WordPress </a>deixa de ser apenas um CMS e passa a ser também um ponto central de distribuição de conteúdo.</p>



<h3 class="wp-block-heading" id="h-mais-controle-sobre-comunicacao-via-whatsapp">Mais controle sobre comunicação via WhatsApp</h3>



<p>O uso de automação reduz falhas humanas, duplicidade de envios e inconsistências na comunicação.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-aprovacao-no-repositorio-oficial-do-wordpress">Aprovação no repositório oficial do WordPress</h2>



<p>A presença do Notifish no repositório oficial do WordPress é um ponto relevante, pois indica que o plugin:</p>



<ul class="wp-block-list">
<li>Segue as diretrizes de segurança do WordPress</li>



<li>Utiliza boas práticas de desenvolvimento</li>



<li>Passou por revisão manual da equipe do WordPress</li>



<li>Pode ser instalado e atualizado diretamente pelo painel administrativo</li>
</ul>



<p>Isso reduz riscos técnicos e aumenta a confiabilidade do projeto para uso em produção.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-impacto-em-seo-e-engajamento">Impacto em SEO e engajamento</h2>



<p>Embora o WhatsApp não seja um fator direto de ranqueamento, a automação de distribuição impacta positivamente métricas importantes para SEO, como:</p>



<ul class="wp-block-list">
<li>Aumento de tráfego recorrente</li>



<li>Maior taxa de retorno ao site</li>



<li>Crescimento de engajamento com o conteúdo</li>



<li>Ampliação do alcance orgânico das publicações</li>
</ul>



<p>Em projetos editoriais, isso significa <strong>conteúdo sendo consumido mais rápido e com mais frequência</strong>.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-onde-instalar-o-plugin-notifish">Onde instalar o plugin Notifish</h2>



<p>O plugin está disponível no repositório oficial do WordPress e pode ser instalado diretamente pelo painel administrativo ou acessado pelo link abaixo:</p>



<p><a href="https://wordpress.org/plugins/notifish">https://wordpress.org/plugins/notifish</a></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-consideracoes-finais">Considerações finais</h2>



<p>O Notifish não é apenas um plugin de envio de mensagens, mas uma <strong>ferramenta de integração entre conteúdo e distribuição</strong>, pensada para quem publica com frequência e precisa de escala sem perder controle.</p>



<p>Para sites WordPress que utilizam o WhatsApp como canal estratégico, a automação deixa de ser um diferencial e passa a ser uma necessidade operacional.</p>
<p>The post <a href="https://leonardonascimento.dev/blog/automacao-de-whatsapp-para-wordpress-uma-solucao-escalavel-para-empresas-e-portais/">Automação de WhatsApp para WordPress: uma solução escalável para empresas e portais</a> appeared first on <a href="https://leonardonascimento.dev">Leonardo Nascimento | Engenheiro de Software</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://leonardonascimento.dev/blog/automacao-de-whatsapp-para-wordpress-uma-solucao-escalavel-para-empresas-e-portais/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>10 inteligências artificiais que você não pode ignorar em 2026</title>
		<link>https://leonardonascimento.dev/blog/10-inteligencias-artificiais-que-voce-nao-pode-ignorar-em-2026/</link>
					<comments>https://leonardonascimento.dev/blog/10-inteligencias-artificiais-que-voce-nao-pode-ignorar-em-2026/#respond</comments>
		
		<dc:creator><![CDATA[Leonardo]]></dc:creator>
		<pubDate>Fri, 23 Jan 2026 21:25:00 +0000</pubDate>
				<category><![CDATA[API]]></category>
		<category><![CDATA[Arquitetura]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Seo & Marketing]]></category>
		<category><![CDATA[automação]]></category>
		<category><![CDATA[ferramentas de ia]]></category>
		<category><![CDATA[futuro da tecnologia]]></category>
		<category><![CDATA[ia 2026]]></category>
		<category><![CDATA[inovação digital]]></category>
		<category><![CDATA[inteligência artificial]]></category>
		<category><![CDATA[sites de ia]]></category>
		<category><![CDATA[tecnologia 2025]]></category>
		<guid isPermaLink="false">https://leonardonascimento.dev/?p=2335</guid>

					<description><![CDATA[<p>De assistentes que escrevem códigos a geradores de vídeos e músicas em segundos, essas inteligências artificiais estão definindo o ritmo da inovação digital. Conheça as ferramentas que estão revolucionando a produtividade, a criação de conteúdo e o próprio jeito de trabalhar.</p>
<p>The post <a href="https://leonardonascimento.dev/blog/10-inteligencias-artificiais-que-voce-nao-pode-ignorar-em-2026/">10 inteligências artificiais que você não pode ignorar em 2026</a> appeared first on <a href="https://leonardonascimento.dev">Leonardo Nascimento | Engenheiro de Software</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>De assistentes que escrevem códigos a geradores de vídeos e músicas em segundos, essas inteligências artificiais estão definindo o ritmo da inovação digital. Conheça as ferramentas que estão revolucionando a produtividade, a criação de conteúdo e o próprio jeito de trabalhar.</p>



<p><strong>1. Claude.ai — o cérebro que resolve tudo</strong><br>Criado pela Anthropic, o Claude é o rival direto do ChatGPT, e muitos juram que ele é ainda mais “humano”. Capaz de entender contextos complexos, revisar textos longos e até analisar documentos inteiros, o Claude virou o companheiro ideal para quem precisa de precisão e agilidade.</p>



<p><strong>2. Ranked.ai — o impulso para o topo do Google</strong><br>Essa IA é uma bênção para quem vive de SEO. Ela analisa, sugere e otimiza o conteúdo do seu site para conquistar posições valiosas nos resultados de busca. O melhor? Faz isso praticamente sozinha, com atualizações em tempo real.</p>



<p><strong>3. Syllaby.io — vídeos prontos para bombar</strong><br>Quer transformar roteiros em conteúdo de vídeo automático? O Syllaby faz isso com maestria. Ele cria, edita e entrega vídeos completos com narração e legenda, otimizados para TikTok, Reels e Shorts. Um aliado de peso para criadores e marcas.</p>



<p><strong>4. Replit.com — código sem complicação</strong><br>Mais do que um simples editor, o Replit é um ambiente de desenvolvimento guiado por IA. Ele escreve código, corrige bugs e até explica o que você está fazendo errado. É como ter um mentor de programação disponível 24 horas.</p>



<p><strong>5. Manus.im — o superagente inteligente</strong><br>Considerada uma das plataformas mais versáteis, o Manus é um agente de IA que centraliza tarefas: pesquisa, escrita, automação e até integração entre apps. Tudo num só lugar, com interface intuitiva e resultados rápidos.</p>



<p><strong>6. Suno.com — música em segundos</strong><br>Aqui, criatividade e tecnologia tocam juntos. O Suno permite criar faixas completas em poucos cliques, combinando estilos e vozes realistas. Ideal para trilhas de vídeos, podcasts ou simplesmente para quem quer experimentar novos sons.</p>



<p><strong>7. Fliki.ai — texto que vira vídeo</strong><br>Pegue um texto simples e veja ele se transformar em conteúdo visual dinâmico. O Fliki gera vídeos curtos, prontos para redes sociais, com narração natural e variedade de estilos. Um presente para quem quer produção rápida sem perder qualidade.</p>



<p><strong>8. CloudXLR.com — o construtor de apps definitivo</strong><br>Essa plataforma é o sonho de empreendedores e desenvolvedores. A CloudXLR usa IA para montar aplicativos completos, desde o design até a lógica interna, sem exigir uma linha de código manual.</p>



<p><strong>9. Genspark.ai — o superagente da produtividade</strong><br>Genspark é como um estagiário genial: escreve, pesquisa, planeja, organiza e ainda gera relatórios. Ele funciona como uma central de automação pessoal, perfeita para quem gerencia muitas tarefas ao mesmo tempo.</p>



<p><strong>10. Fastread.io — eBooks na velocidade da luz</strong><br>Produzir um livro digital nunca foi tão rápido. O Fastread cria, formata e finaliza eBooks a partir de poucos tópicos, com estrutura profissional e linguagem envolvente.</p>



<p>Bônus extra</p>



<ul class="wp-block-list">
<li><strong>Perplexity</strong> — busca com IA que realmente responde, citando fontes.</li>



<li><strong>ElevenLabs</strong> — vozes artificiais extremamente naturais.</li>



<li><strong>Pika</strong> — geração de vídeos criativos com IA generativa.</li>
</ul>
<p>The post <a href="https://leonardonascimento.dev/blog/10-inteligencias-artificiais-que-voce-nao-pode-ignorar-em-2026/">10 inteligências artificiais que você não pode ignorar em 2026</a> appeared first on <a href="https://leonardonascimento.dev">Leonardo Nascimento | Engenheiro de Software</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://leonardonascimento.dev/blog/10-inteligencias-artificiais-que-voce-nao-pode-ignorar-em-2026/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>O que é Lighthouse e como usar para melhorar seu site</title>
		<link>https://leonardonascimento.dev/blog/o-que-e-lighthouse-e-como-usar-para-melhorar-seu-site/</link>
					<comments>https://leonardonascimento.dev/blog/o-que-e-lighthouse-e-como-usar-para-melhorar-seu-site/#respond</comments>
		
		<dc:creator><![CDATA[Leonardo]]></dc:creator>
		<pubDate>Wed, 21 Jan 2026 23:20:00 +0000</pubDate>
				<category><![CDATA[API]]></category>
		<category><![CDATA[Arquitetura]]></category>
		<category><![CDATA[Backend]]></category>
		<category><![CDATA[Frontend]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Produção]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Seo & Marketing]]></category>
		<category><![CDATA[core web vitals]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[lighthouse]]></category>
		<category><![CDATA[otimização de sites]]></category>
		<category><![CDATA[performance web]]></category>
		<category><![CDATA[seo técnico]]></category>
		<guid isPermaLink="false">https://leonardonascimento.dev/?p=2318</guid>

					<description><![CDATA[<p>Performance, acessibilidade e boas práticas deixaram de ser “detalhes técnicos” e passaram a impactar diretamente tráfego, conversão e experiência do usuário. Para ajudar a medir esses pontos de forma objetiva, o Google criou o Google Lighthouse. Mais do que uma nota colorida, o Lighthouse é uma ferramenta de diagnóstico. Saber usá-lo corretamente evita decisões erradas [&#8230;]</p>
<p>The post <a href="https://leonardonascimento.dev/blog/o-que-e-lighthouse-e-como-usar-para-melhorar-seu-site/">O que é Lighthouse e como usar para melhorar seu site</a> appeared first on <a href="https://leonardonascimento.dev">Leonardo Nascimento | Engenheiro de Software</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Performance, acessibilidade e boas práticas deixaram de ser “detalhes técnicos” e passaram a impactar diretamente tráfego, conversão e experiência do usuário. Para ajudar a medir esses pontos de forma objetiva, o Google criou o <strong>Google Lighthouse</strong>.</p>



<p>Mais do que uma nota colorida, o Lighthouse é uma ferramenta de diagnóstico. Saber usá-lo corretamente evita decisões erradas e otimizações inúteis.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-o-que-e-o-lighthouse">O que é o Lighthouse</h2>



<p>O Lighthouse é uma ferramenta automatizada de auditoria de páginas web. Ele analisa uma URL e gera um relatório com métricas e recomendações em cinco áreas principais:</p>



<ul class="wp-block-list">
<li><strong>Performance</strong></li>



<li><strong>Acessibilidade</strong></li>



<li><strong>Boas práticas</strong></li>



<li><strong>SEO</strong></li>



<li><strong>Progressive Web App (PWA)</strong></li>
</ul>



<p>O objetivo não é apenas pontuar o site, mas mostrar <strong>onde estão os gargalos reais</strong>.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-onde-o-lighthouse-esta-disponivel">Onde o Lighthouse está disponível</h2>



<p>Você pode usar o Lighthouse de várias formas:</p>



<ul class="wp-block-list">
<li><strong>Chrome DevTools</strong> (nativo do navegador)</li>



<li><strong>Linha de comando (CLI)</strong></li>



<li><strong>CI/CD</strong> (auditorias automatizadas)</li>



<li><strong>Ferramentas online baseadas no Lighthouse</strong></li>
</ul>



<p>Para a maioria dos casos, o DevTools já resolve bem.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-como-rodar-o-lighthouse-pelo-chrome">Como rodar o Lighthouse pelo Chrome</h2>



<ol class="wp-block-list">
<li>Abra o site no Chrome</li>



<li>Pressione <code>F12</code> ou <code>Ctrl + Shift + I</code></li>



<li>Vá até a aba <strong>Lighthouse</strong></li>



<li>Escolha o tipo de dispositivo (Mobile ou Desktop)</li>



<li>Clique em <strong>Generate report</strong></li>
</ol>



<p>Em poucos segundos, o relatório é gerado.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-as-metricas-mais-importantes-e-o-que-elas-significam">As métricas mais importantes (e o que elas significam)</h2>



<h3 class="wp-block-heading" id="h-performance">Performance</h3>



<p>Avalia tempo de carregamento e resposta da página. Algumas métricas-chave:</p>



<ul class="wp-block-list">
<li><strong>LCP (Largest Contentful Paint)</strong><br>Mede quando o maior elemento visível aparece. Impacta diretamente a percepção de velocidade.</li>



<li><strong>INP (Interaction to Next Paint)</strong><br>Avalia a resposta do site às interações do usuário.</li>



<li><strong>CLS (Cumulative Layout Shift)</strong><br>Mede instabilidade visual (elementos “pulando” na tela).</li>
</ul>



<p>Essas métricas fazem parte do <strong>Core Web Vitals</strong>, usados pelo Google como sinal de experiência.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading" id="h-acessibilidade">Acessibilidade</h3>



<p>Verifica se o site pode ser usado por pessoas com limitações visuais, motoras ou cognitivas. Exemplos de checagem:</p>



<ul class="wp-block-list">
<li>contraste de cores</li>



<li>textos alternativos em imagens</li>



<li>labels em formulários</li>



<li>estrutura semântica do HTML</li>
</ul>



<p>Mesmo que não seja um requisito legal em todos os casos, acessibilidade melhora usabilidade para todos.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading" id="h-boas-praticas">Boas práticas</h3>



<p>Aqui entram problemas mais técnicos, como:</p>



<ul class="wp-block-list">
<li>uso de APIs inseguras</li>



<li>imagens com proporções erradas</li>



<li>erros de console</li>



<li>bibliotecas desatualizadas</li>
</ul>



<p>É uma área que ajuda a manter o site saudável ao longo do tempo.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading" id="h-seo">SEO</h3>



<p>O Lighthouse não substitui ferramentas avançadas de SEO, mas valida o básico:</p>



<ul class="wp-block-list">
<li>meta tags essenciais</li>



<li>indexabilidade</li>



<li>uso correto de links</li>



<li>estrutura mínima de conteúdo</li>
</ul>



<p>Se o site falha aqui, dificilmente terá bom desempenho orgânico.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-o-erro-mais-comum-otimizar-so-para-a-nota">O erro mais comum: otimizar só para a nota</h2>



<p>Muita gente usa o Lighthouse como competição de pontuação. Isso é um erro.</p>



<p>Um site pode ter nota 100 e ainda assim:</p>



<ul class="wp-block-list">
<li>carregar dados desnecessários</li>



<li>ter arquitetura ruim</li>



<li>sofrer em cenários reais de tráfego</li>
</ul>



<p>O relatório deve ser lido como <strong>ferramenta de diagnóstico</strong>, não como objetivo final.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-mobile-vs-desktop-sempre-priorize-mobile">Mobile vs Desktop: sempre priorize mobile</h2>



<p>O Google avalia sites com <strong>mobile-first indexing</strong>. Isso significa que:</p>



<ul class="wp-block-list">
<li>o relatório mobile é mais relevante</li>



<li>problemas no mobile impactam mais SEO</li>



<li>otimizações devem começar pelo mobile</li>
</ul>



<p>Um site rápido no desktop e lento no celular está em desvantagem.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-lighthouse-em-producao-e-ci-cd">Lighthouse em produção e CI/CD</h2>



<p>Em projetos mais maduros, o Lighthouse pode rodar automaticamente:</p>



<ul class="wp-block-list">
<li>antes de deploy</li>



<li>após mudanças críticas</li>



<li>em pipelines de CI/CD</li>
</ul>



<p>Isso ajuda a evitar regressões de performance e garante que melhorias não sejam perdidas com o tempo.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-limitacoes-do-lighthouse">Limitações do Lighthouse</h2>



<p>Apesar de poderoso, o Lighthouse tem limites:</p>



<ul class="wp-block-list">
<li>roda em ambiente controlado</li>



<li>não reflete todos os cenários reais</li>



<li>não substitui métricas de usuários reais (RUM)</li>
</ul>



<p>O ideal é combiná-lo com dados reais de uso, como relatórios de experiência de campo.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-quando-o-lighthouse-faz-mais-diferenca">Quando o Lighthouse faz mais diferença</h2>



<p>Ele é especialmente útil para:</p>



<ul class="wp-block-list">
<li>identificar gargalos iniciais de performance</li>



<li>validar mudanças estruturais</li>



<li>educar times sobre impacto técnico</li>



<li>criar baseline de qualidade</li>
</ul>



<p>Não é uma bala de prata, mas é um excelente ponto de partida.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>O Lighthouse não serve para “tirar nota alta”, mas para <strong>entender como o site se comporta</strong> do ponto de vista do usuário. Quando usado com critério, ele direciona otimizações que realmente fazem diferença.</p>



<p>Ignorá-lo pode custar performance, experiência e visibilidade. Usá-lo mal pode custar tempo. O valor está em interpretar os dados, não apenas executá-los.</p>
<p>The post <a href="https://leonardonascimento.dev/blog/o-que-e-lighthouse-e-como-usar-para-melhorar-seu-site/">O que é Lighthouse e como usar para melhorar seu site</a> appeared first on <a href="https://leonardonascimento.dev">Leonardo Nascimento | Engenheiro de Software</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://leonardonascimento.dev/blog/o-que-e-lighthouse-e-como-usar-para-melhorar-seu-site/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Fluxo n8n: API, WhatsApp, Log (com dedupe e tratamento de erro)</title>
		<link>https://leonardonascimento.dev/blog/fluxo-n8n-api-whatsapp-log-com-dedupe-e-tratamento-de-erro/</link>
					<comments>https://leonardonascimento.dev/blog/fluxo-n8n-api-whatsapp-log-com-dedupe-e-tratamento-de-erro/#respond</comments>
		
		<dc:creator><![CDATA[Leonardo]]></dc:creator>
		<pubDate>Tue, 20 Jan 2026 22:30:00 +0000</pubDate>
				<category><![CDATA[API]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[automação]]></category>
		<category><![CDATA[integrações]]></category>
		<category><![CDATA[logs]]></category>
		<category><![CDATA[n8n]]></category>
		<category><![CDATA[webhooks]]></category>
		<category><![CDATA[WhatsApp]]></category>
		<guid isPermaLink="false">https://leonardonascimento.dev/?p=2316</guid>

					<description><![CDATA[<p>O cenário (realista) Você quer receber um evento via API (Webhook), enviar uma mensagem no WhatsApp via Notifish e registrar o resultado (sucesso/erro) em log. Esse fluxo é útil para: Pré-requisitos Aqui vou usar a opção A (mais “produção”). Parte 1 — Contrato da API (Webhook) Você vai expor um endpoint no n8n, por exemplo: [&#8230;]</p>
<p>The post <a href="https://leonardonascimento.dev/blog/fluxo-n8n-api-whatsapp-log-com-dedupe-e-tratamento-de-erro/">Fluxo n8n: API, WhatsApp, Log (com dedupe e tratamento de erro)</a> appeared first on <a href="https://leonardonascimento.dev">Leonardo Nascimento | Engenheiro de Software</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading" id="h-o-cenario-realista">O cenário (realista)</h2>



<p>Você quer receber um evento via API (Webhook), enviar uma mensagem no WhatsApp via <a href="https://notifish.com/" type="link" id="https://notifish.com/" target="_blank" rel="noreferrer noopener nofollow">Notifish </a>e registrar o resultado (sucesso/erro) em log.</p>



<p>Esse fluxo é útil para:</p>



<ul class="wp-block-list">
<li>alertas operacionais</li>



<li>notificações de deploy</li>



<li>falhas de integração</li>



<li>notificações de sistema para grupos</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Pré-requisitos</h2>



<ol class="wp-block-list">
<li><a href="https://leonardonascimento.dev/tag/n8n/" type="post_tag" id="267">n8n rodando e acessível</a></li>



<li>endpoint do Notifish (o seu padrão):<br><code>POST https://meu-dominio.notifish.com/api/v2/{INSTANCE_UUID}/whatsapp/message/groups</code><br>com header <code>Authorization: Bearer ...</code></li>



<li>um lugar para log<br>Vou te dar 2 opções:</li>
</ol>



<ul class="wp-block-list">
<li><strong>A)</strong> log em arquivo via HTTP (endpoint seu) — mais profissional</li>



<li><strong>B)</strong> log no próprio n8n (Execution data) + uma planilha/banco (se preferir)</li>
</ul>



<p>Aqui vou usar a opção <strong>A</strong> (mais “produção”).</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">Parte 1 — Contrato da API (Webhook)</h1>



<p>Você vai expor um endpoint no <a href="https://leonardonascimento.dev/blog/n8n-o-que-e-como-funciona-e-quando-faz-sentido-usar/" type="post" id="2313">n8n</a>, por exemplo:</p>



<pre class="wp-block-code"><code>POST https://SEU_N8N/webhook/notify
</code></pre>



<p>Payload recomendado (simples e suficiente):</p>



<pre class="wp-block-code"><code>{
  "title": "API 5xx alto",
  "message": "Erros 5xx acima do normal em /api/orders",
  "url": "https://seu-dashboard",
  "identifier": "prod:api:5xx",
  "delayMessage": 0
}
</code></pre>



<p>Repare que já mandamos <code>identifier</code>. Isso permite deduplicar e evitar spam.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">Parte 2 — Dedupe (anti-spam) usando Redis (opcional, mas recomendado)</h1>



<p>Se você tiver Redis (muito comum), dá para usar um passo “check” antes do envio.</p>



<ul class="wp-block-list">
<li>chave: <code>dedupe:{identifier}</code></li>



<li>TTL: 300s (5 minutos) por exemplo<br>Se existir, você não envia.</li>
</ul>



<p>Se você não tiver Redis, dá para deduplicar com “Data Store” do n8n ou com um endpoint seu.</p>



<p>Vou te passar o fluxo com <strong>Data Store do n8n</strong> (não depende de infra extra).</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">Parte 3 — Enviar WhatsApp via Notifish</h1>



<p>O <a href="https://notifish.com/" target="_blank" rel="noreferrer noopener nofollow">Notifish </a>recebe:</p>



<pre class="wp-block-code"><code>{
  "message": "...",
  "identifier": "...",
  "link": true,
  "typing": "composing",
  "delayMessage": 1200
}
</code></pre>



<p>A gente vai montar isso no n8n.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">Parte 4 — Registrar Log</h1>



<p>Depois do envio (sucesso ou falha), registramos em um endpoint de log. Exemplo:</p>



<pre class="wp-block-code"><code>POST https://seu-sistema.com/api/logs/notifish
</code></pre>



<p>Log recomendado:</p>



<pre class="wp-block-code"><code>{
  "identifier": "prod:api:5xx",
  "status": "success",
  "http_status": 200,
  "provider": "notifish",
  "payload": { ... },
  "response": { ... },
  "created_at": "2026-01-22T00:00:00-03:00"
}
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">NODES DO WORKFLOW (passo a passo)</h1>



<h2 class="wp-block-heading">1) Webhook (Trigger)</h2>



<ul class="wp-block-list">
<li>Method: <strong>POST</strong></li>



<li>Path: <strong>notify</strong></li>



<li>Response: JSON (200)</li>
</ul>



<h2 class="wp-block-heading">2) Function (Normalize)</h2>



<p>Cria um formato consistente e monta a mensagem final do WhatsApp:</p>



<ul class="wp-block-list">
<li>título + mensagem + url</li>



<li>garante identifier</li>



<li>define delayMessage</li>
</ul>



<h2 class="wp-block-heading">3) Data Store (Get)</h2>



<p>Busca <code>identifier</code> na datastore (dedupe).</p>



<h2 class="wp-block-heading">4) IF (Já enviou?)</h2>



<p>Se já existe registro recente, responde 200 “ignored” e não envia.</p>



<h2 class="wp-block-heading">5) HTTP Request (Notifish)</h2>



<p>POST no endpoint do Notifish com Bearer Token.</p>



<h2 class="wp-block-heading">6) Data Store (Set)</h2>



<p>Salva <code>identifier</code> com TTL (ex.: 300s) para dedupe.</p>



<h2 class="wp-block-heading">7) HTTP Request (Log Success)</h2>



<p>Envia log para seu endpoint.</p>



<h2 class="wp-block-heading">8) Error Trigger / Catch (Log Error)</h2>



<p>Se Notifish falhar, manda log com status <code>error</code>.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">JSON do workflow para importar no n8n</h1>



<p>Abaixo um workflow base. Você só precisa trocar:</p>



<ul class="wp-block-list">
<li><code>NOTIFISH_INSTANCE_UUID</code></li>



<li><code>NOTIFISH_TOKEN</code></li>



<li><code>LOG_ENDPOINT_URL</code></li>
</ul>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Import: n8n → Workflows → Import from file/clipboard</p>
</blockquote>



<pre class="wp-block-code"><code>{
  "name": "API → Notifish WhatsApp → Log (com dedupe)",
  "nodes": &#91;
    {
      "parameters": {
        "path": "notify",
        "httpMethod": "POST",
        "responseMode": "lastNode",
        "options": {}
      },
      "name": "Webhook",
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2,
      "position": &#91;260, 300]
    },
    {
      "parameters": {
        "functionCode": "const body = $json;\n\nconst title = body.title || 'Notificação';\nconst msg = body.message || '';\nconst url = body.url || '';\n\nconst identifier = body.identifier || `generic:${Date.now()}`;\nconst delayMessage = body.delayMessage ?? 0;\n\nconst whatsappMessage = `*${title}*\\n\\n${msg}${url ? `\\n\\n${url}` : ''}`;\n\nreturn &#91;{\n  identifier,\n  delayMessage,\n  notifishPayload: {\n    message: whatsappMessage,\n    identifier,\n    link: true,\n    typing: 'composing',\n    delayMessage\n  },\n  original: body\n}];"
      },
      "name": "Normalize",
      "type": "n8n-nodes-base.function",
      "typeVersion": 2,
      "position": &#91;520, 300]
    },
    {
      "parameters": {
        "operation": "get",
        "key": "={{$json.identifier}}"
      },
      "name": "Dedupe Get",
      "type": "n8n-nodes-base.dataStore",
      "typeVersion": 1,
      "position": &#91;760, 300]
    },
    {
      "parameters": {
        "conditions": {
          "boolean": &#91;
            {
              "value1": "={{$json.value !== undefined &amp;&amp; $json.value !== null}}",
              "value2": true
            }
          ]
        }
      },
      "name": "Já enviou?",
      "type": "n8n-nodes-base.if",
      "typeVersion": 2,
      "position": &#91;980, 300]
    },
    {
      "parameters": {
        "respondWith": "json",
        "responseBody": "={\"status\":\"ignored\",\"reason\":\"dedupe\",\"identifier\":\"{{$json.identifier}}\"}",
        "options": {}
      },
      "name": "Return Ignored",
      "type": "n8n-nodes-base.respondToWebhook",
      "typeVersion": 1,
      "position": &#91;1210, 200]
    },
    {
      "parameters": {
        "url": "https://meu-dominio.notifish.com/api/v2/NOTIFISH_INSTANCE_UUID/whatsapp/message/groups",
        "method": "POST",
        "authentication": "none",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": &#91;
            {
              "name": "Authorization",
              "value": "Bearer NOTIFISH_TOKEN"
            },
            {
              "name": "Content-Type",
              "value": "application/json"
            },
            {
              "name": "Accept",
              "value": "application/json"
            }
          ]
        },
        "sendBody": true,
        "contentType": "json",
        "jsonBody": "={{$json.notifishPayload}}",
        "options": {
          "timeout": 8000
        }
      },
      "name": "Send Notifish",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4,
      "position": &#91;1210, 380]
    },
    {
      "parameters": {
        "operation": "set",
        "key": "={{$json.identifier}}",
        "value": "={{JSON.stringify({sentAt: new Date().toISOString()})}}"
      },
      "name": "Dedupe Set",
      "type": "n8n-nodes-base.dataStore",
      "typeVersion": 1,
      "position": &#91;1450, 380]
    },
    {
      "parameters": {
        "url": "LOG_ENDPOINT_URL",
        "method": "POST",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": &#91;
            {
              "name": "Content-Type",
              "value": "application/json"
            }
          ]
        },
        "sendBody": true,
        "contentType": "json",
        "jsonBody": "={{ {\n  identifier: $json.identifier,\n  status: 'success',\n  provider: 'notifish',\n  response: $json,\n  created_at: new Date().toISOString()\n} }}"
      },
      "name": "Log Success",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4,
      "position": &#91;1690, 380]
    },
    {
      "parameters": {
        "respondWith": "json",
        "responseBody": "={\"status\":\"sent\",\"identifier\":\"{{$json.identifier}}\"}",
        "options": {}
      },
      "name": "Return OK",
      "type": "n8n-nodes-base.respondToWebhook",
      "typeVersion": 1,
      "position": &#91;1910, 380]
    }
  ],
  "connections": {
    "Webhook": {
      "main": &#91;
        &#91;
          {
            "node": "Normalize",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Normalize": {
      "main": &#91;
        &#91;
          {
            "node": "Dedupe Get",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Dedupe Get": {
      "main": &#91;
        &#91;
          {
            "node": "Já enviou?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Já enviou?": {
      "main": &#91;
        &#91;
          {
            "node": "Return Ignored",
            "type": "main",
            "index": 0
          }
        ],
        &#91;
          {
            "node": "Send Notifish",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send Notifish": {
      "main": &#91;
        &#91;
          {
            "node": "Dedupe Set",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Dedupe Set": {
      "main": &#91;
        &#91;
          {
            "node": "Log Success",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Log Success": {
      "main": &#91;
        &#91;
          {
            "node": "Return OK",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": false
}
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Observações importantes (produção)</h2>



<h3 class="wp-block-heading">1) Dedupe com Data Store não tem TTL nativo</h3>



<p>Ele salva “para sempre” se você não limpar. Em produção, o ideal é:</p>



<ul class="wp-block-list">
<li>usar Redis para TTL real, ou</li>



<li>incluir timestamp e limpar por job diário</li>
</ul>



<p>Se você quiser, eu te mando a versão com Redis (TTL real).</p>



<h3 class="wp-block-heading">2) Log endpoint</h3>



<p>Se você não tiver endpoint pronto, você pode logar em:</p>



<p id="h-">ou até em um arquivo via API sua</p>



<p>PostgreSQL/MySQL via node de banco</p>



<p>Google Sheets (rápido)</p>



<p></p>
<p>The post <a href="https://leonardonascimento.dev/blog/fluxo-n8n-api-whatsapp-log-com-dedupe-e-tratamento-de-erro/">Fluxo n8n: API, WhatsApp, Log (com dedupe e tratamento de erro)</a> appeared first on <a href="https://leonardonascimento.dev">Leonardo Nascimento | Engenheiro de Software</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://leonardonascimento.dev/blog/fluxo-n8n-api-whatsapp-log-com-dedupe-e-tratamento-de-erro/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>N8N: o que é, como funciona e quando faz sentido usar</title>
		<link>https://leonardonascimento.dev/blog/n8n-o-que-e-como-funciona-e-quando-faz-sentido-usar/</link>
					<comments>https://leonardonascimento.dev/blog/n8n-o-que-e-como-funciona-e-quando-faz-sentido-usar/#respond</comments>
		
		<dc:creator><![CDATA[Leonardo]]></dc:creator>
		<pubDate>Tue, 20 Jan 2026 01:14:00 +0000</pubDate>
				<category><![CDATA[API]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[apis]]></category>
		<category><![CDATA[automação]]></category>
		<category><![CDATA[integrações]]></category>
		<category><![CDATA[low-code]]></category>
		<category><![CDATA[n8n]]></category>
		<category><![CDATA[workflows]]></category>
		<guid isPermaLink="false">https://leonardonascimento.dev/?p=2313</guid>

					<description><![CDATA[<p>Automação deixou de ser algo exclusivo de grandes sistemas. Hoje, boa parte das aplicações depende de fluxos que conectam APIs, bancos, filas, serviços externos e ações internas. O desafio não é mais se automatizar, mas como fazer isso sem criar mais complexidade do que o necessário. É nesse contexto que ferramentas como o n8n ganham [&#8230;]</p>
<p>The post <a href="https://leonardonascimento.dev/blog/n8n-o-que-e-como-funciona-e-quando-faz-sentido-usar/">N8N: o que é, como funciona e quando faz sentido usar</a> appeared first on <a href="https://leonardonascimento.dev">Leonardo Nascimento | Engenheiro de Software</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Automação deixou de ser algo exclusivo de grandes sistemas. Hoje, boa parte das aplicações depende de fluxos que conectam APIs, bancos, filas, serviços externos e ações internas. O desafio não é mais <em>se</em> automatizar, mas <strong>como fazer isso sem criar mais complexidade do que o necessário</strong>.</p>



<p>É nesse contexto que ferramentas como o <strong>n8n</strong> ganham espaço.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-o-que-e-o-n8n">O que é o n8n</h2>



<p>O n8n é uma ferramenta de automação baseada em <strong>workflows</strong>, onde cada fluxo representa uma sequência de ações encadeadas. Essas ações podem envolver chamadas HTTP, processamento de dados, decisões condicionais, integração com serviços externos ou execução de lógica personalizada.</p>



<p>Diferente de scripts isolados ou cron jobs espalhados, o n8n centraliza esse tipo de automação em um único lugar, com <strong>visibilidade e controle</strong>.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-como-o-n8n-funciona-na-pratica">Como o n8n funciona na prática</h2>



<p>O funcionamento do n8n se baseia em três conceitos principais:</p>



<h3 class="wp-block-heading" id="h-1-nodes-nos">1) Nodes (nós)</h3>



<p>Cada node representa uma ação específica: receber um webhook, chamar uma API, transformar dados, enviar uma mensagem, salvar em banco, entre outros.</p>



<h3 class="wp-block-heading" id="h-2-workflows">2) Workflows</h3>



<p>Um workflow é o encadeamento desses nodes. Ele define:</p>



<ul class="wp-block-list">
<li>onde o fluxo começa</li>



<li>quais decisões são tomadas</li>



<li>quais ações acontecem em sequência</li>
</ul>



<h3 class="wp-block-heading" id="h-3-execucoes">3) Execuções</h3>



<p>Toda vez que um workflow roda, o n8n registra a execução. Isso permite:</p>



<ul class="wp-block-list">
<li>ver entradas e saídas</li>



<li>identificar erros</li>



<li>reprocessar execuções</li>
</ul>



<p>Essa rastreabilidade é um dos pontos fortes da ferramenta.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-onde-o-n8n-costuma-ser-usado">Onde o n8n costuma ser usado</h2>



<p>Na prática, o n8n aparece com frequência em cenários como:</p>



<ul class="wp-block-list">
<li>integração entre sistemas que não se conversam nativamente</li>



<li>automação de processos manuais repetitivos</li>



<li>consumo e envio de webhooks</li>



<li>sincronização de dados entre APIs</li>



<li>orquestração de tarefas assíncronas</li>
</ul>



<p>Ele não substitui código em todos os casos, mas reduz bastante a necessidade de escrever lógica repetitiva.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-n8n-nao-e-low-code-magico">n8n não é “low-code mágico”</h2>



<p>Um erro comum é achar que o n8n elimina a necessidade de conhecimento técnico. Na realidade, ele <strong>expõe a complexidade de forma visual</strong>, mas não a remove.</p>



<p>Para usar bem o n8n, é importante entender:</p>



<ul class="wp-block-list">
<li>HTTP</li>



<li>APIs REST</li>



<li>autenticação (tokens, headers, OAuth)</li>



<li>formatos de dados (JSON)</li>



<li>tratamento de erros</li>
</ul>



<p>Sem isso, o fluxo até pode funcionar, mas fica frágil.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-a-diferenca-entre-automacao-e-orquestracao">A diferença entre automação e orquestração</h2>



<p>Automação simples executa tarefas. Orquestração coordena sistemas.</p>



<p>O n8n se destaca quando usado como <strong>orquestrador</strong>:</p>



<ul class="wp-block-list">
<li>recebe eventos</li>



<li>decide o que fazer</li>



<li>chama serviços na ordem correta</li>



<li>lida com falhas e exceções</li>
</ul>



<p>Quando bem aplicado, ele vira um ponto central de integração, não apenas um “gatilho”.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-quando-faz-sentido-usar-n8n">Quando faz sentido usar n8n</h2>



<p>O n8n costuma ser uma boa escolha quando:</p>



<ul class="wp-block-list">
<li>há muitas integrações externas</li>



<li>a lógica muda com frequência</li>



<li>manter código para cada integração ficou caro</li>



<li>é importante visualizar e auditar fluxos</li>
</ul>



<p>Ele também é útil para prototipação, desde que exista cuidado para não deixar soluções provisórias virarem definitivas sem revisão.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-quando-nao-faz-sentido">Quando não faz sentido</h2>



<p>Nem tudo precisa de n8n. Em alguns casos, ele adiciona mais uma camada desnecessária.</p>



<p>Exemplos:</p>



<ul class="wp-block-list">
<li>lógica extremamente simples e estável</li>



<li>processamento pesado ou de alta performance</li>



<li>fluxos críticos que exigem controle fino de memória ou tempo</li>
</ul>



<p>Nesses cenários, código direto costuma ser mais adequado.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-n8n-em-producao-pontos-de-atencao">n8n em produção: pontos de atenção</h2>



<p>Rodar n8n em produção exige alguns cuidados:</p>



<ul class="wp-block-list">
<li>persistência de dados (banco configurado corretamente)</li>



<li>controle de acesso</li>



<li>versionamento de workflows</li>



<li>monitoramento de falhas</li>



<li>cuidado com loops e execuções em massa</li>
</ul>



<p>Sem isso, a automação vira fonte de problemas, não de solução.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-o-papel-do-n8n-na-arquitetura-moderna">O papel do n8n na arquitetura moderna</h2>



<p>O n8n não é o “coração” do sistema, mas funciona bem como <strong>camada de integração</strong>. Ele conecta serviços, traduz formatos e orquestra eventos, enquanto a regra de negócio principal permanece no backend.</p>



<p>Essa separação ajuda a manter o sistema mais flexível e adaptável a mudanças.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>O n8n é uma ferramenta poderosa quando usada com consciência. Ele não substitui engenharia de software, mas resolve muito bem um problema específico: <strong>orquestrar integrações e automações de forma clara e controlada</strong>.</p>



<p>Quando entra como solução pensada, reduz complexidade. Quando entra como atalho, costuma cobrar seu preço depois.</p>
<p>The post <a href="https://leonardonascimento.dev/blog/n8n-o-que-e-como-funciona-e-quando-faz-sentido-usar/">N8N: o que é, como funciona e quando faz sentido usar</a> appeared first on <a href="https://leonardonascimento.dev">Leonardo Nascimento | Engenheiro de Software</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://leonardonascimento.dev/blog/n8n-o-que-e-como-funciona-e-quando-faz-sentido-usar/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Quando o WhatsApp vira canal operacional (e não só meio de envio)</title>
		<link>https://leonardonascimento.dev/blog/quando-o-whatsapp-vira-canal-operacional-e-nao-so-meio-de-envio/</link>
					<comments>https://leonardonascimento.dev/blog/quando-o-whatsapp-vira-canal-operacional-e-nao-so-meio-de-envio/#respond</comments>
		
		<dc:creator><![CDATA[Leonardo]]></dc:creator>
		<pubDate>Sun, 18 Jan 2026 16:19:16 +0000</pubDate>
				<category><![CDATA[API]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[alertas de sistema]]></category>
		<category><![CDATA[integrações]]></category>
		<category><![CDATA[monitoramento]]></category>
		<category><![CDATA[notificações]]></category>
		<category><![CDATA[operação]]></category>
		<category><![CDATA[whatsapp em produção]]></category>
		<guid isPermaLink="false">https://leonardonascimento.dev/?p=2310</guid>

					<description><![CDATA[<p>Durante muito tempo, o WhatsApp foi visto apenas como um canal de comunicação direta: mensagens, avisos, campanhas pontuais. Em ambientes técnicos e operacionais, porém, ele começou a assumir outro papel — o de canal de visibilidade em tempo real. Essa mudança não aconteceu por moda, mas por necessidade. O problema de depender apenas de dashboards [&#8230;]</p>
<p>The post <a href="https://leonardonascimento.dev/blog/quando-o-whatsapp-vira-canal-operacional-e-nao-so-meio-de-envio/">Quando o WhatsApp vira canal operacional (e não só meio de envio)</a> appeared first on <a href="https://leonardonascimento.dev">Leonardo Nascimento | Engenheiro de Software</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Durante muito tempo, o WhatsApp foi visto apenas como um canal de comunicação direta: mensagens, avisos, campanhas pontuais. Em ambientes técnicos e operacionais, porém, ele começou a assumir outro papel — o de <strong><a href="http://notifish.com/?utm_source=leonardo.dev" target="_blank" rel="noreferrer noopener nofollow">canal de visibilidade em tempo real</a></strong>.</p>



<p>Essa mudança não aconteceu por moda, mas por necessidade.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-o-problema-de-depender-apenas-de-dashboards">O problema de depender apenas de dashboards</h2>



<p>Sistemas modernos produzem dados o tempo todo: logs, eventos, erros, métricas, status de filas, integrações externas. Em teoria, tudo isso deveria ser acompanhado por dashboards bem configurados.</p>



<p>Na prática, dashboards só funcionam quando alguém está olhando para eles. Em incidentes reais, o que costuma acontecer é diferente: o problema aparece primeiro no efeito, não na métrica. Quando alguém percebe, o impacto já aconteceu.</p>



<p>É nesse ponto que canais ativos, como o WhatsApp, começam a fazer sentido.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-alertar-nao-e-o-mesmo-que-informar">Alertar não é o mesmo que informar</h2>



<p>Um erro comum ao levar dados para o WhatsApp é tentar transformar o canal em espelho do sistema: enviar tudo, o tempo todo. O resultado costuma ser o oposto do esperado — excesso de mensagens, ruído e alertas ignorados.</p>



<p>O valor real está em <strong>selecionar o que importa</strong>, formatar bem a mensagem e entregar no momento certo. Não é sobre volume, é sobre contexto.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-a-importancia-de-mensagens-legiveis">A importância de mensagens legíveis</h2>



<p><a href="https://leonardonascimento.dev/blog/como-monitorar-aplicacao-e-servidor-pelo-whatsapp-logs-erros-e-alertas/" type="post" id="2290">Alertas técnicos mal formatados são tão inúteis quanto a ausência deles</a>. Mensagens longas demais, payloads em JSON ou textos sem hierarquia não ajudam na tomada de decisão.</p>



<p>Em ambientes maduros, o WhatsApp recebe mensagens curtas, diretas e com contexto suficiente para entender:</p>



<ul class="wp-block-list">
<li>o que aconteceu</li>



<li>onde aconteceu</li>



<li>se exige ação imediata</li>
</ul>



<p>Sem isso, o canal perde credibilidade rapidamente.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-quando-a-simplicidade-vira-vantagem">Quando a simplicidade vira vantagem</h2>



<p>Algumas soluções optam por formatos extremamente estruturados, cheios de campos e metadados. Isso funciona bem para sistemas internos, mas não necessariamente para canais humanos.</p>



<p>Ferramentas como o <a href="http://notifish.com/?utm_source=leonardo.dev" type="link" id="http://notifish.com/?utm_source=leonardo.dev" target="_blank" rel="noreferrer noopener nofollow"><strong>Notifish</strong> </a>seguem uma abordagem mais simples: recebem uma mensagem já pronta para leitura, com um identificador básico e controle de entrega. Isso desloca a inteligência para quem envia, não para quem recebe.</p>



<p>Na prática, isso facilita integração com sistemas existentes sem exigir grandes adaptações.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-um-padrao-que-aparece-em-operacoes-reais">Um padrão que aparece em operações reais</h2>



<p>Em operações com volume significativo, o <a href="https://leonardonascimento.dev/blog/updown-io-receba-notificacao-no-whatsapp-caso-seu-site-fique-indisponivel/" type="post" id="164">WhatsApp </a>costuma ser usado para:</p>



<ul class="wp-block-list">
<li>alertas críticos de produção</li>



<li>falhas de integração externa</li>



<li>eventos que exigem ação humana</li>



<li>confirmações de processos assíncronos</li>
</ul>



<p>Ele não substitui logs, métricas ou ferramentas de observabilidade. Ele <strong>complementa</strong>, cobrindo o espaço entre o evento técnico e a reação humana.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-o-risco-de-transformar-alerta-em-ruido">O risco de transformar alerta em ruído</h2>



<p>Sempre que um novo canal é adicionado, surge o risco de exagero. Alertar tudo é quase tão ruim quanto não alertar nada.</p>



<p>Operações estáveis costumam ter regras claras:</p>



<ul class="wp-block-list">
<li>poucos tipos de alerta</li>



<li>mensagens bem definidas</li>



<li>identificação para evitar duplicidade</li>



<li>silêncio como padrão</li>
</ul>



<p>Quando o WhatsApp segue essa lógica, ele se mantém útil. Quando vira canal genérico, é rapidamente ignorado.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-integracao-como-parte-da-arquitetura-nao-como-atalho">Integração como parte da arquitetura, não como atalho</h2>



<p>Outro ponto importante é tratar a integração com WhatsApp como parte da arquitetura do sistema, e não como um remendo. Isso significa:</p>



<ul class="wp-block-list">
<li>decidir onde o alerta nasce</li>



<li>quem é responsável por enviá-lo</li>



<li>quando ele deve ser disparado</li>



<li>e quando <strong>não</strong> deve</li>
</ul>



<p>Sem esse cuidado, qualquer ferramenta vira apenas mais uma dependência.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-conclusao">Conclusão</h2>



<p>O WhatsApp deixou de ser apenas um meio de comunicação informal e passou a ocupar um espaço relevante em operações técnicas. Quando usado com critério, ele encurta o tempo entre o problema e a reação.</p>



<p>Ferramentas que respeitam essa lógica — simples na entrada, claras na saída — tendem a se encaixar melhor em sistemas reais. Não por prometerem mais, mas por <strong>atrapalharem menos</strong>.</p>
<p>The post <a href="https://leonardonascimento.dev/blog/quando-o-whatsapp-vira-canal-operacional-e-nao-so-meio-de-envio/">Quando o WhatsApp vira canal operacional (e não só meio de envio)</a> appeared first on <a href="https://leonardonascimento.dev">Leonardo Nascimento | Engenheiro de Software</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://leonardonascimento.dev/blog/quando-o-whatsapp-vira-canal-operacional-e-nao-so-meio-de-envio/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Como fazer o primeiro disparo na Evolution API</title>
		<link>https://leonardonascimento.dev/blog/como-fazer-o-primeiro-disparo-na-evolution-api/</link>
					<comments>https://leonardonascimento.dev/blog/como-fazer-o-primeiro-disparo-na-evolution-api/#respond</comments>
		
		<dc:creator><![CDATA[Leonardo]]></dc:creator>
		<pubDate>Sat, 17 Jan 2026 22:06:00 +0000</pubDate>
				<category><![CDATA[API]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[api v2]]></category>
		<category><![CDATA[automação]]></category>
		<category><![CDATA[disparo de mensagem]]></category>
		<category><![CDATA[evolution api]]></category>
		<category><![CDATA[integrações]]></category>
		<category><![CDATA[whatsapp api]]></category>
		<guid isPermaLink="false">https://leonardonascimento.dev/?p=2307</guid>

					<description><![CDATA[<p>Depois de instalar a Evolution API (via Orion), muita gente trava no mesmo ponto: “ok, está rodando… e agora?”.O primeiro disparo envolve 3 passos obrigatórios, sempre nessa ordem: Se pular qualquer um deles, não funciona. 1️⃣ Confirmar dados básicos da instalação Você precisa ter em mãos: Esses dois dados são usados em todas as chamadas. [&#8230;]</p>
<p>The post <a href="https://leonardonascimento.dev/blog/como-fazer-o-primeiro-disparo-na-evolution-api/">Como fazer o primeiro disparo na Evolution API</a> appeared first on <a href="https://leonardonascimento.dev">Leonardo Nascimento | Engenheiro de Software</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p><a href="https://leonardonascimento.dev/blog/como-instalar-docker-portainer-e-evolution-api/" type="post" id="2304">Depois de instalar a Evolution API (via Orion)</a>, muita gente trava no mesmo ponto: <em>“ok, está rodando… e agora?”</em>.<br>O primeiro disparo envolve <strong>3 passos obrigatórios</strong>, sempre nessa ordem:</p>



<ol class="wp-block-list">
<li>criar a instância</li>



<li>conectar o WhatsApp (QR Code)</li>



<li>enviar a mensagem</li>
</ol>



<p>Se pular qualquer um deles, não funciona.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-1-confirmar-dados-basicos-da-instalacao">1️⃣ Confirmar dados básicos da instalação</h2>



<p>Você precisa ter em mãos:</p>



<ul class="wp-block-list">
<li><strong>Server URL</strong><br>Exemplo: <code>https://api.seudominio.com</code></li>



<li><strong>API Key global</strong> (gerada pelo Orion na instalação)</li>
</ul>



<p>Esses dois dados são usados em <strong>todas</strong> as chamadas.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-2-criar-a-instancia-obrigatorio">2️⃣ Criar a instância (obrigatório)</h2>



<p>Na Evolution API v2, <strong>não existe envio sem instância</strong>.</p>



<h3 class="wp-block-heading" id="h-endpoint">Endpoint</h3>



<pre class="wp-block-code"><code>POST /instance/create
</code></pre>



<h3 class="wp-block-heading" id="h-exemplo-com-curl">Exemplo com <code>curl</code></h3>



<pre class="wp-block-code"><code>curl -X POST https://api.seudominio.com/instance/create \
  -H "apikey: SUA_API_KEY_AQUI" \
  -H "Content-Type: application/json" \
  -d '{
    "instanceName": "primeira-instancia"
  }'
</code></pre>



<h3 class="wp-block-heading" id="h-resposta-esperada">Resposta esperada</h3>



<p>Algo semelhante a:</p>



<pre class="wp-block-code"><code>{
  "instance": {
    "instanceName": "primeira-instancia",
    "status": "created"
  }
}
</code></pre>



<p>Se deu erro aqui, <strong>pare</strong>. O resto não vai funcionar.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-3-conectar-o-whatsapp-qr-code">3️⃣ Conectar o WhatsApp (QR Code)</h2>



<p>Depois da instância criada, você precisa <strong>conectar o número</strong>.</p>



<h3 class="wp-block-heading" id="h-gerar-qr-code">Gerar QR Code</h3>



<pre class="wp-block-code"><code>GET /instance/connect/{instanceName}
</code></pre>



<pre class="wp-block-code"><code>curl -X GET https://api.seudominio.com/instance/connect/primeira-instancia \
  -H "apikey: SUA_API_KEY_AQUI"
</code></pre>



<p>A resposta vem com o <strong>QR Code em base64</strong> ou link.</p>



<p>Abra no navegador ou use o <strong>manager</strong> do Orion:</p>



<pre class="wp-block-code"><code>https:&#47;&#47;api.seudominio.com/manager
</code></pre>



<p>Escaneie com o WhatsApp do celular.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading" id="h-verificar-status-da-instancia">Verificar status da instância</h3>



<p>Antes de enviar mensagem, confirme que está conectada.</p>



<pre class="wp-block-code"><code>GET /instance/connectionState/{instanceName}
</code></pre>



<pre class="wp-block-code"><code>curl -X GET https://api.seudominio.com/instance/connectionState/primeira-instancia \
  -H "apikey: SUA_API_KEY_AQUI"
</code></pre>



<p>Status esperado:</p>



<pre class="wp-block-code"><code>{
  "state": "open"
}
</code></pre>



<p>Se não estiver <code>open</code>, <strong>não adianta tentar enviar mensagem</strong>.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-4-primeiro-disparo-de-mensagem-texto-simples">4️⃣ Primeiro disparo de mensagem (texto simples)</h2>



<p>Agora sim.</p>



<h3 class="wp-block-heading" id="h-endpoint-v2-para-texto">Endpoint v2 para texto</h3>



<pre class="wp-block-code"><code>POST /message/sendText/{instanceName}
</code></pre>



<h3 class="wp-block-heading" id="h-exemplo-real">Exemplo real</h3>



<pre class="wp-block-code"><code>curl -X POST https://api.seudominio.com/message/sendText/primeira-instancia \
  -H "apikey: SUA_API_KEY_AQUI" \
  -H "Content-Type: application/json" \
  -d '{
    "number": "559999999999",
    "text": "Olá! Este é meu primeiro disparo pela Evolution API v2."
  }'
</code></pre>



<p>⚠️ <strong>Formato do número</strong></p>



<ul class="wp-block-list">
<li>Sempre com <strong>DDI + DDD + número</strong></li>



<li>Sem <code>+</code>, sem espaço, sem traço</li>
</ul>



<p>Exemplo válido:</p>



<pre class="wp-block-code"><code>5591999999999
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-5-o-que-acontece-se-nao-enviar">5️⃣ O que acontece se não enviar?</h2>



<p>Os erros mais comuns no primeiro disparo:</p>



<h3 class="wp-block-heading" id="h-instancia-nao-conectada">❌ Instância não conectada</h3>



<p>Resposta típica:</p>



<pre class="wp-block-code"><code>instance not connected
</code></pre>



<h3 class="wp-block-heading" id="h-numero-invalido">❌ Número inválido</h3>



<ul class="wp-block-list">
<li>faltou DDI</li>



<li>tem <code>+</code></li>



<li>tem espaço</li>
</ul>



<h3 class="wp-block-heading" id="h-api-key-errada">❌ API Key errada</h3>



<p>Resposta:</p>



<pre class="wp-block-code"><code>Unauthorized
</code></pre>



<h3 class="wp-block-heading" id="h-endpoint-errado-v1-v2">❌ Endpoint errado (v1 ≠ v2)</h3>



<p>Na v2:</p>



<pre class="wp-block-code"><code>/message/sendText/{instance}
</code></pre>



<p>Na v1 era diferente. Não misture.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-6-teste-rapido-pelo-manager-opcional">6️⃣ Teste rápido pelo Manager (opcional)</h2>



<p>Se quiser validar sem curl:</p>



<ol class="wp-block-list">
<li>Acesse: <code>https://api.seudominio.com/manager</code></li>



<li>Escolha a instância</li>



<li>Vá em <strong>Send Message</strong></li>



<li>Envie um texto simples</li>
</ol>



<p>Se funciona no manager e não via API, o problema é <strong>payload ou headers</strong>.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-7-proximos-disparos-possiveis-depois-do-primeiro">7️⃣ Próximos disparos possíveis (depois do primeiro)</h2>



<p>Depois que o texto simples funciona, você pode evoluir para:</p>



<ul class="wp-block-list">
<li>imagem</li>



<li>vídeo</li>



<li>áudio</li>



<li>botão</li>



<li>lista</li>



<li>disparos em massa</li>



<li>integração com Laravel, n8n, Notifish etc.</li>
</ul>



<p>Mas <strong>sempre valide texto primeiro</strong>.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-resumo-rapido-ordem-correta">Resumo rápido (ordem correta)</h2>



<p>1️⃣ criar instância<br>2️⃣ conectar WhatsApp<br>3️⃣ confirmar <code>state = open</code><br>4️⃣ enviar <code>sendText</code></p>



<p>Se seguir isso, <strong>funciona</strong>.</p>
<p>The post <a href="https://leonardonascimento.dev/blog/como-fazer-o-primeiro-disparo-na-evolution-api/">Como fazer o primeiro disparo na Evolution API</a> appeared first on <a href="https://leonardonascimento.dev">Leonardo Nascimento | Engenheiro de Software</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://leonardonascimento.dev/blog/como-fazer-o-primeiro-disparo-na-evolution-api/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
