Astro İletişim Formu Entegrasyonu (Statik & SSR)
Astro statik sitelerine (SSG) ve hibrit sunucu rotalarına e-posta sunucusu kurmadan Lugatu form altyapısı ekleme rehberi.
1. Saf Statik Sayfalarda (SSG) Form Toplama
Astro varsayılan olarak sıfır JavaScript üretir. Lugatu ile sitenizi tamamen statik tutarken standart HTML formlarıyla müşteri taleplerini toplayabilirsiniz.
---
// src/pages/contact.astro
---
<form id="astro-contact-form" class="space-y-4 max-w-md">
<div>
<label class="block text-sm font-semibold mb-1">Adınız Soyadınız</label>
<input type="text" name="name" required class="w-full border rounded-xl p-2.5" />
</div>
<div>
<label class="block text-sm font-semibold mb-1">E-posta Adresiniz</label>
<input type="email" name="email" required class="w-full border rounded-xl p-2.5" />
</div>
<div>
<label class="block text-sm font-semibold mb-1">Mesajınız</label>
<textarea name="message" rows="4" required class="w-full border rounded-xl p-2.5"></textarea>
</div>
<input type="text" name="_gotcha" style="display:none !important" tabindex="-1" autocomplete="off" />
<button type="submit" class="btn-primary-editorial py-2.5 px-6">Mesajı Gönder</button>
</form>
<script>
const form = document.getElementById('astro-contact-form') as HTMLFormElement;
form?.addEventListener('submit', async (e) => {
e.preventDefault();
const formData = new FormData(form);
const payload = {
fields: {
name: formData.get('name'),
email: formData.get('email'),
message: formData.get('message'),
},
honeypot: formData.get('_gotcha') || '',
};
const res = await fetch('https://www.lugatu.com/api/v1/public/forms/YOUR_PUBLIC_FORM_ID/submissions', {
method: 'POST',
headers: { 'Content-Type': 'application/json', 'Accept': 'application/json' },
body: JSON.stringify(payload),
});
if (res.ok) {
alert('Teşekkürler! Mesajınız iletildi.');
form.reset();
}
});
</script>
2. Astro SSR / API Rotası ile Sunucu Tarafı İletim
Siteniz Cloudflare Pages veya Vercel üzerinde SSR modunda çalışıyorsa, API anahtarınızı güvenle sunucu rotasında saklayabilirsiniz.
import type { APIRoute } from 'astro';
export const POST: APIRoute = async ({ request }) => {
const data = await request.formData();
const fields = {
name: data.get('name')?.toString(),
email: data.get('email')?.toString(),
message: data.get('message')?.toString(),
};
const res = await fetch(`https://www.lugatu.com/api/v1/forms/${import.meta.env.LUGATU_FORM_ID}/submissions`, {
method: 'POST',
headers: {
'Authorization': `Bearer ${import.meta.env.LUGATU_API_KEY}`,
'Content-Type': 'application/json',
'Idempotency-Key': crypto.randomUUID(),
},
body: JSON.stringify({ fields }),
});
return new Response(JSON.stringify({ success: res.ok }), {
status: res.status,
headers: { 'Content-Type': 'application/json' },
});
};
Güvenlik ve Kimlik Doğrulama Standardı
Güvenlik Talimatı: import.meta.env.LUGATU_API_KEY anahtarını asla istemciye giden <script> etiketlerine yazmayın.
Sorun Giderme ve Yaygın Hatalar
Astro SSG modunda istemci script’leri doğrudan genel form endpoint’ini kullanmalıdır.
Sıkça Sorulan Sorular
Astro sitemi sıfır sunucu maliyetiyle yayınlayabilir miyim?
Evet. Statik Astro siteleri doğrudan Cloudflare Pages veya Netlify üzerinde sıfır maliyetle çalışır, formlar Lugatu tarafından toplanır.
Kendi formunuzu oluşturmaya hazır mısınız?
Saniyeler içinde ücretsiz başlayın. Kredi kartı gerektirmez.