docs: workflows n8n prontos pra importar (monitor, resumo, alertas)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Marcio Bevervanso 2026-06-16 15:55:02 -03:00
parent 19004d0cc5
commit 3ac5086161
4 changed files with 213 additions and 0 deletions

View file

@ -0,0 +1,60 @@
{
"name": "ADsPRO — Engine Monitor (a cada 4h)",
"nodes": [
{
"parameters": {
"rule": {
"interval": [
{
"field": "hours",
"hoursInterval": 4
}
]
}
},
"id": "schedule-monitor",
"name": "A cada 4 horas",
"type": "n8n-nodes-base.scheduleTrigger",
"typeVersion": 1.2,
"position": [260, 300]
},
{
"parameters": {
"method": "POST",
"url": "https://admanager.seureview.com.br/api/engine/cron",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer COLE_SEU_CRON_SECRET"
}
]
},
"options": {
"timeout": 60000
}
},
"id": "http-monitor",
"name": "Rodar Engine",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [520, 300]
}
],
"connections": {
"A cada 4 horas": {
"main": [
[
{
"node": "Rodar Engine",
"type": "main",
"index": 0
}
]
]
}
},
"settings": {},
"active": false
}

View file

@ -0,0 +1,63 @@
{
"name": "ADsPRO — Resumo Diário (20h)",
"nodes": [
{
"parameters": {
"rule": {
"interval": [
{
"field": "cronExpression",
"expression": "0 20 * * *"
}
]
}
},
"id": "schedule-summary",
"name": "Todo dia 20h",
"type": "n8n-nodes-base.scheduleTrigger",
"typeVersion": 1.2,
"position": [260, 300]
},
{
"parameters": {
"method": "POST",
"url": "https://admanager.seureview.com.br/api/engine/cron",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer COLE_SEU_CRON_SECRET"
}
]
},
"sendBody": true,
"specifyBody": "json",
"jsonBody": "{\n \"summary\": true\n}",
"options": {
"timeout": 60000
}
},
"id": "http-summary",
"name": "Pedir Resumo",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [520, 300]
}
],
"connections": {
"Todo dia 20h": {
"main": [
[
{
"node": "Pedir Resumo",
"type": "main",
"index": 0
}
]
]
}
},
"settings": {},
"active": false
}

View file

@ -0,0 +1,63 @@
{
"name": "ADsPRO — Receber Alertas do Engine",
"nodes": [
{
"parameters": {
"httpMethod": "POST",
"path": "adspro-alertas",
"responseMode": "onReceived",
"options": {}
},
"id": "webhook-alerts",
"name": "Webhook (N8N_WEBHOOK_URL)",
"type": "n8n-nodes-base.webhook",
"typeVersion": 2,
"position": [240, 300],
"webhookId": "adspro-alertas"
},
{
"parameters": {
"jsCode": "const out = [];\nfor (const item of $input.all()) {\n const p = item.json.body || item.json;\n let message = '';\n if (p.type === 'daily_summary') {\n message = '📊 Resumo do dia — Festa Magica\\n💸 Gasto: R$' + p.spend + '\\n🛒 Compras: ' + p.purchases + '\\n🎯 CPA: R$' + p.cpa + '\\n📈 ROAS: ' + p.roas + '\\n👆 CTR: ' + p.ctr + '%';\n } else if (p.type === 'automation_run') {\n const acts = (p.actions || []).map(function (a) { return (a.executed ? '✅ EXECUTOU' : '⚠️ RECOMENDA') + ': ' + a.action + ' — ' + a.campaign + ' (' + a.rule + ')'; }).join('\\n');\n message = '🤖 Engine rodou (modo ' + p.mode + ')\\n' + (acts || 'Nada disparou.');\n } else {\n message = JSON.stringify(p);\n }\n out.push({ json: { message: message, payload: p } });\n}\nreturn out;"
},
"id": "code-format",
"name": "Formatar mensagem",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [480, 300]
},
{
"parameters": {},
"id": "noop-channel",
"name": "Enviar (conecte seu canal aqui)",
"type": "n8n-nodes-base.noOp",
"typeVersion": 1,
"position": [720, 300]
}
],
"connections": {
"Webhook (N8N_WEBHOOK_URL)": {
"main": [
[
{
"node": "Formatar mensagem",
"type": "main",
"index": 0
}
]
]
},
"Formatar mensagem": {
"main": [
[
{
"node": "Enviar (conecte seu canal aqui)",
"type": "main",
"index": 0
}
]
]
}
},
"settings": {},
"active": false
}

27
docs/n8n/README.md Normal file
View file

@ -0,0 +1,27 @@
# Workflows n8n — Automação do ADsPRO
3 fluxos prontos pra importar (n8n → **Import from File**).
| Arquivo | O que faz |
|---|---|
| `01-engine-monitor.json` | A cada 4h: chama o engine pra avaliar campanhas e agir (modo do app). |
| `02-engine-summary.json` | Todo dia às 20h: pede o resumo (gasto/compras/CPA/ROAS). |
| `03-engine-alerts.json` | Recebe os alertas do engine (webhook) e formata a mensagem. |
## Passo a passo
1. **Importe os 3** no n8n.
2. Nos fluxos **01** e **02**, abra o nó HTTP e troque `COLE_SEU_CRON_SECRET` pelo valor que você definiu em `CRON_SECRET` (env do Coolify). Confirme a URL (`https://admanager.seureview.com.br/api/engine/cron`).
3. No fluxo **03**, abra o nó **Webhook**, copie a **Production URL** dele e cole na env `N8N_WEBHOOK_URL` do Coolify (e redeploy). Depois conecte o nó final ("Enviar...") ao seu canal (WhatsApp/Telegram/email).
4. **Ative** os 3 workflows (toggle "Active").
## Testar sem esperar o horário
- Fluxo 01/02: clique em **Execute Workflow** (dispara o POST na hora).
- Fluxo 03: deixe ativo e rode o 01/02 — se algo disparar, o alerta chega.
## Ajustes
- Mudar frequência: nó **Schedule** (ex: `hoursInterval: 2`).
- Modo de autonomia: env `AUTOMATION_MODE` (`mixed` | `auto` | `notify`), ou mande no body do HTTP `{ "mode": "notify" }`.