- ASP.NET Core 9 Razor Pages + Minimal API hybrid - 14 validators (CPF, CEP, CNPJ, email, phone, name, yes-no, birthdate, handoff, cancel-intent, company-name, plate-br, postal-code, validate_reply) - OAuth login (Google, Microsoft, GitHub) + cookie auth - MongoDB usage tracking + CEP cache collection - Stripe checkout with inline PriceData (no Price IDs) - MCP server for Claude Code / Cursor integration - Playground (10 calls/IP/day, no auth) - Docs: Quickstart, API Reference, N8N, MCP, Créditos, Erros, Fluxos - Credit system: 3 cr standard validators, 5 cr validate_reply - SmartSuggestion: contextual re-ask via IA when obtained=false - Per-IP rate limiting + daily cap + shared-IP abuse detection - Lightbox for comic images - Validadores page split: Brasileiros / Universais + Em breve Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
3.8 KiB
validate_full_name
Extrai o nome completo do usuário a partir do diálogo.
config
- type: extraction
- version: 1.0
- languages: pt-BR, es-ES, en-US
- endpoint: /v1/extract/name
- mcp_tool: nalu_extract_name
- mcp_description: Extrai o nome completo do usuário a partir da conversa. Use quando o agente perguntou o nome e o usuário respondeu. Retorna o nome extraído, nível de certeza e sugestão de fala para o agente. Se certain=true, aceite o valor. Se certain=false e suggestion_to_agent não é null, use a sugestão como próxima mensagem. Se obtained=false, use a sugestão para re-pedir o dado.
deterministic_rules
stop_words
bom dia, boa tarde, boa noite, olá, oi, tudo bem, e aí, fala, eae, opa
reject_patterns
- ^(não|nao|sei la|sei lá|tanto faz|qualquer|nenhum|nada)$
- ^\d+$
accept_patterns
- ^meu nome é\s+(.+)$
- ^me chamo\s+(.+)$
- ^sou o\s+(.+)$
- ^sou a\s+(.+)$
- ^pode me chamar de\s+(.+)$
constraints
- min_length: 2
- must_have_alpha: true
- max_length: 120
prompt
Você é um extrator de nomes. Dado o diálogo abaixo entre um agente e um usuário, extraia o nome completo que o usuário informou.
Regras:
- Se o usuário respondeu com saudação (bom dia, oi, etc.) e NÃO disse o nome, retorne extracted_value: null.
- Se o usuário deu um nome que parece falso, zueira ou ofensivo (ex: "Xilofone", "Ninguém", "Seu Pai", "Não tenho"), retorne extracted_value com o nome mas certain: false.
- Se o usuário deu um nome comum/plausível, retorne extracted_value com o nome e certain: true.
- Nomes incomuns mas reais (ex: "Céu", "Lua", "Sol", "Índigo") devem retornar certain: false para o agente confirmar.
- Normalize o nome com capitalização adequada (primeira letra maiúscula de cada palavra).
Diálogo: Agente: {{agent_input}} Usuário: {{user_input}}
Contexto do agente: {{agent_context}}
Responda SOMENTE com JSON válido, sem markdown, sem explicação: { "extracted_value": "nome extraído ou null", "certain": true/false, "reasoning": "explicação curta de 1 linha" }
few_shot_examples
example 1
- agent_input: Bom dia! Qual seu nome completo?
- user_input: Bom dia!
- output: {"extracted_value": null, "certain": false, "reasoning": "Usuário respondeu com saudação, não informou o nome"}
example 2
- agent_input: Qual seu nome?
- user_input: Meu nome é xilofone
- output: {"extracted_value": "Xilofone", "certain": false, "reasoning": "Nome aparenta ser zueira, precisa confirmação"}
example 3
- agent_input: Para continuar, preciso do seu nome completo.
- user_input: Maria Silva dos Santos
- output: {"extracted_value": "Maria Silva dos Santos", "certain": true, "reasoning": "Nome completo plausível informado diretamente"}
example 4
- agent_input: Qual seu nome?
- user_input: sei la
- output: {"extracted_value": null, "certain": false, "reasoning": "Usuário foi evasivo, não informou nome"}
example 5
- agent_input: Tem certeza que seu nome é Cebola?
- user_input: Sim, quero que me chame de Cebola.
- output: {"extracted_value": "Cebola", "certain": true, "reasoning": "Usuário confirmou o nome após questionamento"}
example 6
- agent_input: Qual seu nome?
- user_input: Céu Azul de Oliveira
- output: {"extracted_value": "Céu Azul de Oliveira", "certain": false, "reasoning": "Nome incomum, pode ser real mas precisa confirmação"}
post_processors
- capitalize_proper_name
- remove_titles
enrichment
(nenhum)
suggestions
when_null_greeting
{{greeting_response}} Mas preciso do seu nome completo para continuar. Pode me dizer?
when_null_evasive
Sem problemas, mas preciso do seu nome para prosseguir. Qual seu nome completo?
when_uncertain
Só confirmando: seu nome é {{extracted_value}}? Pode confirmar?
when_certain
(sem sugestão — agente segue o fluxo)