More in
Automasi Lead Capture
Automasi Chat-to-CRM: Menghubungkan Respond.io dengan HubSpot (Playbook 2026)
Apr 18, 2026
LinkedIn Lead Gen Forms ke CRM: Automated Routing yang Benar-Benar Berkesan
Apr 18, 2026
Lead Scoring untuk Leads yang Ditangkap Melalui Chat: Model Berbeza Daripada Form Leads
Apr 18, 2026
Lead Capture Berasaskan Webhook: Panduan Praktikal untuk Integrasi Tersuai
Apr 18, 2026 · Currently reading
Routing Leads kepada Rep Berdasarkan Konteks Perbualan Chat
Apr 18, 2026
Mengautomasikan Urutan Nurture Selepas Capture: Dari First Touch hingga Sales-Ready
Apr 18, 2026
Lead Capture Patuh GDPR untuk Pasaran EU: Panduan Operasi Praktikal
Apr 18, 2026
Membina Stack Lead Capture Tanpa Form: Cara Menangkap Leads Tanpa Sebarang Form
Apr 18, 2026
Penjejakan Source Attribution Merentas Leads Chat, Iklan, dan Form: Ops Playbook
Apr 18, 2026
Menghubungkan Form CMS Anda ke Salesforce Tanpa Membayar untuk Premium Connector
Apr 18, 2026
Penangkapan Prospek Berasaskan Webhook: Panduan Praktikal untuk Integrasi Tersuai
Integrasi natif yang anda perlukan tidak wujud. Platform acara, portal rakan kongsi, atau aplikasi web tersuai anda boleh menghantar webhook, dan itu sahaja. Penyerahan borang atau acara pendaftaran mencetus, muatan JSON pergi ke suatu tempat, dan tugas anda adalah menjadikan tempat itu CRM anda. Untuk pasukan yang lebih suka alat tanpa kod sebelum melabur dalam infrastruktur webhook tersuai, lihat dahulu Zapier vs n8n vs Make untuk Automasi Penangkapan Prospek.
Kebanyakan dokumentasi mengenai ini berhenti pada "konfigurasikan URL titik akhir anda." Itu memberi anda Demo yang berfungsi. Ia tidak memberi anda saluran pengeluaran yang mengendalikan cubaan semula, penyerahan berganda, kegagalan pengesahan, dan masa tamat API CRM tanpa kehilangan prospek atau mencipta rekod pendua.
Panduan ini merangkumi pelaksanaan penuh: reka bentuk titik akhir penerima, pengesahan muatan, pengesahan tandatangan HMAC, logik upsert CRM, pengendalian idempotency, dan corak ralat yang akan menyebabkan masalah jika anda tidak menanganinya dari awal.
Contoh menggunakan Node.js dan Python di mana kod diperlukan. Konsep berlaku untuk mana-mana bahasa atau rangka kerja.
Bila Webhook Adalah Pilihan Yang Betul
Sebelum mendalami pelaksanaan, pastikan webhook sebenarnya alat yang betul.
Gunakan webhook apabila:
- Sumber prospek anda tidak mempunyai integrasi CRM natif
- Anda memerlukan logik transformasi medan tersuai yang alat tanpa kod tidak dapat mengendalikan
- Anda memproses jumlah tinggi di mana kos tugas Zapier menjadi besar
- Anda memerlukan masa pemprosesan sub-saat (webhook adalah hampir masa nyata)
- Anda mahukan kawalan penuh ke atas logik dedup, penghalaan, dan pengendalian ralat
Pertimbangkan alat tanpa kod sebaliknya apabila:
- Jumlah di bawah 500 prospek/hari dan kos Zapier/Make adalah boleh diterima
- Keperluan integrasi anda adalah pemetaan medan yang mudah
- Anda tidak mempunyai sumber kejuruteraan untuk menyelenggara kod tersuai
Jika anda khususnya menghubungkan borang CMS ke Salesforce tanpa membayar penyambung premium, Menghubungkan Borang CMS Anda ke Salesforce Tanpa Membayar Penyambung Premium merangkumi pendekatan Salesforce Web-to-Lead dan n8n secara terperinci.
Keputusan biasanya bergantung pada keperluan jumlah dan logik tersuai. Setelah anda mencapai mana-mana ambang, webhook menjadi penyelesaian jangka panjang yang lebih bersih. Panduan Gartner mengenai seni bina integrasi API menggarisbawahi bahawa corak pemacu peristiwa berasaskan webhook secara konsisten mengatasi pendekatan pengundian untuk aliran data sensitif kependaman seperti penangkapan prospek.
Anatomi Saluran Penangkapan Prospek Webhook
Berikut adalah aliran penuh sebelum kita masuk ke pelaksanaan:
Sumber Prospek (platform acara, aplikasi tersuai, portal rakan kongsi)
│
└─ Menghantarkan permintaan POST dengan muatan JSON ke titik akhir anda
│
└─ Penerima Webhook (pelayan atau fungsi tanpa pelayan anda)
│
├─ 1. Sahkan tandatangan permintaan (HMAC)
├─ 2. Hurai dan sahkan skema muatan
├─ 3. Semak idempotency (adakah ini penyerahan berganda?)
├─ 4. Transformasikan medan ke format CRM
├─ 5. Cari kenalan sedia ada dalam CRM
├─ 6. Cipta atau kemas kini kenalan (upsert)
├─ 7. Kembalikan HTTP 200 serta-merta
└─ 8. Catat hasil (berjaya atau gagal) secara tidak segerak
Prinsip reka bentuk utama: kembalikan HTTP 200 secepat mungkin. Jangan lakukan operasi perlahan (panggilan API CRM, carian pangkalan data) secara segerak dalam pengendali webhook. Gunakan barisan atau kerja latar belakang untuk itu. Lebih lanjut mengenai sebabnya dalam bahagian tentang mengelakkan masa tamat.
Langkah 1: Reka Bentuk Titik Akhir Penerima Webhook Anda
Penerima anda perlu:
- Boleh diakses awam (sumber prospek perlu POST kepadanya)
- HTTPS sahaja (jangan terima webhook melalui HTTP)
- Sentiasa tersedia semasa waktu perniagaan sekurang-kurangnya
- Cepat membalas (di bawah 5 saat, idealnya di bawah 1 saat)
Pilihan penggunaan:
- Fungsi tanpa pelayan (AWS Lambda, Vercel, Cloudflare Workers): Tiada infrastruktur untuk diuruskan, berskala ke mana-mana jumlah, kependaman permulaan sejuk boleh diterima untuk webhook
- Express.js pada VPS: Mudah jika anda sudah mempunyai infrastruktur pelayan
- FastAPI pada VPS: Pilihan Python yang baik dengan pengesahan permintaan automatik
Berikut adalah penerima minimum dalam Node.js yang mengendalikan asas:
// webhook-receiver.js (Express.js)
const express = require('express');
const crypto = require('crypto');
const { Queue } = require('bullmq'); // untuk pemprosesan tidak segerak
const app = express();
app.use(express.json());
const leadQueue = new Queue('lead-processing');
app.post('/webhooks/leads', async (req, res) => {
// 1. Sahkan tandatangan serta-merta
const signature = req.headers['x-webhook-signature'];
if (!verifySignature(req.body, signature)) {
return res.status(401).json({ error: 'Invalid signature' });
}
// 2. Semakan kehadiran muatan asas
const { email, firstName, lastName } = req.body;
if (!email) {
return res.status(400).json({ error: 'Missing required field: email' });
}
// 3. Barikan pemprosesan sebenar, kembalikan 200 serta-merta
await leadQueue.add('process-lead', req.body, {
jobId: req.body.submissionId || generateId(), // kunci idempotency
removeOnComplete: 100,
removeOnFail: 50
});
// 4. Kembalikan 200 dengan cepat, penghantar menganggap ini berjaya
return res.status(200).json({ received: true });
});
Dan setaraf dalam Python dengan FastAPI:
# webhook_receiver.py
from fastapi import FastAPI, Request, HTTPException, Header
import hmac, hashlib, json
from typing import Optional
app = FastAPI()
@app.post("/webhooks/leads")
async def receive_lead(
request: Request,
x_webhook_signature: Optional[str] = Header(None)
):
body = await request.body()
payload = await request.json()
# Sahkan tandatangan
if not verify_signature(body, x_webhook_signature):
raise HTTPException(status_code=401, detail="Invalid signature")
# Pengesahan asas
if not payload.get("email"):
raise HTTPException(status_code=400, detail="Missing required field: email")
# Barikan untuk pemprosesan tidak segerak
await queue_lead_processing(payload)
return {"received": True}
Langkah 2: Sahkan Skema Muatan
Jangan percaya bahawa setiap penghantaran webhook akan mempunyai semua medan yang anda jangkakan. Sumber prospek boleh menukar struktur muatan mereka antara keluaran. Medan boleh null atau hilang. Anda memerlukan pengesahan sebelum sebarang pemprosesan berlaku.
Tentukan skema medan yang diperlukan dan semaknya:
// Pengesahan skema (Node.js)
function validateLeadPayload(payload) {
const errors = [];
// Medan yang diperlukan
if (!payload.email && !payload.phone) {
errors.push('At least one of email or phone is required');
}
// Pengesahan jenis
if (payload.email && !isValidEmail(payload.email)) {
errors.push(`Invalid email format: ${payload.email}`);
}
// Had panjang medan (cegah data sampah)
if (payload.firstName && payload.firstName.length > 100) {
errors.push('firstName exceeds maximum length');
}
return {
valid: errors.length === 0,
errors: errors
};
}
Apabila pengesahan gagal, kembalikan HTTP 400 dengan ralat yang deskriptif. Jangan gugurkan prospek secara senyap. Sumber prospek seharusnya mencatat respons 400 supaya anda boleh mennyahpepijat isu muatan.
Peraturan pengesahan muatan yang biasa:
- Sekurang-kurangnya satu medan identiti (e-mel atau telefon) mesti hadir
- Pengesahan format e-mel (semakan regex)
- Normalisasi nombor telefon (buang ruang, sengkang, kurungan)
- Had panjang medan rentetan untuk mengelakkan data sampah
- Medan angka seharusnya benar-benar nombor (bukan rentetan)
- Medan tarikh seharusnya dihurai dengan betul jika disediakan
Langkah 3: Sahkan Pengirim dengan Pengesahan HMAC
Mana-mana titik akhir yang boleh diakses awam adalah sasaran untuk penyerahan spam. Tanpa pengesahan, sesiapa yang menemui URL webhook anda boleh membanjiri CRM anda dengan prospek palsu.
Pengesahan tandatangan HMAC (Hash-based Message Authentication Code) adalah pendekatan standard. Garis panduan NIST mengenai piawaian kriptografi menghuraikan HMAC sebagai mekanisme yang disyorkan untuk pengesahan mesej dalam senario seperti ini, iaitu mengesahkan mesej melalui saluran tidak dipercayai tanpa memerlukan sesi kongsi. Berikut cara ia berfungsi:
- Apabila anda menyediakan webhook dalam platform sumber prospek, ia menunjukkan kepada anda "rahsia webhook," iaitu kunci rahsia kongsi
- Apabila pengirim mencetus webhook, ia mengira tandatangan HMAC badan permintaan menggunakan rahsia kongsi
- Ia menyertakan tandatangan tersebut dalam pengepala permintaan (biasanya
X-Webhook-SignatureatauX-Hub-Signature-256) - Penerima anda mengira HMAC yang sama dan membandingkan
Jika tandatangan sepadan, permintaan adalah dari pengirim yang sah. Jika tidak, tolak.
// Pengesahan HMAC (Node.js)
function verifySignature(body, receivedSignature) {
if (!receivedSignature) return false;
const secret = process.env.WEBHOOK_SECRET;
const bodyString = typeof body === 'string' ? body : JSON.stringify(body);
const expectedSignature = crypto
.createHmac('sha256', secret)
.update(bodyString)
.digest('hex');
// Gunakan timingSafeEqual untuk mencegah serangan masa
return crypto.timingSafeEqual(
Buffer.from(expectedSignature, 'utf8'),
Buffer.from(receivedSignature.replace('sha256=', ''), 'utf8')
);
}
# Pengesahan HMAC (Python)
import hmac, hashlib, os
def verify_signature(body: bytes, received_signature: str) -> bool:
if not received_signature:
return False
secret = os.environ.get('WEBHOOK_SECRET', '').encode()
expected = hmac.new(secret, body, hashlib.sha256).hexdigest()
clean_received = received_signature.replace('sha256=', '')
return hmac.compare_digest(expected, clean_received)
Penting: Gunakan timingSafeEqual atau compare_digest untuk perbandingan, bukan ==. Perbandingan rentetan terus terdedah kepada serangan masa yang boleh mendedahkan rahsia anda.
Jika sumber prospek anda tidak menyokong tandatangan HMAC, gunakan kunci API dalam pengepala sebaliknya: perlukan pengepala tersuai seperti X-API-Key dengan nilai rahsia. Ia kurang selamat berbanding HMAC (ia tidak mengesahkan integriti muatan) tetapi jauh lebih baik daripada tiada apa.
Langkah 4: Kendalikan Idempotency untuk Mencegah Prospek Berganda
Ini adalah masalah yang menggigit pasukan dalam pengeluaran. Pengirim webhook mencuba semula penghantaran yang gagal. Isu rangkaian menyebabkan acara yang sama mencetus dua kali. Penerima anda memproses kedua-duanya dan mencipta dua kenalan CRM. Cabaran penyahduplikatan yang sama berlaku merentas semua saluran penangkapan, dan Penyahduplikatan Prospek Dari Penangkapan Berbilang Saluran merangkumi cara mengendalikannya pada skala.
Idempotency bermakna: memproses permintaan yang sama dua kali menghasilkan hasil yang sama seperti memprosesnya sekali.
Mekanismenya adalah kunci idempotency: pengecam unik untuk setiap acara webhook. Kebanyakan platform sumber prospek menyertakan ini dalam muatan atau pengepala (sering dipanggil submissionId, eventId, atau X-Idempotency-Key).
Di pihak penerima anda, jejaki kunci yang telah diproses dalam storan pantas (Redis adalah ideal, jadual pangkalan data juga berfungsi):
// Semakan idempotency menggunakan Redis
const redis = require('redis');
const client = redis.createClient();
async function isAlreadyProcessed(idempotencyKey) {
const exists = await client.get(`webhook:${idempotencyKey}`);
return exists !== null;
}
async function markAsProcessed(idempotencyKey) {
// Simpan selama 24 jam, cukup untuk menangkap cubaan semula
await client.setEx(`webhook:${idempotencyKey}`, 86400, '1');
}
// Dalam kerja pemprosesan anda:
async function processLead(payload) {
const key = payload.submissionId || payload.eventId;
if (key && await isAlreadyProcessed(key)) {
console.log(`Skipping duplicate submission: ${key}`);
return; // Sudah diproses, langkau
}
// ... lakukan penulisan CRM ...
if (key) {
await markAsProcessed(key);
}
}
Jika sumber prospek tidak menyediakan kunci idempotency, anda boleh membinanya daripada medan yang stabil: ${email}:${submissionTimestamp} biasanya cukup unik.
Langkah 5: Tulis ke CRM dengan Logik Upsert
Penulisan CRM adalah langkah kritikal, dan ia perlu mengendalikan tiga kes:
- Kenalan baharu: E-mel atau telefon tidak wujud dalam CRM. Cipta rekod baharu.
- Kenalan sedia ada, kemas kini: Kenalan wujud. Kemas kini rekod mereka dengan data baharu dari webhook.
- Padanan separa: Kenalan mungkin wujud tetapi anda tidak pasti (contohnya, telefon sepadan tetapi e-mel tidak). Tangani kes ini secara eksplisit berbanding mencipta atau mengemas kini secara membuta tuli.
HubSpot Upsert (menggunakan Contacts API v3)
API HubSpot mempunyai upsert terbina melalui titik akhir batch/upsert yang mengendalikan kes 1 dan 2 secara automatik:
// HubSpot upsert (Node.js dengan axios)
async function upsertHubSpotContact(leadData) {
const properties = {
email: leadData.email,
firstname: leadData.firstName,
lastname: leadData.lastName,
phone: leadData.phone,
company: leadData.company,
// Sifat tersuai yang anda telah cipta:
lead_source_channel: leadData.sourceChannel,
webhook_submission_id: leadData.submissionId,
lead_captured_at: new Date().toISOString()
};
// Buang nilai tidak ditentukan
Object.keys(properties).forEach(k =>
properties[k] === undefined && delete properties[k]
);
const response = await axios.patch(
`https://api.hubapi.com/crm/v3/objects/contacts/${encodeURIComponent(leadData.email)}?idProperty=email`,
{ properties },
{
headers: {
'Authorization': `Bearer ${process.env.HUBSPOT_TOKEN}`,
'Content-Type': 'application/json'
}
}
);
return response.data;
}
Jika kenalan tidak wujud, HubSpot mengembalikan 404 pada PATCH. Tangkap itu dan POST untuk mencipta:
async function writeLeadToHubSpot(leadData) {
try {
// Cuba kemas kini kenalan sedia ada
return await upsertHubSpotContact(leadData);
} catch (error) {
if (error.response?.status === 404) {
// Kenalan tidak wujud, cipta baharu
return await createHubSpotContact(leadData);
}
throw error; // Lempar semula ralat lain
}
}
Salesforce Upsert (menggunakan External ID)
Untuk Salesforce, pendekatan paling bersih adalah menggunakan medan External ID pada objek Lead. Cipta medan tersuai Webhook_Submission_ID__c dan konfigurasikannya sebagai External ID.
Kemudian gunakan titik akhir upsert: PATCH /services/data/v59.0/sobjects/Lead/Webhook_Submission_ID__c/{submissionId}
Ini mencipta atau mengemas kini berdasarkan External ID. Tiada carian berasingan diperlukan.
Langkah 6: Kembalikan HTTP 200 Serta-Merta dan Proses Secara Tidak Segerak
Ini layak mendapat bahagiannya sendiri kerana mendapatkannya salah menyebabkan masalah nyata.
Apabila penerima webhook anda mengembalikan respons HTTP, pengirim menandai penghantaran webhook sebagai berjaya atau gagal berdasarkan respons tersebut. Jika anda mengembalikan 200, pengirim meneruskan. Jika anda mengembalikan 500, pengirim mencuba semula.
Masalahnya: panggilan API CRM mengambil masa 200-1000ms. Carian pangkalan data mengambil masa. Jika anda melakukan semua itu secara segerak dalam pengendali webhook, anda berisiko:
- Masa tamat: Kebanyakan pengirim webhook mempunyai masa tamat respons 5-10 saat. Jika API CRM anda lambat, anda akan tamat masa dan pengirim akan mencuba semula, menyebabkan pemprosesan berganda.
- Kegagalan bertambah: Jika API CRM tidak aktif, pengendali webhook anda mengembalikan 500, pengirim mencuba semula, dan anda mendapat banjir cubaan semula apabila CRM kembali.
Penyelesaiannya adalah mengembalikan 200 serta-merta dan memproses secara tidak segerak:
app.post('/webhooks/leads', async (req, res) => {
// Sahkan tandatangan dan muatan asas, operasi pantas
if (!verifySignature(req.body, req.headers['x-webhook-signature'])) {
return res.status(401).json({ error: 'Invalid signature' });
}
// Barikan untuk pemprosesan tidak segerak, operasi pantas
await leadQueue.add('process-lead', req.body, {
jobId: req.body.submissionId
});
// Kembalikan 200 serta-merta, pengirim menganggap ini berjaya
return res.status(200).json({ received: true });
});
// Ini berjalan secara tidak segerak dalam pekerja
leadQueue.process('process-lead', async (job) => {
const leadData = job.data;
await idempotencyCheck(leadData.submissionId);
await transformFields(leadData);
await writeLeadToCRM(leadData);
await logResult(leadData);
});
Barisan (BullMQ dalam contoh Node.js) mengendalikan cubaan semula pada kegagalan, tetapi kini ia adalah cubaan semula dalaman dalam sistem anda, bukan cubaan semula penghantaran webhook dari pengirim.
Perangkap Biasa
Tidak mengesahkan tandatangan webhook: Jika anda melangkau pengesahan HMAC, sesiapa boleh POST prospek palsu ke titik akhir anda. Ini bukan teoritikal. Bot menemui titik akhir webhook dan mengujinya secara tetap.
Penulisan CRM segerak dalam pengendali: Ini menyebabkan masa tamat dan memaksa cubaan semula webhook. Sentiasa gunakan barisan atau kerja latar belakang.
Idempotency yang hilang: Prospek yang sama ditulis dua kali semasa cubaan semula. Ini mencipta rekod CRM pendua yang mahal untuk dibersihkan pada skala.
Kegagalan senyap: Jika penulisan CRM gagal dan anda tidak mencatatnya dengan butiran yang cukup untuk nyahpepijat, anda kehilangan prospek tanpa petunjuk ada yang salah. Catat setiap kegagalan dengan muatan penuh dan mesej ralat.
Tidak mengendalikan kes 404-pada-upsert: Menulis logik kemas kini sahaja yang gagal secara senyap apabila kenalan tidak wujud, berbanding jatuh kembali untuk mencipta.
Penyokong Penerima Webhook (Node.js)
// Penyokong lengkap, sesuaikan mengikut keperluan anda
const express = require('express');
const crypto = require('crypto');
const { Queue, Worker } = require('bullmq');
const { createClient } = require('redis');
const app = express();
app.use(express.raw({ type: 'application/json' })); // Kekalkan badan mentah untuk HMAC
const redis = createClient({ url: process.env.REDIS_URL });
const leadQueue = new Queue('leads', { connection: redis });
// Titik akhir penerima
app.post('/webhooks/leads', async (req, res) => {
const rawBody = req.body;
const payload = JSON.parse(rawBody);
const sig = req.headers['x-webhook-signature'];
if (!verifyHmac(rawBody, sig, process.env.WEBHOOK_SECRET)) {
return res.status(401).json({ error: 'Signature invalid' });
}
if (!payload.email && !payload.phone) {
return res.status(400).json({ error: 'Missing identity field' });
}
const jobId = payload.submissionId || `${payload.email}-${Date.now()}`;
await leadQueue.add('process', payload, { jobId, attempts: 3 });
return res.status(200).json({ ok: true });
});
// Pekerja
new Worker('leads', async (job) => {
const lead = job.data;
// Semakan idempotency
const processed = await redis.get(`lead:${job.id}`);
if (processed) return;
// Penulisan CRM
await writeLeadToCRM(lead);
// Tandakan sebagai diproses
await redis.setEx(`lead:${job.id}`, 86400, '1');
}, { connection: redis });
function verifyHmac(body, signature, secret) {
if (!signature || !secret) return false;
const expected = crypto.createHmac('sha256', secret).update(body).digest('hex');
return crypto.timingSafeEqual(
Buffer.from(expected),
Buffer.from(signature.replace('sha256=', ''))
);
}
app.listen(3000);
Mengukur Perkara Yang Penting
Kadar kejayaan penghantaran webhook: Platform pengurusan webhook anda (atau papan pemuka pengirim) seharusnya menunjukkan kadar kejayaan. Sasarkan 99.9%+. Kegagalan di bawah ambang ini menunjukkan isu ketersediaan penerima atau masa tamat. Analisis Forbes Technology Council mengenai kebolehpercayaan saluran data mendapati bahawa walaupun kadar kegagalan 0.5% dalam saluran prospek jumlah tinggi menghasilkan risiko pendapatan yang bermakna pada skala, mengukuhkan kepentingan pengendalian cubaan semula dan idempotency sebagai keperluan wajib.
Kadar rekod pendua: Semak CRM anda setiap minggu untuk kenalan dengan e-mel atau telefon yang sama. Sebarang pendua menunjukkan logik idempotency anda tidak berfungsi dengan betul.
Kependaman pemprosesan purata: Masa dari penerimaan webhook ke penciptaan rekod CRM. Seharusnya di bawah 30 saat untuk pemprosesan berasaskan barisan, di bawah 5 saat untuk segerak.
Kadar kegagalan pengesahan muatan: Berapa kerap webhook masuk yang hilang medan yang diperlukan atau gagal pengesahan skema? Kadar tinggi menunjukkan struktur muatan pengirim telah berubah dan memerlukan kemas kini pemetaan.
Ketahui Lebih Lanjut
- Corak Automasi Borang ke CRM Yang Benar-Benar Berskala: prinsip untuk mana-mana saluran penangkapan prospek
- Zapier vs n8n vs Make untuk Automasi Penangkapan Prospek: bila menggunakan alat tanpa kod berbanding webhook tersuai
- Penyahduplikatan Prospek Dari Penangkapan Berbilang Saluran: mengendalikan masalah dedup merentas semua saluran penangkapan anda
- Automasi Pengayaan Prospek: Mengisi Jurang Tanpa Membayar Setiap Rekod: memperkayakan kenalan yang dicipta oleh saluran webhook anda

Principal Product Marketing Strategist
On this page
- Bila Webhook Adalah Pilihan Yang Betul
- Anatomi Saluran Penangkapan Prospek Webhook
- Langkah 1: Reka Bentuk Titik Akhir Penerima Webhook Anda
- Langkah 2: Sahkan Skema Muatan
- Langkah 3: Sahkan Pengirim dengan Pengesahan HMAC
- Langkah 4: Kendalikan Idempotency untuk Mencegah Prospek Berganda
- Langkah 5: Tulis ke CRM dengan Logik Upsert
- Langkah 6: Kembalikan HTTP 200 Serta-Merta dan Proses Secara Tidak Segerak
- Perangkap Biasa
- Penyokong Penerima Webhook (Node.js)
- Mengukur Perkara Yang Penting
- Ketahui Lebih Lanjut