Webhook

मान लीजिए आप एक कपड़ों की ऑनलाइन दुकान चलाते हैं। हर बार जब आप कोई नया उत्पाद जोड़ते हैं, तो कुछ पीछे का काम होता है जिसे आपको खुद हर बार संभालना पड़ता है। जैसे उत्पाद के विवरण का दूसरी भाषा में अनुवाद कर रखना, या जोड़े जाने की सूचना कंपनी के मैसेंजर पर भेजना। इस तरह के पीछे के काम को हर बार हाथ से करने के बजाय, उत्पाद जोड़े जाने के क्षण ही बाहर मौजूद किसी प्रोग्राम को अपने-आप सूचित करके उससे करवाया जा सकता है। यही "कोई घटना होने पर पहले से तय की गई जगह को अपने-आप सूचना देने वाला साधन" Webhook है।

इसकी तुलना दुकान के दरवाज़े पर लगी घंटी से की जा सकती है। जब कोई ग्राहक दरवाज़ा खोलकर अंदर आता है (उत्पाद जोड़ा जाता है), तो घंटी अपने-आप बज जाती है, और अंदर मौजूद कर्मचारी (बाहरी प्रोग्राम) "ग्राहक आ गए" समझकर तुरंत काम पर लग जाता है। किसी को लगातार दरवाज़े के सामने नज़र रखने की ज़रूरत नहीं रहती। Webhook उसी घंटी की तरह, तय की गई घटना घटने के क्षण ही तय की गई क्रिया अपने-आप शुरू कर देता है।

इस पृष्ठ पर पहले हम देखेंगे कि Webhook क्या है और इसका उपयोग किन मामलों में होता है, फिर कपड़ों की दुकान के Space में एक Webhook खुद बनाकर देखेंगे।

Webhook क्या करता है

Webhook तीन बातें पहले से तय करने से बनता है।

  • कब: कौन-सी घटना होने पर प्रतिक्रिया देनी है, यह तय करते हैं। उदाहरण के लिए "उत्पाद (Content) नया जोड़ा जाने पर" तय किया जा सकता है।
  • क्या करना है: दो में से एक तय करते हैं। या तो बाहरी प्रोग्राम के इंटरनेट पते (URL) पर अनुरोध भेजते हैं, या Space के अंदर बनाई गई Script चलाते हैं।
  • चालू रखना है या बंद: इस Webhook को अभी चालू रखना है (Active) या कुछ देर के लिए बंद रखना है (Inactive), यह तय करते हैं। बंद रखने पर तय की गई घटना घटने पर भी कुछ नहीं होता।

तय की गई घटना सचमुच घटने पर, Webhook तय की गई क्रिया करता है। बाहरी पते पर भेजने की स्थिति में, अनुरोध में यह जानकारी जाती है कि क्या घटना घटी, किस उत्पाद में घटी, इत्यादि। अनुरोध पाने वाला बाहरी प्रोग्राम उस जानकारी को देखकर अपना काम करता है।

किन बदलावों पर अनुरोध भेजा जाता है

अनुरोध को बुलाने वाली "घटना" Space के अंदर के संसाधनों में होने वाला बदलाव है। उत्पाद जैसे Content, अपलोड की गई फ़ाइल यानी Media, और ढाँचा यानी Content Type में कुछ घटने पर आप चुन सकते हैं।

हर संसाधन के लिए चुने जा सकने वाले बदलाव इस प्रकार हैं।

बदलावकब घटता हैकपड़ों की दुकान का उदाहरण
Createनया बनाए जाने परनया उत्पाद जोड़ा गया
Saveसामग्री बदलकर सहेजने परउत्पाद का विवरण बदलकर सहेजा गया
Deleteहटाए जाने परबंद हो चुके उत्पाद को मिटाया गया
Publishप्रकाशित करके बाहर सार्वजनिक करने परउत्पाद को साइट पर सार्वजनिक किया गया
Unpublishप्रकाशन रद्द करने परस्टॉक खत्म उत्पाद को साइट से हटाया गया
Archiveसंग्रहित करने परपिछले सीज़न के उत्पाद को संग्रहित किया गया
Unarchiveसंग्रह से वापस लाने परसंग्रहित उत्पाद को फिर से सक्रिय किया गया

उदाहरण के लिए "हर बार उत्पाद नया जोड़े जाने पर अनुरोध भेजो" का मतलब है "उत्पाद (Content) का Create" चुनना।

