Home / أدلة / تكامل نموذج الاتصال Astro (الثابت وSSR)
دليل التكامل · ASTRO وJAMSTACK

تكامل نموذج الاتصال Astro (الثابت وSSR)

كيفية إضافة نماذج اتصال إلى مواقع Astro الثابتة (SSG) ومسارات الخادم الهجين باستخدام نقاط نهاية Lugatu دون صيانة خوادم البريد الإلكتروني أو قواعد البيانات.

1. استيعاب نموذج الموقع الثابت (SSG).

تشتهر Astro بصفر جافا سكريبت افتراضيًا. مع 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. طريق Astro Hybrid / SSR API مع مفتاح 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 للإنتاج

تأكد من تكوين متغيرات بيئة الإنتاج (LUGATU_FORM_ID وLUGATU_API_KEY) في لوحة تحكم الاستضافة الخاصة بك.

الأسئلة المتداولة

هل يمكنني الاحتفاظ بموقع Astro الخاص بي ثابتًا بنسبة 100% مع Lugatu؟

نعم. يتم إرسال المواقع الثابتة (SSG) مباشرة إلى نقطة نهاية Lugatu العامة دون الحاجة إلى أي حساب خادم على موفر الاستضافة الخاص بك.

هل أنت مستعد لإنشاء نقطة نهاية النموذج الخاص بك؟

ابدأ مجانًا في ثوانٍ. لا حاجة لبطاقة الائتمان.

ابدأ مجانًا →