Ana Sayfa / Rehberler / Astro İletişim Formu Entegrasyonu (Statik & SSR)
ENTEGRASYON REHBERİ · ASTRO VE JAMSTACK

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 astro
---
// 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.

src/pages/api/contact.ts typescript
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

Statik dağıtımda ortam değişkenleri okunmuyor

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.

Ücretsiz Başlayın →