Referência Técnica — Caramelo¶
IDs, nós, credenciais (nomes), destinatários e endpoints. Os valores de segredo/credencial são IDs internos da instância n8n Bepex (Tier 2 — só válidos dentro da instância); segredos de alto risco não se aplicam a este projeto.
Workflows¶
| Workflow | ID | Status | Papel |
|---|---|---|---|
| Caramelo v2 (Fases 1+2) | SaR2gOEMNRAFjDOL |
ATIVO | Diário — 15 nodes, cron seg-sex 8h, WhatsApp individual via Chatwoot |
| Caramelo Semanal (Fase 3) | yOPIrBxtOoRwgZTO |
ATIVO | Semanal — 6 nodes, cron segunda 7h, email consolidado via SES |
| Relatório diário pipedrive (legado) | 5OjAbflpRHfEMrJu |
INATIVO | Caramelo antigo (51 nodes, email 4h, metáforas caninas). Base histórica do redesenho — não reativar |
Diário — SaR2gOEMNRAFjDOL¶
Trigger: Schedule, cron 8h seg-sex.
Modelo IA: google/gemini-2.5-flash via OpenRouter (credencial OpenRouter da Bepex).
Fluxo (15 nodes)¶
Schedule → Config → Get All Open Deals → Extract Unique Orgs → Fetch Org Data →
Merge Org Data → Group by Owner → Has Deals? → Caramelo IA → Format WhatsApp →
Should Send? → Send/Skip → Save Sent Insights
Nós-chave¶
| Nó | Papel |
|---|---|
| Get All Open Deals | Pipedrive — todos os deals abertos (cred. de leitura Bepex) |
| Extract Unique Orgs | Extrai org_id únicos via deal['Organização'].value (ver lição resolveProperties abaixo) |
| Fetch Org Data | HTTP GET /v1/organizations/{org_id}, batching 5/2s, cred. de leitura Bepex |
| Merge Org Data | Faz merge do enrichment (LIR, faixa_faturamento, CNAE, RFM, segmento) nos deals |
| Group by Owner | Agrupa deals por vendedor; injeta org_enrichment por deal + recently_sent (texto pro prompt) + sent_orgs (array pro hard filter) |
| Caramelo IA | Prompt com LIR como fonte primária; "REGRA ABSOLUTA": não repetir empresa enviada nos últimos 14 dias (soft filter) |
| Format WhatsApp | Formata os destaques; hard filter remove highlights de empresas repetidas (case-insensitive + includes bidirecional) independente do que a IA retornou |
| Should Send? / Send | Só envia se houver destaque; envio via Chatwoot inbox 61 |
| Save Sent Insights | Persiste org+tag+summary no staticData após envio (lê $('Format WhatsApp').all() com filtro skip === false — não $json, que é a response do Chatwoot) |
Canal de envio (Chatwoot)¶
- Instância:
chat.bepex.com.br(account 2), inbox 61 (pré-vendas frio). - Credencial n8n:
FzLnFD8cohSYSYIN. - Conversation IDs por vendedor: Matheus (Vendas 1) =
120063· Gustavo (Vendas 3) =120064· Suelen (Vendas 5) =120065.
Filtro de novidade (Fase 2 — dual-layer)¶
Contra repetição de empresas, retenção 14 dias:
- Soft filter: prompt da IA com "REGRA ABSOLUTA" proibindo empresas já enviadas nos últimos 14 dias (via
recently_sent). - Hard filter: código no
Format WhatsAppque remove highlights de empresas repetidas independente do output da IA (comparação case-insensitive + includes bidirecional, viasent_orgs). - Persistência:
Save Sent Insightsgrava org/tag/summary nostaticDatado próprio workflow.PATCHsó destaticDatanão resetaactivenemversionId.
Semanal — yOPIrBxtOoRwgZTO¶
- 6 nodes, cron segunda 7h.
- Lê o
staticDatado Caramelo v2 (SaR2gOEMNRAFjDOL) via API pública do n8n, agrega os insights dos últimos 7 dias, gera HTML com resumo por vendedor e tags. - Envia via Amazon SES (
caramelo@bepex.com.br). Se não houve insight na semana, não envia. - Destinatários:
enrico@bepex.com.br,rafael@bepex.com.br,vendas@bepex.com.br,vendas3@bepex.com.br. - SES: usar HTTP Request com
contentType: raw(nunca o node nativoawsSes— double-encode do@). Ver a disciplina infra / skillamazon-ses-bepex.
Fonte de dados — LIR¶
O LIR (Lead Intelligence Report) é o enriquecimento de organizações do Pipedrive: faturamento,
projetos abertos, expansão, contratos públicos, SPEs, CNAE, RFM, segmento. Cobertura observada
(exec 561385, 2026-06-18): 371 deals abertos → 268 orgs únicos buscados → 197 deals (53%) com
LIR. Cobertura por vendedor variava de ~59% a ~69%.
Lições técnicas¶
resolveProperties: trueno Pipedrive transformaorg_id(numérico) emOrganização(objeto com.value). Lerdeal['Organização']?.valuecom fallback paradeal.org_id; lerdeal.org_iddireto retornavaundefined→ fallbackorg_id: 0→ erro na API. (Memóriafeedback_pipedrive_resolve_properties_org_id.)- Schedule Trigger cacheia snapshot antigo após PATCH — após alterar via REST, o cron pode
rodar a versão antiga. Sempre
deactivate → reactivate. (Memóriafeedback_n8n_schedule_trigger_stale_snapshot.) Ctrl+Enterapós PATCH via REST roda a versão em memória do editor (antiga) — F5 obrigatório antes de testar manualmente. (Exec570526rodou código velho e mandou empresas repetidas para o Vendas 3.) (Memóriafeedback_n8n_patch_ctrlenter_stale.)Save Sent Insightsdeve ler$('Format WhatsApp').all()filtrandoskip === false, não$json(que é a response do Chatwoot).
Padrões Bepex a respeitar¶
- NUNCA bater em
/rest/login,/rest/medo n8n — invalida a sessão do Rafael. - NUNCA usar o node nativo
awsSes— HTTP Request comcontentType: raw. - Pipedrive rate limit:
batchSize: 5, batchInterval: 2000. - n8n default não salva execuções de sucesso — habilitar em workflow novo antes de diagnosticar "cron parado".
- Webhook
httpMethod: confirmar antes de mexer (BPEX manda GET por padrão).