Adicionar um Formulário de Contato
Um formulário de contato no Chinaski começa com um item de formulário e um bloco. Este guia cobre criar o formulário, colocá-lo numa página e o que acontece depois que um visitante envia.
1. Crie o formulário
Em Forms na sidebar de admin, crie um formulário novo: um nome legível por humanos mais um slug que as referências de embed e da API usam. Adicione campos ao formulário, em qualquer mistura de:
- text, email, tel, textarea
- select, radio, checkboxes, checkbox
- address (um campo composto com sub-entradas de rua, cidade, estado, postal/país)
- upload de arquivo
Cada campo tem um label (mostrado aos visitantes), uma largura de exibição editável (full ou half da linha) e exibição condicional opcional: visível apenas quando o valor de outro campo corresponde. Os nomes de campo são sanitizados automaticamente para letras minúsculas/dígitos/underscores. Campos obrigatórios, placeholders e as opções separadas por linha nova de um dropdown são configurações por campo.
2. Ponha-o numa página
Solte um bloco de formulário em qualquer corpo de página ou post e aponte-o ao slug do seu formulário. O bloco renderiza o formulário real: os posts entregam os dados ao endpoint de submissão /forms/<slug> do CMS, automaticamente encaminhado na config de servidor padrão (o único caminho dinâmico, como descrito na discussão da arquitetura de site estático).
3. Configure as notificações
- notify_email: endereços de e-mail separados por vírgula que recebem cada submissão. O e-mail de notificação de admin lista o valor de cada campo, com endereço IP incluído, a menos que a opção de privacidade o desligue.
- reply_to_field: nomeie o campo de e-mail cujo valor se torna o Reply-To da notificação, para que os respondentes respondam diretamente ao visitante.
- thank_you_url: redirecionamento externo seguro opcional após a submissão; quando não definido, vale o conteúdo de resposta fornecido no formulário. O texto de resposta padrão é "Thank you. Your submission has been received."
Ajuste também o label do botão de envio, o portão antispam Turnstile por formulário, os países bloqueados separados por vírgula e/ou a chave de privacidade store_ip (que não armazena nenhum endereço IP se desabilitada).
4. Antispam e limites
- Rate limiting por IP: no máximo cinco submissões por formulário por IP por hora; 30 por IP entre todos os formulários combinados. Violá-lo rende "Too many submissions, please try again later" após um pequeno atraso, com um 429 do servidor.
- Verificação do Cloudflare Turnstile quando uma chave de Turnstile do site está presente e o formulário aderiu (o padrão); vem ligado por padrão, então use
turnstile_enabled=0em testes sem captcha. - Bloqueio por país: com os códigos que você digitar, enviar de regiões bloqueadas retorna "Submissions from your region are not accepted".
- Sinais de privacidade: visitantes enviando headers DNT ou "Do Not Sell" não recebem armazenamento de IP nem atribuição de cliques de anúncio, conforme as configurações de DNT e GPC, respeitadas automaticamente.
5. O que chega depois que alguém envia
- os valores armazenados para cada campo (incluindo os vazios, tipados por tipo)
- um webhook, se a configuração de webhook do próprio formulário estiver estabelecida, com o id do formulário, slug do formulário, id da submissão, dados enviados e timestamp
- o e-mail de notificação aos seus destinatários configurados, mais um e-mail de confirmação opcional ao remetente (entregue de forma assíncrona; exige SMTP configurado nas configurações, e nunca é enviado no modo air-gap)
- opcionalmente um redirecionamento no navegador para a thank_you_url do formulário
Cada submissão é registrada uma vez: uma ressubmissão com a mesma identidade responde o thank-you e não registra os dados em duplicidade.
6. Onde as submissões vivem
Veja ou exporte as submissões por formulário em Forms → <nome do formulário> → Submissions, um por vez ou em exportações CSV/JSON.
7. Entrando no ar com segurança
Lembre-se de que os blocos de formulário injetam o formulário no site estático, então os servidores respondem submissões POST diretamente ao CMS. Formulários inativos retornam um 404 e falham na submissão.
Quando uma mudança de formulário vem junto com mudanças de copy, vigie o deployment: desativar um formulário faz com que ele rejeite POSTs, e um formulário deixado "ligado" dentro de uma página não publicada só aparece naquela página após um rebuild.