Pular para conteúdo

Prospecção de Arquitetos — ARQUITETURA

Atualizado: 2026-07-03 · por: sessão arquitetos-teste-e2e (Opus) · rev: 1


Visão geral do pipeline

[Pipedrive: firmas de arquitetura]
        │  filtro 139119 (3 sinais OR)
        ▼
[WF-Arq-Ingesta]  ── Pipe → Postgres (só identificador + controle)
        ▼
[PostgreSQL: tabela `arquitetos`]  ◄── fonte de verdade (extensível a leads de fora do Pipe)
        ▼
[WF-Arq-Dispatcher (cron)] → [WF-Arq-Worker (webhook, 1 lead/vez, self-trigger)]
        │
        │  No envio: Worker puxa contexto do Pipe via API on-demand
        │  IA condicional (Gemini Flash, temp 0.9) + randomização real
        ▼
   ┌─────────────┬──────────────┐
   ▼             ▼              ▼
Amazon SES    Chatwoot       Label `ia-atendendo`
(email)       (WhatsApp)     + resposta interrompe cadência
                              + IA de atendimento responde
        ▼
   Cal.com (vendas3@bepex.com.br, ter/qui tarde) — CTA de agendamento

4 Workflows (todos INATIVOS)

WF-Arq-Ingesta (xsyq2JowLQRV53Og)

Trigger: Manual. Propósito: popular a tabela arquitetos a partir do Pipedrive.

Fluxo: busca orgs do filtro 139119 (paginado) → para cada org busca persons → UPSERT ON CONFLICT (pipedrive_person_id) no Postgres. Grava só identificadores + controle de cadência (sem contexto do Pipe — contexto é puxado on-demand pelo Worker).

Decisão de design: contexto NÃO salvo na tabela — evita stale data e permite leads de fora do Pipedrive no futuro.

WF-Arq-Dispatcher (Wh4Ss3URaFsz0BlO)

Trigger: Cron 9h + 15h seg-sex. Propósito: verificar se há leads prontos e acionar o Worker.

Fluxo: SELECT COUNT(*) FROM arquitetos WHERE sequence_status = 'active' AND next_action_date <= CURRENT_DATE → se count > 0 → HTTP GET no webhook do Worker.

WF-Arq-Worker (TsrWgkb1uP0L9ncL)

Trigger: Webhook GET /arq-worker. Propósito: motor principal — processa 1 lead por vez com self-trigger.

Fluxo (34 nós):

  1. Busca LeadSELECT * FROM arquitetos WHERE sequence_status = 'active' AND next_action_date <= CURRENT_DATE ORDER BY next_action_date LIMIT 1
  2. Roteia — SEQUENCE_MAP {0:'email', 3:'whatsapp', 6:'email', 9:'whatsapp'} determina canal. SENDERS (4 slots A/B/C/D, round-robin via sender_slot) determina remetente.
  3. Contexto Pipedrive — busca pessoa/org/deals via API usando pipedrive_person_id / pipedrive_org_id
  4. IA condicional (Gemini Flash, temp 0.9, credential OpenRouter):
  5. Com contexto → prompt de personalização com gancho de retomada
  6. Sem contexto → reescrita da mensagem padrão com elemento randômico (variante injetada no prompt por execução)
  7. Envio:
  8. Email → SES raw-body (obrigatório — contentType: raw + encodeURIComponent manual)
  9. WhatsApp → IF inbox disponível (whatsapp_inbox_id !== null) → busca/cria contato Chatwoot → cria conversa → envia msg → label ia-atendendo
  10. Sem canal → skip, atualiza lead
  11. Atualiza Leadsequence_day incrementa, next_action_date avança, last_action_date = hoje. Se sequence_day >= 9sequence_status = 'completed'.
  12. Self-trigger — conta leads restantes → checa horário (8h–17h) → se continuar → wait 5–15 min → HTTP GET no próprio webhook

Decisões de design: - Self-trigger com wait randômico (5–15 min) = anti-detecção + respeita rate limits - 1 lead/vez = erro não afeta lote inteiro - IF inbox antes de WhatsApp = graceful degradation enquanto chips não existem

WF-Arq-Optout (4HJH2xHxcjdvomON)

Trigger: Webhook GET /arq-optout?email=X. Propósito: link de opt-out nos emails.

Fluxo: extrai email do query param → UPDATE arquitetos SET sequence_status = 'opted_out' WHERE email = $1 → responde HTML de confirmação.


PostgreSQL — tabela arquitetos

Schema com colunas em PORTUGUÊS (confirmado pelo Teste E2E, probe toquIjzNhIsNN59O, 2026-07-01). Schema completo em referencia-tecnica.md.

Decisões de design: - Enxuta — sem colunas de contexto do Pipedrive (contexto puxado on-demand pelo Worker) - UNIQUE em pipedrive_person_id — permite UPSERT na ingestão sem duplicar - Extensível — campo origem permite leads de fora do Pipedrive no futuro


IA de atendimento (clone)

Clone da IA Prospecção (4wLT4ni6udXSnVS9) adaptado para arquitetos: workflow OC6so0JJTp5YseW7 (INATIVO). Prompt reescrito com ângulo de arquitetura (solução completa, preço vs Hunter Douglas/Sumetais, CTA Cal.com). Label Chatwoot bot-arquitetos (ID 65). ROUTER V2 (iT5a8VV2vPF6ZpYL) atualizado com output 5 para inboxes placeholder 70/71/72.

Detalhes de configuração em referencia-tecnica.md § IA de atendimento.


Cadência

sequence_day Canal Papel
0 Email Apresentação: solução completa, fábrica BR, catálogo Inspiracional
3 WhatsApp Cutucada pessoal, oferta de apresentação 15 min via Cal.com
6 Email Prova: galeria de obras, reforço preço vs Hunter Douglas
9 WhatsApp Última cutucada, CTA final Cal.com, encerra sequência

Email-first porque: escala via SES sem depender de chips, esquenta terreno pro WhatsApp. Último toque = WhatsApp (canal mais responsivo pra fechar agendamento).


Interrupção por resposta

Qualquer resposta do lead no WhatsApp → automação Chatwoot marca sequence_status = 'respondido' → Worker para de disparar toques → IA de atendimento assume a conversa.