אתה משלב תשלומי קריפטו, אבל הבלוקצ'יין לא יכול להודיע לשרת הקצה שלך בעצמו. אתה צריך לבדוק את הצומת כל 12 שניות — זה 7200 בקשות RPC לשעה לכל כתובת. עבור 1000 משתמשים פעילים, העומס גדל ל-7.2 מיליון בקשות לשעה, מה שעולה עשרות אלפי דולרים בחודש וגורם לעיכובים של עד 30 שניות. בזמן עומס ברשת, כמו mint פופולרי, אתה מובטח לאבד עסקאות.
Webhook פותר את הבעיה: ניטור הבלוקצ'יין שולח בעצמו בקשת HTTP לשרת שלך כאשר מתרחש אירוע. זמן האחזור יורד ל-2–5 שניות, עומס השרת יורד ב-95%. בנינו עשרות מערכות כאלה ואנחנו יודעים איך להפוך אותן לאמינות.
למה webhook עדיף על פני polling לתשלומי קריפטו?
Polling פירושו בקשות RPC קבועות לצומת. כל בקשה עולה כסף ויוצרת עומס. Webhook הוא מודל push: אתה מקבל הודעה ברגע שהעסקה נכללת בבלוק. זמן האחזור מינימלי, עומס השרת יורד משמעותית. עבור פרויקטים בעלי עומס גבוה, זו האפשרות היחידה המעשית. לדוגמה, אחת מבורסות הלקוחות שלנו הפחיתה את עלויות התשתית ב-40% והקטינה את זמן אישור התשלום הממוצע מ-15 ל-3 שניות לאחר המעבר מ-polling ל-webhook.
איך אנחנו בונים מערכת הודעות webhook
אנחנו משתמשים בארכיטקטורה מוכחת: ניטור בלוקצ'יין → מפזר webhook → תור המשימות שלך. ניתן ליישם ניטור באמצעות שירותי צד שלישי (Alchemy Notify, Moralis Streams, QuickNode Streams) או מאזין צומת משלך. אנחנו בדרך כלל בוחרים ב-Alchemy לפשטות ואמינות. הנה דוגמה ליצירת webhook:
// Создание webhook через Alchemy API const response = await fetch('https://dashboard.alchemy.com/api/create-webhook', { method: 'POST', headers: { 'X-Alchemy-Token': process.env.ALCHEMY_AUTH_TOKEN!, 'Content-Type': 'application/json', }, body: JSON.stringify({ network: 'ETH_MAINNET', webhook_type: 'ADDRESS_ACTIVITY', webhook_url: 'https://yourapp.com/webhooks/crypto', addresses: ['0xYourAddress'], }), }) איך להבטיח עיבוד webhook אידמפוטנטי?
ספקי webhook מבטיחים מסירה לפחות פעם אחת. ה-handler שלך חייב להיות אידמפוטנטי — הודעות חוזרות לא חייבות לשכפל תשלומים. אנחנו משתמשים ב-// Создание webhook через Alchemy API const response = await fetch('https://dashboard.alchemy.com/api/create-webhook', { method: 'POST', headers: { 'X-Alchemy-Token': process.env.ALCHEMY_AUTH_TOKEN!, 'Content-Type': 'application/json', }, body: JSON.stringify({ network: 'ETH_MAINNET', webhook_type: 'ADDRESS_ACTIVITY', webhook_url: 'https://yourapp.com/webhooks/crypto', addresses: ['0xYourAddress'], }), }) :
async function processPaymentWebhook(txHash: string, address: string, amountWei: bigint) { const result = await db.query(` INSERT INTO processed_webhooks (tx_hash, processed_at) VALUES ($1, NOW()) ON CONFLICT (tx_hash) DO NOTHING RETURNING id `, [txHash]) if (result.rowCount === 0) { return // уже обработано } await updatePaymentStatus(address, amountWei, txHash) } מנגנון ניסיון חוזר עבור webhooks יוצאים
אם השירות שלך מודיע ללקוחות דרך webhook, אתה צריך מנגנון ניסיון חוזר אמין. אנחנו משתמשים ב-exponential backoff עם 10 ניסיונות ושמירה בתור dead letter. דוגמת handler:
interface WebhookDelivery { id: string url: string payload: object attempt: number nextRetryAt: Date } async function deliverWebhook(delivery: WebhookDelivery): Promise<void> { try { const res = await fetch(delivery.url, { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-Webhook-Signature': signPayload(delivery.payload), 'X-Webhook-ID': delivery.id, 'X-Webhook-Attempt': String(delivery.attempt), }, body: JSON.stringify(delivery.payload), signal: AbortSignal.timeout(10_000), }) if (!res.ok) { throw new Error(`HTTP ${res.status}`) } await db.markDelivered(delivery.id) } catch (err) { const nextAttempt = delivery.attempt + 1 if (nextAttempt > 10) { await db.markFailed(delivery.id, String(err)) return } const delayMs = Math.min(30_000 * Math.pow(2, nextAttempt - 1), 3_600_000) await db.scheduleRetry(delivery.id, nextAttempt, new Date(Date.now() + delayMs)) } } תוכנית ניסיון חוזר: 10 ניסיונות עם exponential backoff מספיקים ל-99.7% מהמסירות. כישלון סופי — הודע למפתחים דרך PagerDuty או Telegram, שמור בתור dead letter.
השוואת ספקי ניטור בלוקצ'יין
| ספק | סוג הודעה | מגבלת כתובות | מדרגיות |
|---|---|---|---|
| Alchemy Notify | ADDRESS_ACTIVITY, MINED_TRANSACTION | עד 10 בחינם | גבוהה, SLA 99.9% |
| Moralis Streams | כל האירועים | ללא הגבלה (לפי תוכנית) | בינונית, זמן אחזור עד 10 שניות |
| QuickNode Streams | ADDRESS_ACTIVITY, CONTRACT_EVENT | לפי בקשה | גבוהה, SLA מותאם אישית |
אנחנו ממליצים על Alchemy להתחלה — הוא מתועד טוב יותר ויציב. אנחנו משתמשים בו בכ-70% מהפרויקטים.
אירועי webhook טיפוסיים והטיפול בהם
| אירוע | Payload (מפושט) | עיבוד טיפוסי |
|---|---|---|
| ADDRESS_ACTIVITY | txHash, address, amount, block | זיכוי תשלום, עדכון יתרה |
| MINED_TRANSACTION | txHash, status, gas | עדכון סטטוס עסקה במסד הנתונים |
| CONTRACT_EVENT | event.name, params, txHash | הפעלת לוגיקה עסקית מתאימה |
טבלה זו עוזרת למפתחים להבין במהירות אילו נתונים מגיעים ומה לעשות איתם.
מה לעשות אם ה-webhook handler נופל?
ספקי בלוקצ'יין לא שומרים אירועים ללא הגבלת זמן. אם ה-endpoint שלך נופל, אתה מסתכן באובדן הודעות. לכן, אנחנו מתכננים את המערכת עם תור משימות (RabbitMQ, Redis, או Kafka) מיד אחרי ה-endpoint. אם העיבוד נכשל, התור שומר את ההודעה ומנסה שוב. בנוסף, אנחנו מגדירים ניטור: אם התור גדל מעבר ל-1000 משימות לא מעובדות, נשלחת התראה. זה מבטיח שאף תשלום לא יאבד גם במקרה של תקלת מסד נתונים או רשת.
תהליך הפיתוח
- ניתוח דרישות: סוגי אירועים, מספר כתובות, SLA.
- עיצוב ארכיטקטורה: בחירת ספק, סכמת נתונים, מדיניות ניסיון חוזר.
- יישום endpoint של webhook עם אימות חתימה ותור.
- פיתוח handler אידמפוטנטי ומנגנון ניסיון חוזר.
- אינטגרציה עם מערכת התשלומים שלך.
- בדיקות על testnet (Goerli, Sepolia).
- פריסה וניטור (Grafana + Prometheus).
מה כלול
- תיעוד API של webhook
- קוד מקור עם הערות
- מדריך פריסה
- סביבת בדיקות
- חודש אחד של תמיכה לאחר השקה
לוח זמנים ותמחור
endpoint בסיסי של webhook עם אימות ותור ניתן לביצוע ביום אחד. מערכת מלאה עם ניסיון חוזר, תור dead letter ולוח בקרה לוקחת 2–3 ימים. התמחור מותאם אישית לאחר ניתוח. נבחן את המקרה שלך תוך 24 שעות — פשוט צור קשר. קבל ייעוץ ממהנדס עם 10 שנות ניסיון בפיתוח בלוקצ'יין.
טעויות טיפוסיות
- לא לאמת את החתימה — כל אחד יכול לשלוח webhook מזויף.
- להשיב עם 200 לאחר הוספה לתור — חוסם את התור, מפחית תפוקה.
- לא להשתמש באידמפוטנטיות — חיוב כפול של תשלום.
- התעלמות מניסיון חוזר עבור webhooks יוצאים — אובדן נתונים.
הצוות שלנו מבטיח אמינות ואבטחה לכל פתרון. יישמנו מעל 50 אינטגרציות של מערכות תשלום באמצעות webhooks. אם אתה צריך מערכת הודעות webhook אמינה — צור קשר.







