कोनीय संपर्क फॉर्म एकत्रीकरण (स्टँडअलोन आणि सिग्नल)
SMTP सर्व्हर न ठेवता विश्वासार्ह संपर्क फॉर्म वितरणासाठी स्टँडअलोन घटक, प्रतिक्रियाशील सिग्नल आणि HttpClient वापरून अँगुलर 17/18+ अनुप्रयोग लुगाटूशी कनेक्ट करा.
1. प्रतिक्रियाशील सिग्नलसह स्टँडअलोन संपर्क फॉर्म घटक
आधुनिक अँगुलर हेवी NgModules वर स्टँडअलोन घटक आणि सिग्नलला अनुकूल आहे. ही अंमलबजावणी प्रतिक्रियात्मक लोडिंग, त्रुटी आणि थेट लुगाटूला सबमिट केलेल्या यशाच्या स्थितीसह प्रवेश करण्यायोग्य संपर्क फॉर्म प्रदान करते.
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 आणि अँगुलर युनिव्हर्सल सर्व्हर-टू-सर्व्हर फॉरवर्डिंग
तुमचा अँगुलर ॲप्लिकेशन अँगुलर एसएसआर (नोड/एक्सप्रेस इंजिन) सह चालत असल्यास, तुमची लुगाटू सर्व्हर-टू-सर्व्हर API की संरक्षित करण्यासाठी तुम्ही सर्व्हर-साइड रूट हँडलरद्वारे प्रॉक्सी चौकशी करू शकता.
// 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 फील्डची आपोआप तपासणी करतो. display:none आणि tabindex="-1" वापरून मानवी अभ्यागतांसाठी ते अदृश्य ठेवा. प्रत्येक DOM इनपुट भरणारे स्पॅम्बॉट मूक सप्रेशन ट्रिगर करतात.
हनीपॉट इनपुटसाठी कधीही फॉर्म लेबले वापरू नका. स्वयंपूर्ण बंद सोडा आणि स्क्रीन-रीडर प्रवेशयोग्य नावांमधून फील्ड वगळा.
सुरक्षा आणि प्रमाणीकरण अपरिवर्तनीय
सुरक्षा अपरिवर्तनीय: सर्व्हर-टू-सर्व्हर API की (lug_live_...) कधीही क्लायंट-साइड अँगुलर ॲसेट किंवा Environment.ts फाइल्समध्ये एकत्रित केल्या जाऊ नयेत. थेट क्लायंट सबमिशनसाठी सार्वजनिक एंडपॉईंट वापरा किंवा सर्व्हर एंडपॉइंटद्वारे फॉरवर्ड करा.
समस्यानिवारण आणि सामान्य अंतर्ग्रहण त्रुटी
सार्वजनिक फॉर्म एंडपॉइंट्स कोणत्याही ब्राउझरवरून क्रॉस-ओरिजिन सबमिशनची परवानगी देतात. तुम्ही थेट अँगुलरवरून सर्व्हर-टू-सर्व्हर एंडपॉइंट (POST /api/v1/forms/{id}/submissions) वर कॉल करत असल्यास, पब्लिक एंडपॉइंट (POST /api/v1/public/forms/{id}/submissions) वर स्विच करा किंवा बॅकएंडद्वारे फॉरवर्ड करा.
वारंवार विचारले जाणारे प्रश्न
लुगाटू क्लायंट हायड्रेशनसह अँगुलर एसएसआरला समर्थन देते का?
होय. Lugatu सार्वजनिक फॉर्म सबमिशन क्लायंट-साइड फेच किंवा HttpClient द्वारे वापरकर्त्याच्या परस्परसंवादानंतर केले जातात, जे अँगुलर SSR आणि क्लायंट हायड्रेशनशी पूर्णपणे सुसंगत आहे.
तुमचा फॉर्म एंडपॉइंट तयार करण्यास तयार आहात?
काही सेकंदात विनामूल्य प्रारंभ करा. क्रेडिट कार्ड आवश्यक नाही.