एक Webhook में कई बदलाव एक साथ भी चुने जा सकते हैं। "उत्पाद जोड़े जाने पर" और "उत्पाद बदले जाने पर" दोनों चुनने पर, इनमें से कोई भी घटना घटे तो अनुरोध जाता है।

शर्त लगाकर दायरा घटाना

चुना गया बदलाव घटने पर भी हमेशा अनुरोध नहीं भेजना चाहते, ऐसा होता है। उदाहरण के लिए "हर Content नहीं, बल्कि 'उत्पाद' ढाँचे से बने Content के जुड़ने पर ही" सूचना चाहिए हो सकती है। ऐसे में फ़िल्टर लगाकर अनुरोध भेजने के मामलों का दायरा घटाते हैं।

एक फ़िल्टर "किसके आधार पर, कैसे तुलना करनी है" यह एक पंक्ति से बनता है। किसके आधार पर छानना है, यह चार में से चुनते हैं।

  • किस ढाँचे से बनाई गई वस्तु है: उदाहरण के लिए "उत्पाद" Content Type से बने Content पर ही अनुरोध भेजते हैं। यह सबसे ज़्यादा इस्तेमाल होने वाली शर्त है।
  • कोई एक खास वस्तु है: तय की गई उस एक वस्तु में घटे बदलाव पर ही अनुरोध भेजते हैं।
  • किसके द्वारा बनाई गई वस्तु है: किसी खास व्यक्ति द्वारा बनाई गई वस्तु पर ही अनुरोध भेजते हैं।
  • किसके द्वारा आखिरी बार बदली गई वस्तु है: किसी खास व्यक्ति द्वारा आखिरी बार बदली गई वस्तु पर ही अनुरोध भेजते हैं।

तुलना करने का तरीका भी साथ चुनते हैं। तय किए मान के बराबर होने पर ही, अलग होने पर ही, तय किए कई मानों में से किसी एक के अनुरूप होने पर ही, उनमें से किसी के भी अनुरूप न होने पर ही, या तय किए प्रारूप (पैटर्न) से मेल खाने या न खाने पर ही, इस तरह दायरा घटाया जा सकता है।

कंटेंट स्टूडियो की ट्रिगर सेटिंग में फ़िल्टर जोड़ें से शर्तें एक-एक पंक्ति करके जोड़ते हैं। कई फ़िल्टर लगाने पर उन सभी शर्तों को पूरा करने वाले मामले में ही अनुरोध जाता है, और एक भी न लगाने पर चुना गया बदलाव घटने पर हर बार अनुरोध जाता है।

बाहरी प्रोग्राम के मनचाहे रूप में भेजना

अलग से तय न करने पर, अनुरोध में बदलाव वाली वस्तु की जानकारी पूरी की पूरी भरकर जाती है। उदाहरण के लिए "स्टेनलेस टम्बलर 500ml" उत्पाद जोड़े जाने पर, अनुरोध में जाने वाली सामग्री लगभग इस रूप की होती है।

{
  "sys": { "id": "3trmXRM3RqbgSnifyg7OGhwhlqvAvq", "type": "Content" },
  "fields": {
    "productName": { "ko-KR": "스테인리스 텀블러 500ml" }
  }
}

(असल में इससे ज़्यादा जानकारी भरी जाती है, ऊपर तो केवल एक हिस्सा चुनकर दिखाया गया रूप है।) बाहरी प्रोग्राम इसमें से अपने ज़रूरी मान चुनकर इस्तेमाल कर सकता है। पर कुछ प्रोग्राम ऐसे होते हैं जिनका रूप तय होता है, "इसी रूप में ही लूँगा।" ऐसे में कंटेंट स्टूडियो की पेलोड में Webhook पेलोड को कस्टमाइज़ करें चुनकर, भेजने का रूप खुद लिख रखते हैं।

Webhook बनाने की स्क्रीन का हेडर और पेलोड क्षेत्र। अनुरोध बॉडी शामिल करें चालू करके और Webhook पेलोड को कस्टमाइज़ करें चुनकर, नीचे दिए JSON एडिटर में भेजने का रूप लिखते हैं

