Home / गाइड / कोणीय संपर्क फ़ॉर्म एकीकरण (स्टैंडअलोन और सिग्नल)
एकीकरण गाइड · कोणीय और स्पा

कोणीय संपर्क फ़ॉर्म एकीकरण (स्टैंडअलोन और सिग्नल)

SMTP सर्वर को बनाए रखे बिना विश्वसनीय संपर्क फ़ॉर्म डिलीवरी के लिए स्टैंडअलोन घटकों, प्रतिक्रियाशील सिग्नल और HttpClient का उपयोग करके एंगुलर 17/18+ एप्लिकेशन को लुगाटू से कनेक्ट करें।

1. प्रतिक्रियाशील सिग्नल के साथ स्टैंडअलोन संपर्क फ़ॉर्म घटक

आधुनिक एंगुलर भारी NgModules की तुलना में स्टैंडअलोन घटकों और सिग्नलों को प्राथमिकता देता है। यह कार्यान्वयन प्रतिक्रियाशील लोडिंग, त्रुटि और सफलता की स्थिति के साथ सीधे लुगाटू को सबमिट करने वाला एक सुलभ संपर्क फ़ॉर्म प्रदान करता है।

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. एसएसआर और एंगुलर यूनिवर्सल सर्वर-टू-सर्वर फ़ॉरवर्डिंग

यदि आपका एंगुलर एप्लिकेशन एंगुलर एसएसआर (नोड/एक्सप्रेस इंजन) के साथ चलता है, तो आप अपने लुगाटू सर्वर-टू-सर्वर एपीआई कुंजी की सुरक्षा के लिए सर्वर-साइड रूट हैंडलर के माध्यम से पूछताछ को प्रॉक्सी कर सकते हैं।

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. बॉट रक्षा और हनीपोट कॉन्फ़िगरेशन

लुगातु स्वचालित रूप से _gotcha फ़ील्ड का निरीक्षण करता है। डिस्प्ले: कोई नहीं और टैबइंडेक्स = "-1" का उपयोग करके इसे मानव आगंतुकों के लिए अदृश्य रखें। प्रत्येक DOM इनपुट को भरने वाले स्पैमबॉट्स मूक दमन को ट्रिगर करते हैं।

tip

हनीपोट इनपुट के लिए कभी भी फॉर्म लेबल का उपयोग न करें। स्वत: पूर्ण को बंद छोड़ दें और फ़ील्ड को स्क्रीन-रीडर पहुंच योग्य नामों से बाहर कर दें।

सुरक्षा एवं प्रमाणीकरण अपरिवर्तनीय

सुरक्षा अपरिवर्तनीय: सर्वर-टू-सर्वर एपीआई कुंजियाँ (lug_live_...) को कभी भी क्लाइंट-साइड एंगुलर एसेट या वातावरण.ts फ़ाइलों में बंडल नहीं किया जाना चाहिए। सीधे क्लाइंट सबमिशन के लिए सार्वजनिक एंडपॉइंट का उपयोग करें या सर्वर एंडपॉइंट के माध्यम से अग्रेषित करें।

समस्या निवारण और सामान्य अंतर्ग्रहण त्रुटियाँ

एंगुलर से सबमिट करते समय HTTP 403 FORBIDDEN_BROWSER_ORIGIN

सार्वजनिक प्रपत्र समापन बिंदु किसी भी ब्राउज़र से क्रॉस-ऑरिजिन सबमिशन की अनुमति देते हैं। यदि आप सर्वर-टू-सर्वर एंडपॉइंट (POST /api/v1/forms/{id}/submissions) को सीधे Angular से कॉल कर रहे हैं, तो सार्वजनिक एंडपॉइंट (POST /api/v1/public/forms/{id}/submissions) पर स्विच करें या बैकएंड के माध्यम से अग्रेषित करें।

अक्सर पूछे जाने वाले प्रश्नों

क्या लुगाटू क्लाइंट हाइड्रेशन के साथ एंगुलर एसएसआर का समर्थन करता है?

हाँ। लुगातु सार्वजनिक फॉर्म सबमिशन उपयोगकर्ता के इंटरैक्शन के बाद क्लाइंट-साइड फ़ेच या HttpClient के माध्यम से किया जाता है, जो एंगुलर एसएसआर और क्लाइंट हाइड्रेशन के साथ पूरी तरह से संगत है।

क्या आप अपना फ़ॉर्म समापन बिंदु बनाने के लिए तैयार हैं?

कुछ ही सेकंड में निःशुल्क आरंभ करें। किसी क्रेडिट कार्ड की आवश्यकता नहीं.

निःशुल्क प्रारंभ करें →