Home / গাইড / কৌণিক যোগাযোগ ফর্ম ইন্টিগ্রেশন (স্বতন্ত্র এবং সংকেত)
ইন্টিগ্রেশন গাইড · কৌণিক এবং SPA

কৌণিক যোগাযোগ ফর্ম ইন্টিগ্রেশন (স্বতন্ত্র এবং সংকেত)

SMTP সার্ভার বজায় না রেখে নির্ভরযোগ্য যোগাযোগ ফর্ম ডেলিভারির জন্য স্ট্যান্ডঅ্যালোন কম্পোনেন্টস, রিঅ্যাকটিভ সিগন্যাল এবং HttpClient ব্যবহার করে Angular 17/18+ অ্যাপ্লিকেশনগুলিকে Lugatu-এর সাথে সংযুক্ত করুন।

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. SSR এবং কৌণিক ইউনিভার্সাল সার্ভার-টু-সার্ভার ফরওয়ার্ডিং

যদি আপনার কৌণিক অ্যাপ্লিকেশনটি কৌণিক SSR (নোড / এক্সপ্রেস ইঞ্জিন) এর সাথে চলে তবে আপনি আপনার লুগাতু সার্ভার-টু-সার্ভার 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 ক্ষেত্র পরিদর্শন করে। প্রদর্শন:কিছুই নয় এবং ট্যাবিনডেক্স="-1" ব্যবহার করে এটিকে মানব দর্শকদের কাছে অদৃশ্য রাখুন। স্প্যামবট প্রতিটি DOM ইনপুট পূরণ করে নীরব দমন ট্রিগার করে।

tip

হানিপট ইনপুটগুলির জন্য কখনই ফর্ম লেবেল ব্যবহার করবেন না। স্বয়ংসম্পূর্ণ বন্ধ রাখুন এবং স্ক্রিন-রিডার অ্যাক্সেসযোগ্য নাম থেকে ক্ষেত্রটি বাদ দিন।

নিরাপত্তা এবং প্রমাণীকরণ অপরিবর্তনীয়

নিরাপত্তা পরিবর্তন: সার্ভার-টু-সার্ভার API কী (lug_live_...) কখনই ক্লায়েন্ট-সাইড অ্যাঙ্গুলার অ্যাসেট বা Environment.ts ফাইলগুলিতে বান্ডিল করা উচিত নয়। সরাসরি ক্লায়েন্ট জমা দেওয়ার জন্য পাবলিক এন্ডপয়েন্ট ব্যবহার করুন বা সার্ভার এন্ডপয়েন্টের মাধ্যমে ফরোয়ার্ড করুন।

সমস্যা সমাধান এবং সাধারণ ইনজেশন ত্রুটি৷

কৌণিক থেকে জমা দেওয়ার সময় HTTP 403 FORBIDDEN_BROWSER_ORIGIN

পাবলিক ফর্ম এন্ডপয়েন্ট যেকোনো ব্রাউজার থেকে ক্রস-অরিজিন জমা দেওয়ার অনুমতি দেয়। আপনি যদি সরাসরি কৌণিক থেকে সার্ভার-টু-সার্ভার এন্ডপয়েন্ট (POST /api/v1/forms/{id}/submissions) কল করেন, তাহলে সর্বজনীন এন্ডপয়েন্টে (POST /api/v1/public/forms/{id}/submissions) স্যুইচ করুন বা একটি ব্যাকএন্ডের মাধ্যমে ফরওয়ার্ড করুন।

প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী

লুগাতু কি ক্লায়েন্ট হাইড্রেশনের সাথে কৌণিক SSR সমর্থন করে?

হ্যাঁ। Lugatu পাবলিক ফর্ম জমাগুলি ব্যবহারকারীর ইন্টারঅ্যাকশনের পরে ক্লায়েন্ট-সাইড ফেচ বা HttpClient এর মাধ্যমে সঞ্চালিত হয়, যা কৌণিক SSR এবং ক্লায়েন্ট হাইড্রেশনের সাথে সম্পূর্ণ সামঞ্জস্যপূর্ণ।

আপনার ফর্ম শেষ বিন্দু তৈরি করতে প্রস্তুত?

সেকেন্ডের মধ্যে বিনামূল্যে শুরু করুন। কোনো ক্রেডিট কার্ডের প্রয়োজন নেই।

বিনামূল্যে শুরু করুন →