Home / گائیڈز / کونیی رابطہ فارم انٹیگریشن (اسٹینڈ اور سگنلز)
انٹیگریشن گائیڈ · کونیی اور سپا

کونیی رابطہ فارم انٹیگریشن (اسٹینڈ اور سگنلز)

SMTP سرور کو برقرار رکھے بغیر قابل اعتماد رابطہ فارم کی ترسیل کے لیے اسٹینڈ ایلون اجزاء، رد عمل والے سگنلز، اور HttpClient کا استعمال کرتے ہوئے Angular 17/18+ ایپلی کیشنز کو Lugatu سے مربوط کریں۔

1. ری ایکٹو سگنلز کے ساتھ اسٹینڈ اسٹون رابطہ فارم کا جزو

جدید اینگولر بھاری NgModules پر اسٹینڈ اکیلے اجزاء اور سگنل کی حمایت کرتا ہے۔ یہ نفاذ ایک قابل رسائی رابطہ فارم فراہم کرتا ہے جس میں رد عمل کی لوڈنگ، غلطی، اور کامیابی کی حالتیں براہ راست Lugatu کو جمع کرائی جاتی ہیں۔

contact-form.component.ts typescript
import { Component, signal, inject } from '@angular/core';
import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms';
import { HttpClient } from '@angular/common/http';

@Component({
  selector: 'app-contact-form',
  standalone: true,
  imports: [CommonModule, FormsModule],
  template: `
    <form (ngSubmit)="onSubmit()" class="space-y-4 max-w-md">
      <div>
        <label for="name" class="block text-sm font-semibold mb-1">Your Name</label>
        <input id="name" type="text" [(ngModel)]="name" name="name" required class="w-full border rounded-xl p-2.5" />
      </div>
      <div>
        <label for="email" class="block text-sm font-semibold mb-1">Email Address</label>
        <input id="email" type="email" [(ngModel)]="email" name="email" required class="w-full border rounded-xl p-2.5" />
      </div>
      <div>
        <label for="message" class="block text-sm font-semibold mb-1">Message</label>
        <textarea id="message" rows="4" [(ngModel)]="message" name="message" required class="w-full border rounded-xl p-2.5"></textarea>
      </div>

      <!-- Honeypot spam defense -->
      <input type="text" [(ngModel)]="gotcha" name="_gotcha" style="display:none !important" tabindex="-1" autocomplete="off" />

      <button type="submit" [disabled]="isSubmitting()" class="btn-primary-editorial py-2.5 px-6">
        {{ isSubmitting() ? 'Sending...' : 'Send Message' }}
      </button>

      <p *ngIf="isSuccess()" class="text-sm text-green-700 font-medium">Thank you! Your message has been received.</p>
      <p *ngIf="errorMessage()" class="text-sm text-red-600">{{ errorMessage() }}</p>
    </form>
  `,
})
export class ContactFormComponent {
  private http = inject(HttpClient);

  name = signal('');
  email = signal('');
  message = signal('');
  gotcha = signal('');

  isSubmitting = signal(false);
  isSuccess = signal(false);
  errorMessage = signal('');

  onSubmit() {
    if (this.gotcha()) return; // Silent discard for automated bot submissions

    this.isSubmitting.set(true);
    this.errorMessage.set('');

    const payload = {
      fields: {
        name: this.name(),
        email: this.email(),
        message: this.message(),
      },
      honeypot: this.gotcha(),
    };

    this.http.post('https://www.lugatu.com/api/v1/public/forms/YOUR_PUBLIC_FORM_ID/submissions', payload)
      .subscribe({
        next: () => {
          this.isSubmitting.set(false);
          this.isSuccess.set(true);
          this.name.set('');
          this.email.set('');
          this.message.set('');
        },
        error: () => {
          this.isSubmitting.set(false);
          this.errorMessage.set('Submission failed. Please try again.');
        },
      });
  }
}

2. SSR اور کونیی یونیورسل سرور سے سرور فارورڈنگ