भेजने का रूप लिखते समय, ऊपर के डेटा से मान खींचकर रखने की जगह पर प्लेसहोल्डर का इस्तेमाल करते हैं। प्लेसहोल्डर { /payload/… } रूप का होता है। यहाँ payload ऊपर दिखाई गई उस पूरी वस्तु को इंगित करता है, और उसके बाद वाले पथ से मनचाहा मान ठीक-ठीक चुनते हैं।

  • { /payload/sys/id } → ऊपर के डेटा के sys के अंदर का id (उत्पाद का अद्वितीय नंबर)
  • { /payload/fields/productName/ko-KR }fields के अंदर productName का ko-KR (कोरियाई उत्पाद नाम)। fields/ के बाद Field की ID (उत्पाद नाम हो तो productName) और भाषा कोड (कोरियाई हो तो ko-KR) क्रम से लगाते हैं।

उदाहरण के लिए कोई अनुवाद प्रोग्राम कहे कि "अनुवाद करने का लेख और उत्पाद नंबर इस रूप में दो," तो पेलोड इस तरह लिखते हैं।

{
  "id": "{ /payload/sys/id }",
  "text": "{ /payload/fields/productName/ko-KR }"
}

तब टम्बलर उत्पाद के जोड़े जाने के क्षण, प्लेसहोल्डर असली मानों में बदलकर इस तरह भेजे जाते हैं।

{
  "id": "3trmXRM3RqbgSnifyg7OGhwhlqvAvq",
  "text": "스테인리스 텀블러 500ml"
}

वही प्लेसहोल्डर भेजने वाले पते (URL) या हेडर मान में भी डाला जा सकता है, और भेजने का तरीका (method) तथा रूप (JSON या फ़ॉर्म रूप) भी साथ चुना जा सकता है। इंगित किए गए पथ पर मान न हो तो वह जगह खाली मान बन जाती है।

बाहरी API key जैसे ऐसे मान जो दूसरों को नहीं दिखने चाहिए, उन्हें हेडर जोड़ते समय उनका टाइप Secret पर सेट कर रखते हैं। तब वह मान छिपाकर सहेजा जाता है और अंतिम उपयोगकर्ता को नहीं दिखता।

हेडर जोड़ते समय टाइप ड्रॉपडाउन खुला हुआ रूप। Secret · HTTP Basic Auth · Custom में से चुनते हैं

URL के बजाय Script चलाना

अब तक Webhook बाहरी पते (URL) पर अनुरोध भेजता रहा है। इसके बजाय, Webhook Space के अंदर बनाई गई Script को चला सकता है। Script एक ऐसा साधन है जो बाहर गए बिना Space के अंदर ही तय किए काम (संसाधन बनाना-बदलना, इत्यादि) कर देता है। जब आप बाहरी प्रोग्राम से गुज़रे बिना Space के अंदर ही पीछे का काम निपटाना चाहते हैं, तब यह तरीका इस्तेमाल करते हैं।

एक Webhook बाहरी पते पर भेजना और Script चलाना में से ठीक एक ही करता है। इसे बनाने की स्क्रीन के अनुरोध का लक्ष्य में तय करते हैं। URL दर्ज करें चुनने पर पहले की तरह पते पर अनुरोध भेजा जाता है, और इसके बजाय सूची में से कोई एक Script चुनने पर वह Script चलती है।

Script चुनने पर, वह Script किसकी पहचान से चलेगी यह तय करने वाला Run as भी साथ दिखाई देता है। दो में से एक चुनते हैं।

  • Webhook बनाने वाला(डिफ़ॉल्ट): चलने के दौरान बने या बदले गए किसी भी संसाधन का "बनाने वाला" Webhook बनाने वाले व्यक्ति के रूप में दर्ज होता है।
  • ट्रिगर करने वाला उपयोगकर्ता: उसे उस बदलाव को करने वाले उपयोगकर्ता के रूप में दर्ज किया जाता है।

यह सेटिंग सिर्फ़ संसाधनों पर छूटने वाला "किसने किया" चिह्न तय करती है; Script क्या कर सकती है, इसे यह न बढ़ाती है न घटाती है। Script क्या कर सकती है, इसका दायरा उस Script को बनाते समय ही तय हो जाता है।

असल में चुनने का क्रम इस प्रकार है।

  1. बनाने की स्क्रीन में अनुरोध का लक्ष्य दबाएँ।
  2. सूची में से चलाने वाली Script चुनें। URL दर्ज करें के बजाय Script चुनना है।
  3. Run as में पहचान चुनें। डिफ़ॉल्ट Webhook बनाने वाला है।

