Home / راهنماها / ادغام فرم تماس Astro (Static & SSR)
راهنمای ادغام · ASTRO & JAMSTACK

ادغام فرم تماس Astro (Static & 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 Route با کلید API سرور

اگر سایت Astro شما در حالت ترکیبی یا SSR در صفحات Cloudflare، 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 خود را با Lugatu 100٪ ثابت نگه دارم؟

بله. سایت‌های استاتیک خالص (SSG) مستقیماً به نقطه پایانی عمومی Lugatu بدون نیاز به محاسبه سرور در ارائه‌دهنده میزبانی شما ارسال می‌شوند.

برای ایجاد نقطه پایانی فرم خود آماده هستید؟

در عرض چند ثانیه به صورت رایگان شروع کنید. بدون نیاز به کارت اعتباری

رایگان شروع کنید →