Automação Ágil: Fluxos com Make, n8n e Power Automate
Automação Ágil: Fluxos com Make, n8n e Power Automate
“Processos manuais custam tempo, dinheiro e geram erros. Automatizá‑los com ferramentas adequadas transforma a operação em um motor de eficiência.”
Neste artigo vamos construir, passo a passo, um fluxo de automação empresarial usando três plataformas amplamente adotadas no mercado: Make (antigo Integromat), n8n (open‑source) e Microsoft Power Automate. Você verá a arquitetura ideal, como conectar sistemas via webhook e API REST, além de códigos reais em Go e JavaScript que podem ser inseridos nas ferramentas para estender a lógica.
Público-alvo: Analistas de negócios, desenvolvedores de integração e gestores de TI que desejam acelerar a digitalização de processos sem criar infraestruturas complexas.
Sumário
Conceitos fundamentais e arquitetura de automação
| Conceito | Por que importa? |
|---|---|
| RPA (Robotic Process Automation) | Permite reproduzir tarefas repetitivas em sistemas legados ou SaaS sem alterar código. |
| Webhook | Canal de comunicação “push” que notifica instantaneamente outras ferramentas quando um evento ocorre. |
| API REST | Interface padronizada para leitura e escrita de dados entre sistemas heterogêneos. |
| BPMN (Business Process Model and Notation) | Linguagem visual para mapear processos e garantir que a automação siga a lógica de negócio. |
| Orquestração de Fluxo | Coordenação de múltiplas chamadas, decisões condicionais e tratamento de exceções em um único pipeline. |
A arquitetura típica que vamos explorar tem três camadas:
Ferramentas low‑code para orquestração de fluxos
| Ferramenta | Principais recursos | Quando usar |
|---|---|---|
| Make | Conexões nativas a mais de 1 000 apps, editor visual de cenários, suporte a funções JavaScript. | Processos que precisam de alta disponibilidade e integração pronta‑a‑usar. |
| n8n | Código aberto, execução auto‑hospedada, possibilidade de criar nós customizados em JavaScript/TypeScript. | Empresas que desejam total controle sobre a infraestrutura e flexibilidade de customização. |
| Power Automate | Integração profunda com o ecossistema Microsoft (Office 365, Teams, Dynamics), gatilhos baseados em eventos do Azure. | Organizações já inseridas no Microsoft 365 e que precisam de fluxos que interajam com SharePoint, Outlook, etc. |
Por que combinar as três?
- Make oferece rapidez na prototipação;
- n8n garante que você pode hospedar o fluxo internamente, evitando dependência de nuvem pública;
- Power Automate conecta o fluxo ao ambiente corporativo da Microsoft, permitindo, por exemplo, criar documentos no SharePoint automaticamente.
Integração via webhook e API REST
1. Criando um endpoint webhook em Go
O código abaixo expõe um endpoint HTTP simples que recebe um payload JSON, valida a assinatura HMAC e encaminha o conteúdo para a API de um sistema de tickets (ex.: ServiceNow). O servidor pode ser rodado em qualquer máquina ou serviço de nuvem (AWS Lambda, Google Cloud Run, etc.).
// webhook_server.go
package main
import (
"crypto/hmac"
"crypto/sha256"
"encoding/hex"
"encoding/json"
"io/ioutil"
"log"
"net/http"
"os"
)
type TicketPayload struct {
Title string json:"title"
Description string json:"description"
Priority string json:"priority"
}
// verifica assinatura HMAC enviada no cabeçalho X-Signature
func validateSignature(body []byte, signature string) bool {
secret := []byte(os.Getenv("WEBHOOK_SECRET"))
mac := hmac.New(sha256.New, secret)
mac.Write(body)
expectedMAC := hex.EncodeToString(mac.Sum(nil))
return hmac.Equal([]byte(expectedMAC), []byte(signature))
}
// handler principal
func webhookHandler(w http.ResponseWriter, r *http.Request) {
if r.Method != http.MethodPost {
http.Error(w, "Método não permitido", http.StatusMethodNotAllowed)
return
}
signature := r.Header.Get("X-Signature")
body, err := ioutil.ReadAll(r.Body)
if err != nil {
http.Error(w, "Falha ao ler corpo", http.StatusBadRequest)
return
}
defer r.Body.Close()
if !validateSignature(body, signature) {
http.Error(w, "Assinatura inválida", http.StatusUnauthorized)
return
}
var payload TicketPayload
if err := json.Unmarshal(body, &payload); err != nil {
http.Error(w, "JSON inválido", http.StatusBadRequest)
return
}
// chamada à API do ServiceNow (exemplo simplificado)
req, _ := http.NewRequest(http.MethodPost, "https://example.service-now.com/api/now/table/incident", nil)
q := req.URL.Query()
q.Add("short_description", payload.Title)
q.Add("description", payload.Description)
q.Add("priority", payload.Priority)
req.URL.RawQuery = q.Encode()
req.Header.Set("Authorization", "Bearer "+os.Getenv("SNOW_TOKEN"))
resp, err := http.DefaultClient.Do(req)
if err != nil {
http.Error(w, "Erro ao criar ticket", http.StatusInternalServerError)
return
}
defer resp.Body.Close()
if resp.StatusCode >= 200 && resp.StatusCode < 300 {
w.WriteHeader(http.StatusCreated)
w.Write([]byte({"status":"ok"}))
} else {
http.Error(w, "ServiceNow retornou erro", http.StatusBadGateway)
}
}
func main() {
http.HandleFunc("/webhook", webhookHandler)
port := os.Getenv("PORT")
if port == "" {
port = "8080"
}
log.Printf("Servidor rodando na porta %s", port)
log.Fatal(http.ListenAndServe(":"+port, nil))
}
Como usar:
go build -o webhook_server webhook_server.go). WEBHOOK_SECRET e SNOW_TOKEN. https://seu-dominio.com/webhook) e registre‑o como destino nos fluxos do Make/n8n/Power Automate.2. Função JavaScript customizada no n8n
n8n permite inserir Function Nodes que executam código JavaScript puro. O exemplo abaixo recebe o payload do webhook, normaliza campos e decide se o ticket deve ser criado ou apenas registrado para auditoria.
```javascript // n8n Function Node // Entrada: item (payload do webhook) // Saída: item com campo "action" const payload = items[0].json;
// Normaliza prioridade (texto livre → número) const priorityMap = { "alta": 1, "média": 2, "baixa": 3 }; const priority = priorityMap[payload.priority?.toLowerCase()] || 3;
// Regra de negócio: tickets com prioridade 1 são enviados imediatamente, // os demais são armazenados em uma planilha Google. let action = priority === 1 ? "createTicket" : "storeAudit