Pular para conteúdo

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

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 === falsenã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 WhatsApp que remove highlights de empresas repetidas independente do output da IA (comparação case-insensitive + includes bidirecional, via sent_orgs).
  • Persistência: Save Sent Insights grava org/tag/summary no staticData do próprio workflow. PATCH só de staticData não reseta active nem versionId.

Semanal — yOPIrBxtOoRwgZTO

  • 6 nodes, cron segunda 7h.
  • Lê o staticData do 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 nativo awsSes — double-encode do @). Ver a disciplina infra / skill amazon-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: true no Pipedrive transforma org_id (numérico) em Organização (objeto com .value). Ler deal['Organização']?.value com fallback para deal.org_id; ler deal.org_id direto retornava undefined → fallback org_id: 0 → erro na API. (Memória feedback_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ória feedback_n8n_schedule_trigger_stale_snapshot.)
  • Ctrl+Enter após PATCH via REST roda a versão em memória do editor (antiga) — F5 obrigatório antes de testar manualmente. (Exec 570526 rodou código velho e mandou empresas repetidas para o Vendas 3.) (Memória feedback_n8n_patch_ctrlenter_stale.)
  • Save Sent Insights deve ler $('Format WhatsApp').all() filtrando skip === false, não $json (que é a response do Chatwoot).

Padrões Bepex a respeitar

  • NUNCA bater em /rest/login, /rest/me do n8n — invalida a sessão do Rafael.
  • NUNCA usar o node nativo awsSes — HTTP Request com contentType: 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).