वेबहुक कॉलबैक कतार
MirApi का async वेबहुक मोड API कॉल को एक बैकग्राउंड वर्कर पूल में भेज देता है और आपके कॉलर को तुरंत 202 Accepted लौटाता है। जब अपस्ट्रीम जवाब देता है, तो MirApi परिणाम को आपके कॉलबैक URL पर POST करता है। वर्कर पूर्ण रिट्री लॉजिक का समर्थन करता है और यदि अपस्ट्रीम अस्थायी रूप से अनुपलब्ध है तो घंटों तक पुनः प्रयास करता रहता है।
यह कैसे काम करता है
Section titled “यह कैसे काम करता है”Your App MirApi Upstream API | | | |──POST (+ X-Webhook)───→| | |←──202 Accepted─────────| | | {"job_id": "..."} | | | |──push to Redis queue──→ | | | (async worker) | |←──upstream response────────| |←──POST /your/webhook───| | | (full response) |async मोड क्यों उपयोग करें?
- आपके ऐप का रिक्वेस्ट थ्रेड तुरंत मुक्त हो जाता है — धीमे अपस्ट्रीम का इंतज़ार नहीं करना पड़ता
- वर्कर ज़रूरत पड़ने पर घंटों तक रिट्री करता है, अस्थायी आउटेज को पारदर्शी तरीके से संभालता है
- डुप्लीकेट जॉब सबमिशन रोकने के लिए
X-Proxy-Idempotency-Keyके साथ जोड़ें - उचित शेड्यूलिंग के लिए जॉब सब्सक्रिप्शन टियर (
business,developer,free) के अनुसार कतारबद्ध होती हैं
बुनियादी उपयोग
Section titled “बुनियादी उपयोग”curl -X POST https://proxy.mirapi.io/ \ -H "X-MirApi-Key: $MIRAPI_KEY" \ -H "X-Target-URL: https://api.stripe.com/v1/charges" \ -H "X-Identity-Key: Bearer sk_live_..." \ -H "X-Webhook-Callback: https://your-app.com/api/webhooks/payments" \ -H "X-Proxy-Idempotency-Key: order_789_pay_attempt_1" \ -H "Content-Type: application/json" \ -d '{"amount": 9900, "currency": "usd", "source": "tok_visa"}'तत्काल रिस्पॉन्स:
HTTP/1.1 202 AcceptedContent-Type: application/json
{ "status": "Accepted", "job_id": "8fd2a023-df21-4ea7-8b01-5d9f0f9b36ea"}आवश्यक हेडर
Section titled “आवश्यक हेडर”| हेडर | आवश्यक | विवरण |
|---|---|---|
X-Webhook-Callback | हाँ | आपका एंडपॉइंट URL जो जॉब पूरी होने पर POST प्राप्त करता है |
आपके कॉलबैक को क्या मिलता है
Section titled “आपके कॉलबैक को क्या मिलता है”जब बैकग्राउंड वर्कर अपस्ट्रीम कॉल पूरी करता है, तो वह आपके X-Webhook-Callback URL पर POST भेजता है। बॉडी में अपस्ट्रीम API का raw रिस्पॉन्स बॉडी होती है — ठीक वही जो आपको सिंक्रोनस कॉल में मिलती।
सफलता पर, आपके कॉलबैक को अपस्ट्रीम रिस्पॉन्स बॉडी मिलती है:
POST https://your-app.com/api/webhooks/paymentsContent-Type: application/json
{ "id": "ch_3Pz9...", "status": "succeeded", "amount": 9900, "currency": "usd"}विफलता पर (सभी रिट्री समाप्त), आपके कॉलबैक को एक त्रुटि पेलोड मिलता है:
{ "error": "upstream_failed", "job_id": "8fd2a023-df21-4ea7-8b01-5d9f0f9b36ea", "status_code": 503, "message": "All retry attempts failed for https://api.stripe.com/v1/charges"}रिट्री लॉजिक के साथ संयोजन
Section titled “रिट्री लॉजिक के साथ संयोजन”async वर्कर वही रिट्री इंजन उपयोग करता है जो सिंक्रोनस रिक्वेस्ट के लिए होता है। रिट्री व्यवहार नियंत्रित करने के लिए X-Retry-Count और X-Retry-Delay का उपयोग करें:
# 5 रिट्री के साथ पेमेंट, 1 सेकंड की देरी से शुरूcurl -X POST https://proxy.mirapi.io/ \ -H "X-MirApi-Key: $MIRAPI_KEY" \ -H "X-Target-URL: https://api.stripe.com/v1/charges" \ -H "X-Identity-Key: Bearer sk_live_..." \ -H "X-Webhook-Callback: https://your-app.com/api/webhooks/payments" \ -H "X-Proxy-Idempotency-Key: order_789_pay_1" \ -H "X-Retry-Count: 5" \ -H "X-Retry-Delay: 1s" \ -H "X-Proxy-Timeout: 10s" \ -H "X-Attempt-Timeout: 2s" \ -H "Content-Type: application/json" \ -d '{"amount": 9900, "currency": "usd", "source": "tok_visa"}'कैस्केड रूट्स के साथ संयोजन
Section titled “कैस्केड रूट्स के साथ संयोजन”पूरी कैस्केड रणनीति को असिंक्रोनस रूप से चलाने के लिए X-Route-Key को X-Webhook-Callback के साथ उपयोग करें:
# कई प्रोवाइडरों में async AI रिक्वेस्टcurl -X POST https://proxy.mirapi.io/ \ -H "X-MirApi-Key: $MIRAPI_KEY" \ -H "X-Route-Key: ai-providers" \ -H "X-Webhook-Callback: https://your-app.com/ai-results" \ -H "Content-Type: application/json" \ -d '{"prompt": "Summarize this document: ..."}'# तुरंत 202 लौटाता है# वर्कर openai → anthropic → groq को आज़माता है (रूट कॉन्फ़िग के अनुसार)# पहला सफल रिस्पॉन्स आपके वेबहुक पर POST करता हैasync जॉब के लिए आइडेम्पोटेंसी
Section titled “async जॉब के लिए आइडेम्पोटेंसी”असिंक्रोनस रूप से पेमेंट प्रोसेस करते समय हमेशा X-Proxy-Idempotency-Key प्रदान करें। यदि 60 सेकंड के भीतर वही कुंजी दोबारा आती है (जैसे क्लाइंट रिट्री के कारण), तो MirApi उसी job_id के साथ वही 202 रिस्पॉन्स लौटाता है — कोई डुप्लीकेट जॉब कतार में नहीं जाती।
# पहली रिक्वेस्ट → जॉब बनाती है, job_id लौटाती हैcurl -X POST https://proxy.mirapi.io/ \ -H "X-MirApi-Key: $MIRAPI_KEY" \ -H "X-Target-URL: https://api.stripe.com/v1/charges" \ -H "X-Webhook-Callback: https://your-app.com/webhook" \ -H "X-Proxy-Idempotency-Key: charge_order_123" \ -d '{"amount": 5000, "currency": "usd"}'# → 202: {"status": "Accepted", "job_id": "abc-123"}
# 60 सेकंड के भीतर वही कुंजी दोबारा → कोई नई जॉब नहीं# → 202: {"status": "Accepted", "job_id": "abc-123"} (वही job_id, कैश्ड रिस्पॉन्स)व्यावहारिक उदाहरण: ई-कॉमर्स पेमेंट फ्लो
Section titled “व्यावहारिक उदाहरण: ई-कॉमर्स पेमेंट फ्लो”# चरण 1: async रूप से चार्ज सबमिट करेंcurl -X POST https://proxy.mirapi.io/ \ -H "X-MirApi-Key: $MIRAPI_KEY" \ -H "X-Target-URL: https://api.stripe.com/v1/charges" \ -H "X-Identity-Key: Bearer sk_live_..." \ -H "X-Webhook-Callback: https://myshop.com/api/payments/confirm" \ -H "X-Proxy-Idempotency-Key: order_456_cart_789_attempt_1" \ -H "X-Retry-Count: 3" \ -H "X-Proxy-Timeout: 15s" \ -H "X-Attempt-Timeout: 3s" \ -H "Content-Type: application/json" \ -d '{ "amount": 25000, "currency": "usd", "source": "tok_visa", "description": "Order #456" }'
# चरण 2: आपका ऐप तुरंत उपयोगकर्ता को जवाब देता है ("पेमेंट प्रोसेस हो रही है...")
# चरण 4: MirApi वर्कर Stripe को कॉल करता है, ज़रूरत पड़ने पर रिट्री करता है# चरण 5: Stripe सफल → MirApi https://myshop.com/api/payments/confirm पर POST करता है# चरण 6: आपका हैंडलर ऑर्डर को paid के रूप में चिह्नित करता हैथर्ड-पार्टी वेबहुक प्रोड्यूसर के साथ async मोड (Shopify, GitHub, Stripe)
Section titled “थर्ड-पार्टी वेबहुक प्रोड्यूसर के साथ async मोड (Shopify, GitHub, Stripe)”कई प्लेटफ़ॉर्म जो वेबहुक फायर करते हैं — Shopify Admin, GitHub Actions, Stripe — केवल आपको एक डेस्टिनेशन URL दर्ज करने देते हैं। वे कस्टम HTTP हेडर की अनुमति नहीं देते।
ऐसे परिदृश्यों के लिए, MirApi हेडर की जगह सभी कॉन्फ़िगरेशन को URL क्वेरी पैरामीटर के रूप में पास करने का समर्थन करता है। उदाहरण के लिए, Shopify को 10 रिट्री के साथ ऑर्डर कतारबद्ध करने के लिए कॉन्फ़िगर करने हेतु:
https://proxy.mirapi.io/v1/webhook?mirapi_key=your_api_key&callback=https%3A%2F%2Fmy-erp.com%2Fapi%2Forders&retries=10&delay=1s&timeout=5sपूर्ण गाइड, मैपिंग तालिका, और चरण-दर-चरण Shopify इंटीग्रेशन यहाँ देखें: URL क्वेरी पैरामीटर कॉन्फ़िगरेशन
अतिरिक्त संसाधन (Additional Resources)
Section titled “अतिरिक्त संसाधन (Additional Resources)”- Shopify-to-CRM Integration की गाइड: Why Shopify-to-CRM Integration Is Always a Pain (and How to Handle It in 5 Minutes)
- Preventing Shopify Webhook Loss: Preventing Shopify Webhook Loss with API Proxy Queueing