Webhook बनाने की स्क्रीन में अनुरोध का लक्ष्य के रूप में "उत्पाद विवरण भरना" Script चुनी हुई अवस्था। भरे हुए कॉल URL के साथ Run as में Webhook बनाने वाला·ट्रिगर करने वाला उपयोगकर्ता, ये दो विकल्प दिखाई देते हैं

Script क्या है और इसे कैसे बनाया जाता है, यह Script में बताया गया है।

कपड़ों की दुकान का Webhook बनाना

अब कपड़ों की दुकान के Space में एक Webhook बनाकर देखते हैं। यह "नया उत्पाद जोड़े जाने पर, पहले से तैयार बाहरी अनुवाद प्रोग्राम को उस बात की सूचना देता है" वाला Webhook है। अनुरोध पाने वाले बाहरी प्रोग्राम का पता https://example.com/translate मानते हैं।

  1. कपड़ों की दुकान के Space की सेटिंग में Webhook स्क्रीन खोलें।
  2. ऊपर दाईं ओर का बनाएं बटन दबाएँ।
  3. नाम के खाने में नई उत्पाद अनुवाद सूचना दर्ज करें। यह नाम बाद में पहचानने के लिए है कि यह कौन-सा Webhook है।
  4. अनुरोध भेजने वाला बदलाव तय करें। केवल किसी खास बदलाव पर भेजने के लिए विशिष्ट ट्रिगर घटनाएँ चुनें चुनकर मनचाहा बदलाव (यहाँ उत्पाद (Content) का Create) निर्दिष्ट करें, और हर बदलाव पर भेजने के लिए सभी घटनाओं के लिए ट्रिगर करें चुनें।
  5. URL के खाने में अनुरोध पाने वाले बाहरी प्रोग्राम का पता https://example.com/translate दर्ज करें।
  6. सक्रिय चालू रखने पर बनते ही अनुरोध भेजा जाता है (Active)। थोड़ी देर सिर्फ़ परीक्षण करना हो तो बंद रखें (Inactive)।
  7. बनाएं बटन दबाकर Webhook बनाएँ।

नया Webhook बनाने की स्क्रीन। नाम, सक्रिय, ट्रिगर चयन और URL भरे हुए रूप में

सूची में नई उत्पाद अनुवाद सूचना Active स्थिति में दिखाई दे, तो Webhook बन चुका है।

Webhook सूची में "नई उत्पाद अनुवाद सूचना" Active स्थिति में दिखने वाली स्क्रीन

बनाने के बाद कपड़ों की दुकान में सचमुच एक नया उत्पाद जोड़कर देखें। जोड़ने के क्षण Webhook लिख रखे पते पर अनुरोध भेजता है। अनुरोध ठीक से गया या नहीं, बाहरी प्रोग्राम ने कैसे जवाब दिया, यह Webhook के कॉल रिकॉर्ड में देखा जा सकता है।

चालू-बंद करना और बदलना

Webhook को बनाने के बाद भी कभी भी चालू-बंद किया जा सकता है। कुछ देर अनुरोध रोकना हो तो मिटाने के बजाय Inactive करके बंद रखें। बंद रहने के दौरान नया उत्पाद जोड़ने पर भी अनुरोध नहीं जाता। फिर से Active करने पर उसी क्षण से दोबारा अनुरोध भेजना शुरू होता है।

बनाए गए Webhook को दोबारा खोलने पर सक्रिय बंद या दोबारा चालू किया जा सकता है। नाम, अनुरोध भेजने का पता, बुलाने वाला बदलाव जैसी सामग्री भी बाद में बदली जा सकती है, और जो Webhook अब इस्तेमाल नहीं होता उसे मिटा सकते हैं।

आगे क्या करें

  • Content मॉडलिंग: Webhook जिस लक्ष्य पर अनुरोध बुलाता है, उस "उत्पाद" जैसे Content का ढाँचा बनाने का तरीका बताता है।
  • Content लिखना: असली उत्पाद जोड़कर Webhook के चलने की जाँच कर सकते हैं।
  • Script: Webhook URL के बजाय जिसे चला सकता है, Space के अंदर चलने वाले उस काम को बनाने का तरीका बताता है।
  • API रेफ़रेंस: Webhook को प्रोग्राम से सीधे बनाने और प्रबंधित करने में इस्तेमाल होने वाले अनुरोध-जवाब के रूप और Field विवरण को बताता है।