Conteúdo detalhado
🏷️ O que é custom field
Custom field é um placeholder no prompt que é preenchido em runtime com dado do CRM, da sessão ou de um webhook. O mesmo prompt vira personalizado por cliente sem refatoração.
# Contexto do cliente atual
Nome: {{nome}}
Cidade: {{cidade}}
Plano: {{plano}}
Lead score (0-100): {{lead_score}}
Última interação: {{ultima_interacao}}
# Comportamento baseado em contexto
- Se lead_score > 70: trate com prioridade, ofereça contato direto
- Se plano == "trial": destaque benefícios do plano pago
- Se ultima_interacao < 24h: refira sem repetir o que já foi dito
📥 De onde vem o dado
Custom field só é útil se o dado chega certo. As fontes típicas: CRM (Hubspot, RD, Salesforce), banco interno, payload do webhook que iniciou a sessão, cookie ou JWT da sessão web.
Dado de identidade, plano, histórico de compra. Source of truth.
Carrega dado do evento que disparou a sessão (carrinho, ticket).
Cookie, JWT, query string. Dado leve e volátil.
Lead score, segmento, lifetime value. Calculado periodicamente.
🧬 Campos úteis típicos
Não jogue 50 campos no prompt. Escolha os 5-8 que realmente mudam o comportamento. Cada campo é uma alavanca; campo demais é ruído que custa token.
📊 Top 8 custom fields para um bot de vendas
- nome — personaliza saudação e cria conexão
- cidade — adapta sugestões geográficas
- plano — define o que pode oferecer
- lead_score — define urgência e tom
- ultima_interacao — evita repetir
- preferencias — atalho para recomendação
- idioma — pt/en/es
- canal — wpp/web/voz (muda formato)
🧪 Tratar campo vazio
Campo nem sempre vem preenchido. "{{nome}}" cru no chat é o bug que mais viraliza no Twitter. Defina default e regra de uso para cada campo crítico.
# Regras para campos vazios
- Se {{nome}} vazio: chame de "você" (nunca de "{{nome}}")
- Se {{cidade}} vazia: pergunte na primeira interação relevante
- Se {{lead_score}} vazio: trate como score=50 (neutro)
- Se {{plano}} vazio: assuma plano gratuito
# Sanitização (no backend, antes de injetar)
- Remova chaves curly se valor é null
- Escape caracteres especiais (" \ <)
- Trunque strings > 200 chars
⚠️ Prompt injection via custom field
Bug clássico: pessoa se cadastra com nome "Maria;DROP TABLE users" e o prompt injeta literal. Sanitize sempre. Vale para nome, telefone, mensagem de campo livre.
🧠 Memória de sessão
Custom field captura o "perfil". Memória de sessão captura o "agora": preferências aprendidas na conversa atual, decisões tomadas, status da tarefa em andamento.
Início da sessão
Carrega custom fields do CRM. Memória de sessão vazia.
Durante a conversa
A cada turn, agente atualiza um state {imovel_em_foco: 1108, slot_proposto: ...}.
A cada 8 turns
Sumariza histórico em 3 frases. Joga as 8 últimas no contexto + resumo do resto.
Fim da sessão
Persiste o que importa de volta no CRM (lead score atualizado, imóvel preferido).
🔐 Privacidade e LGPD
Custom field carrega dado pessoal direto para o prompt — e o prompt vai para o provedor do LLM. LGPD multa pesado. Provedor pode (e às vezes loga) o prompt para abuse detection.
✓ O que pode injetar
- ✓Nome (mascarado ou primeiro nome)
- ✓Cidade/estado
- ✓Plano e segmento
- ✓Lead score (número anônimo)
- ✓Preferências declaradas
✗ O que NÃO injetar
- ✗CPF, RG, CNH
- ✗Cartão de crédito ou meio de pagamento
- ✗Endereço completo
- ✗Dados de saúde
- ✗Senha, token, chave de API
💡 Padrão de segurança
Para ações que precisam de dado sensível (gerar boleto com CPF), envie o dado para a tool — nunca via prompt. Tool roda no seu backend, dado nunca atravessa o provedor.
📌 Resumo do módulo
Próximo:
Trilha 3 — Operação (Módulo 3.1)