Home / מדריכים / שילוב טופס יצירת קשר של Astro (סטטי ו-SSR)
מדריך אינטגרציה · ASTRO & JAMSTACK

שילוב טופס יצירת קשר של Astro (סטטי ו-SSR)

כיצד להוסיף טפסי יצירת קשר לאתרים סטטיים של Astro (SSG) ולנתיבי שרת היברידיים באמצעות נקודות קצה של Lugatu מבלי לתחזק שרתי דוא"ל או מסדי נתונים.

1. בליעה של אתר סטטי טהור (SSG).

Astro ידוע כברירת מחדל באפס-JavaScript. עם Lugatu, אתה יכול לשמור על סטטי של אתר Astro שלך ב-100% תוך איסוף פניות עם טפסי HTML סטנדרטיים ואחזור קל משקל בצד הלקוח.

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">Your Name</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">Email Address</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">Message</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">Send Message</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('Thank you! Message delivered.');
      form.reset();
    }
  });
</script>

2. מסלול API של Astro Hybrid / SSR עם מפתח API של שרת

אם אתר Astro שלך פועל במצב היברידי או SSR ב-Cloudflare Pages, Netlify או Vercel, העבר הגשות בצורה מאובטחת דרך נתיב Astro API.

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' },
  });
};

אבטחה ואימות בלתי משתנה

הוראת אבטחה: לעולם אל תחשוף import.meta.env.LUGATU_API_KEY בתגי סקריפט בצד הלקוח של Astro. סקריפטים של לקוח חייבים להשתמש רק בנקודת הקצה הציבורית.

פתרון בעיות ושגיאות בליעה נפוצות

טופס עובד באופן מקומי אך נכשל בייצור Cloudflare / Netlify build

ודא שמשתני סביבת הייצור שלך (LUGATU_FORM_ID ו-LUGATU_API_KEY) מוגדרים בלוח המחוונים של האירוח שלך.

שאלות נפוצות

האם אוכל לשמור את אתר Astro שלי ב-100% סטטי עם Lugatu?

כֵּן. אתרים סטטיים טהורים (SSG) שולחים ישירות לנקודת הקצה הציבורית של Lugatu מבלי לדרוש כל חישוב שרת אצל ספק האירוח שלך.

מוכן ליצור את נקודת הקצה של הטופס שלך?

התחל בחינם תוך שניות. אין צורך בכרטיס אשראי.

התחל בחינם →