اگر آپ کی انگولر ایپلیکیشن انگولر SSR (نوڈ/ایکسپریس انجن) کے ساتھ چلتی ہے، تو آپ اپنی Lugatu سرور سے سرور API کلید کی حفاظت کے لیے سرور سائیڈ روٹ ہینڈلر کے ذریعے پراکسی انکوائری کر سکتے ہیں۔

server.ts typescript
// Express / Node backend endpoint in Angular SSR
server.post('/api/contact', async (req, res) => {
  const { name, email, message, _gotcha } = req.body;
  if (_gotcha) return res.status(200).json({ ok: true });

  try {
    const response = await fetch(`https://www.lugatu.com/api/v1/forms/${process.env.LUGATU_FORM_ID}/submissions`, {
      method: 'POST',
      headers: {
        'Authorization': `Bearer ${process.env.LUGATU_API_KEY}`,
        'Content-Type': 'application/json',
        'Idempotency-Key': crypto.randomUUID(),
      },
      body: JSON.stringify({ fields: { name, email, message } }),
    });

    res.status(response.status).json({ ok: response.ok });
  } catch (error) {
    res.status(500).json({ error: 'Failed to deliver message' });
  }
});

3. بوٹ ڈیفنس اور ہنی پاٹ کنفیگریشن

Lugatu _gotcha فیلڈ کا خود بخود معائنہ کرتا ہے۔ display:none اور tabindex="-1" کا استعمال کرتے ہوئے اسے انسانی زائرین کے لیے پوشیدہ رکھیں۔ ہر DOM ان پٹ کو بھرنے والے اسپیم بوٹس خاموش دبائو کو متحرک کرتے ہیں۔

tip

ہنی پاٹ ان پٹس کے لیے فارم لیبل کبھی استعمال نہ کریں۔ خودکار تکمیل کو چھوڑ دیں اور اسکرین ریڈر کے قابل رسائی ناموں سے فیلڈ کو خارج کردیں۔

سیکورٹی اور توثیق انویرینٹ

سیکیورٹی انویرینٹ: سرور سے سرور API کیز (lug_live_...) کو کبھی بھی کلائنٹ سائڈ اینگولر اثاثوں یا ماحولیات کی فائلوں میں بنڈل نہیں ہونا چاہیے۔ براہ راست کلائنٹ کی گذارشات کے لیے پبلک اینڈ پوائنٹ کا استعمال کریں یا سرور اینڈ پوائنٹس کے ذریعے آگے بھیجیں۔

ٹربل شوٹنگ اور عام ادخال کی خرابیاں

کونیی سے جمع کرواتے وقت HTTP 403 FORBIDDEN_BROWSER_ORIGIN

پبلک فارم اینڈ پوائنٹس کسی بھی براؤزر سے کراس اوریجن گذارشات کی اجازت دیتے ہیں۔ اگر آپ سرور سے سرور اینڈ پوائنٹ (POST /api/v1/forms/{id}/submissions) کو براہ راست انگولر سے کال کر رہے ہیں، تو پبلک اینڈ پوائنٹ (POST /api/v1/public/forms/{id}/submissions) پر جائیں یا بیک اینڈ کے ذریعے فارورڈ کریں۔

اکثر پوچھے گئے سوالات

کیا Lugatu کلائنٹ ہائیڈریشن کے ساتھ Angular SSR کو سپورٹ کرتا ہے؟

جی ہاں Lugatu عوامی فارم کی جمع آوریاں صارف کے تعامل کے بعد کلائنٹ سائیڈ فیچ یا HttpClient کے ذریعے انجام دی جاتی ہیں، جو Angular SSR اور کلائنٹ ہائیڈریشن کے ساتھ مکمل طور پر مطابقت رکھتی ہے۔

اپنا فارم اینڈ پوائنٹ بنانے کے لیے تیار ہیں؟

سیکنڈوں میں مفت شروع کریں۔ کریڈٹ کارڈ کی ضرورت نہیں ہے۔

مفت شروع کریں۔ →