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):
- Busca Lead —
SELECT * FROM arquitetos WHERE sequence_status = 'active' AND next_action_date <= CURRENT_DATE ORDER BY next_action_date LIMIT 1 - Roteia — SEQUENCE_MAP
{0:'email', 3:'whatsapp', 6:'email', 9:'whatsapp'}determina canal. SENDERS (4 slots A/B/C/D, round-robin viasender_slot) determina remetente. - Contexto Pipedrive — busca pessoa/org/deals via API usando
pipedrive_person_id/pipedrive_org_id - IA condicional (Gemini Flash, temp 0.9, credential OpenRouter):
- Com contexto → prompt de personalização com gancho de retomada
- Sem contexto → reescrita da mensagem padrão com elemento randômico (variante injetada no prompt por execução)
- Envio:
- Email → SES raw-body (obrigatório —
contentType: raw+encodeURIComponentmanual) - WhatsApp → IF inbox disponível (
whatsapp_inbox_id !== null) → busca/cria contato Chatwoot → cria conversa → envia msg → labelia-atendendo - Sem canal → skip, atualiza lead
- Atualiza Lead —
sequence_dayincrementa,next_action_dateavança,last_action_date= hoje. Sesequence_day >= 9→sequence_status = 'completed'. - 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 | Apresentação: solução completa, fábrica BR, catálogo Inspiracional | |
| 3 | Cutucada pessoal, oferta de apresentação 15 min via Cal.com | |
| 6 | Prova: galeria de obras, reforço preço vs Hunter Douglas | |
| 9 | Ú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.