Cloudflare Worker form-handler AI-spam-szűrővel — magyar SMB-piacra. Honeypot + rate-limit + Gemini-classifier + Resend-email + webhook. Self-hostolható alternatíva a Formspree / GetForm / Web3Forms helyett.
A Formspree havi 2 500 Ft-tól indul, a custom-domain elküldéshez 6 000 Ft-tól. Ez a Worker ugyanazt csinálja, ingyen (Cloudflare Free Tier + Resend Free 100 email/nap + Gemini Free 1500 RPD).
- ✅ Honeypot spam-szűrés (
_gotchamező — bot kitölti → drop) - ✅ Rate-limit (30 / óra / IP / token, KV-tárolt)
- ✅ AI-spam-osztályozás Gemini-vel — opt-in (csak ha
GEMINI_API_KEYvan)- kategorizál:
inquiry/complaint/spam/other - magas-confidence spam → csendes drop
- inquiry/complaint → email-subject prefix (
★ ÉRDEKLŐDÉS —vagy⚠ PANASZ —)
- kategorizál:
- ✅ Email-küldés (Resend API)
- ✅ Webhook-forward (POST a saját URL-edre)
- ✅ CORS (allowed-origins per-form)
- ✅ JSON + form-encoded body
- ✅ Redirect-flow (HTML-form
action-höz) VAGY JSON ok (XHR-flow)
git clone https://github.com/csiber/cf-magyar-form-handler
cd cf-magyar-form-handler
npm installnpx wrangler kv:namespace create FORMS
npx wrangler kv:namespace create RATE_LIMITA két id-t másold be a wrangler.toml-ba (REPLACE_WITH_KV_ID_...).
# Egy új endpoint pl. tokenwith my-contact-form-2026
npx wrangler kv:key put --binding=FORMS \
"form:my-contact-form-2026" \
'{"name":"Kapcsolat","notifyEmail":"info@cégem.hu","allowedOrigins":["https://cégem.hu"],"redirectUrl":"https://cégem.hu/koszi.html"}'A token egy 8-40 karakteres URL-safe string — te találod ki (vagy crypto.randomUUID()-vel).
npx wrangler secret put RESEND_API_KEY
npx wrangler secret put GEMINI_API_KEY # opcionális — AI-filternpx wrangler deployA worker URL-je pl.: https://magyar-form-handler.<your-account>.workers.dev.
<form action="https://magyar-form-handler.<your-account>.workers.dev/submit/my-contact-form-2026"
method="POST">
<!-- Honeypot — CSS-szel rejtve -->
<input type="text" name="_gotcha" style="display:none" tabindex="-1" autocomplete="off">
<input type="text" name="name" placeholder="Neved" required>
<input type="email" name="email" placeholder="Emailed" required>
<textarea name="message" placeholder="Üzenet" required></textarea>
<button type="submit">Küldés</button>
</form>Vagy XHR-rel (JSON):
const r = await fetch('https://.../submit/my-contact-form-2026', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ name: 'X', email: 'a@b.c', message: 'hello' }),
});
const j = await r.json(); // { ok: true }interface FormConfig {
/** A form (subject-prefixbe + admin-felületre) */
name: string;
/** Cím ahova az új küldést küldjük */
notifyEmail: string;
/** Engedélyezett origin-ok — ha üres, mind */
allowedOrigins: string[];
/** Webhook-URL (opt) — POST-tal továbbküldjük (Slack-bot, Discord, custom) */
webhookUrl?: string;
/** Sikeres-redirect URL HTML-form-flowhoz */
redirectUrl?: string;
}Cloudflare Workers Free: 100k request/nap. KV: 100k read + 1k write/nap. Resend Free: 100 email/nap. Gemini Free: 1500 request/nap.
→ Egy átlag SMB-form (max 50 küldés/nap) MINDEN szolgáltatásnál a Free-tier-en marad. 0 Ft.
Karbantartó: PromNET — magyar Cloudflare-hosting + AI Site Builder + integrált form-handler. Ha self-hostolás helyett managed-csomagot szeretnél (UI-felület + form-buildert + GDPR-compliant tárolás): a PromNET Form-handler csomagja minden tárhely-csomag mellé jár.