वेबहुक

वेबहुक, पार्टनर का तय किया गया यूआरएल होता है. यहां RBM प्लैटफ़ॉर्म, मैसेज और इवेंट पोस्ट करता है. यह यूआरएल, एंडपॉइंट के तौर पर काम करता है. इसमें इवेंट का डेटा शामिल होता है. इसका मतलब है कि डेटा को एचटीटीपीएस के ज़रिए, आपके ऐप्लिकेशन पर सुरक्षित तरीके से भेजा जाता है.

वेबहुक यूआरएल कुछ ऐसा दिख सकता है: https://[your company name].com/api/rbm-events. वेबहुक कॉन्फ़िगर करने के बाद, आपको मैसेज और इवेंट मिलना शुरू हो जाएंगे.

पार्टनर वेबहुक और एजेंट वेबहुक

वेबहुक को पार्टनर लेवल या एजेंट लेवल पर कॉन्फ़िगर किया जा सकता है.

  • आपका पार्टनर वेबहुक, आपके हर एजेंट पर लागू होता है. अगर आपके सभी एजेंट एक जैसे हैं या आपके पास सिर्फ़ एक एजेंट है, तो पार्टनर वेबहुक का इस्तेमाल करें.
  • एजेंट वेबहुक, हर एजेंट पर लागू होते हैं. अगर अलग-अलग व्यवहार वाले कई एजेंट इस्तेमाल किए जा रहे हैं, तो हर एजेंट के लिए एक अलग वेबहुक सेट किया जा सकता है.

अगर आपने पार्टनर वेबहुक और एजेंट वेबहुक, दोनों को कॉन्फ़िगर किया है, तो एजेंट वेबहुक को अपने एजेंट पर प्राथमिकता दी जाती है. वहीं, पार्टनर वेबहुक उन सभी एजेंट पर लागू होता है जिनके पास अपना वेबहुक नहीं होता.

एजेंट वेबहुक कॉन्फ़िगर करना

आपको अपने पार्टनर वेबहुक पर, अपने एजेंट को भेजे गए मैसेज मिलते हैं. अगर आपको किसी खास एजेंट के मैसेज किसी दूसरे वेबहुक पर चाहिए, तो एजेंट वेबहुक सेट करें.

  1. Business Communications डेवलपर कंसोल खोलें और अपने आरबीएम पार्टनर के Google खाते से साइन इन करें.
  2. अपने एजेंट पर क्लिक करें.
  3. इंटिग्रेशन पर क्लिक करें.
  4. वेबहुक के लिए, कॉन्फ़िगर करें पर क्लिक करें.
  5. वेबहुक एंडपॉइंट यूआरएल के लिए, "https://" से शुरू होने वाला अपना वेबहुक यूआरएल डालें.
  6. अपनी clientToken वैल्यू नोट करें. आपको इसकी ज़रूरत, यह पुष्टि करने के लिए है कि आपको मिलने वाले मैसेज, Google से आ रहे हैं.
  7. अपने वेबहुक को, बताए गए clientToken पैरामीटर के साथ POST अनुरोध स्वीकार करने के लिए कॉन्फ़िगर करें. साथ ही, जवाब के मुख्य हिस्से के तौर पर secret पैरामीटर की सादे टेक्स्ट वैल्यू के साथ 200 OK जवाब भेजें.

    उदाहरण के लिए, अगर आपके वेबहुक को POST अनुरोध मिलता है, जिसमें बॉडी का यह कॉन्टेंट है

    {
      "clientToken":"SJENCPGJESMGUFPY",
      "secret":"1234567890"
    }
    

    तो आपका वेबहुक, clientToken वैल्यू की पुष्टि करेगा. अगर clientToken सही है, तो रिस्पॉन्स बॉडी के तौर पर 1234567890 के साथ 200 OK रिस्पॉन्स दिखाएगा:

    // clientToken from Configure
    const myClientToken = "SJENCPGJESMGUFPY";
    
    // Example endpoint
    app.post("/rbm-webhook", (req, res) => {
      const msg = req.body;
      if (msg.clientToken === myClientToken) {
          res.status(200).send(msg.secret);
          return;
      }
      res.send(400);
    });
    
  8. Developers Console में, पुष्टि करें पर क्लिक करें. RBM आपके वेबहुक की पुष्टि करने के बाद, डायलॉग बंद हो जाता है.

आने वाले मैसेज की पुष्टि करना

webhooks को किसी भी व्यक्ति या कंपनी से मैसेज मिल सकते हैं. इसलिए, मैसेज के कॉन्टेंट को प्रोसेस करने से पहले, आपको यह पुष्टि करनी चाहिए कि मैसेज Google ने भेजे हैं.

यह पुष्टि करने के लिए कि आपको Google से मिला मैसेज, Google ने ही भेजा है, यह तरीका अपनाएं:

  1. मैसेज का X-Goog-Signature हेडर निकालें. यह मैसेज के मुख्य हिस्से के पेलोड की हैश की गई और base64 कोड में बदली गई कॉपी है.
  2. अनुरोध के message.body एलिमेंट में मौजूद RBM पेलोड को Base-64-decode करें.
  3. अपने वेबहुक के क्लाइंट टोकन (जिसे आपने वेबहुक सेट अप करते समय बताया था) को पासकोड के तौर पर इस्तेमाल करके, base-64 डिकोड किए गए मैसेज पेलोड के बाइट का SHA512 एचएमएसी बनाएं और नतीजे को base64-कोड में बदलें.
  4. X-Goog-Signature हैश की तुलना, आपके बनाए गए हैश से करें.
    • अगर हैश मैच करते हैं, तो इसका मतलब है कि Google ने मैसेज भेजा है.
    • अगर हैश मैच नहीं होते हैं, तो किसी ऐसे मैसेज पर हैश करने की प्रोसेस की जांच करें जिसकी पुष्टि हो चुकी हो.

      अगर हैश करने की प्रोसेस सही तरीके से काम कर रही है और आपको ऐसा मैसेज मिलता है जिसे आपके हिसाब से धोखाधड़ी के मकसद से भेजा गया है, तो हमसे संपर्क करें.

Node.js

  if ((requestBody.hasOwnProperty('message')) && (requestBody.message.hasOwnProperty('data'))) {
    // Validate the received hash to ensure the message came from Google RBM
    let userEventString = Buffer.from(requestBody.message.data, 'base64');
    let hmac = crypto.createHmac('sha512', CLIENT_TOKEN);
    let data = hmac.update(userEventString);
    let genHash = data.digest('base64');
    let headerHash = req.header('X-Goog-Signature');

    if (headerHash === genHash) {
      let userEvent = JSON.parse(userEventString);

      console.log('userEventString: ' + userEventString);
      handleMessage(userEvent);
    } else {
      console.log('hash mismatch - ignoring message');
    }
  }

  res.sendStatus(200);
  

मैसेज मैनेज करना

अगर वेबहुक से 200 OK के अलावा कोई और वैल्यू मिलती है, तो इसे डिलीवरी न होने के तौर पर माना जाता है.

डेवलपर को ध्यान रखना चाहिए कि ज़्यादा दर से मैसेज भेजने पर, ज़्यादा दर से वेबहुक सूचनाएं जनरेट होंगी. साथ ही, उन्हें अपना कोड इस तरह से डिज़ाइन करना चाहिए कि वे सूचनाओं को उम्मीद के मुताबिक दर से इस्तेमाल कर सकें. यह ज़रूरी है कि डेवलपर उन स्थितियों को ध्यान में रखें जिनकी वजह से गड़बड़ी के जवाब मिल सकते हैं. इनमें, 500 उनके वेब कंटेनर से मिले जवाब, टाइम आउट या अपस्ट्रीम गड़बड़ियां शामिल हैं. इन बातों का ध्यान रखें:

  • पक्का करें कि डीडीओएस से सुरक्षा देने वाली सुविधाएं, वेबहुक सूचनाओं की अनुमानित दर को मैनेज करने के लिए कॉन्फ़िगर की गई हों.
  • पक्का करें कि डेटाबेस कनेक्शन पूल जैसे संसाधन खत्म न हों और समयसीमा खत्म होने या 500 जवाब मिलने जैसी समस्याएं न हों.

डिलीवरी न होने पर क्या होगा

जब RBM को वेबहुक कॉल से 200 OK के अलावा कोई दूसरा जवाब मिलता है, तो वह बैकऑफ़ और फिर से कोशिश करने के तरीके का इस्तेमाल करता है. आरबीएम, फिर से कोशिश करने के बीच के समय को ज़्यादा से ज़्यादा 600 सेकंड तक बढ़ा देगा. मैसेज भेजने की कोशिश सात दिनों तक की जाएगी. इसके बाद, मैसेज को ड्रॉप कर दिया जाएगा.

एजेंट-लेवल वेबहुक के असर

आरबीएम, किसी पार्टनर के मैसेज को एक कतार में डालता है. अगर कोई पार्टनर एजेंट-लेवल के वेबहुक का इस्तेमाल कर रहा है, तो यह ध्यान रखना ज़रूरी है कि किसी एक वेबहुक के काम न करने से, दूसरे वेबहुक पर डिलीवरी पर असर पड़ेगा. किसी मैसेज के भेजे न जाने के बाद, बैकऑफ़ पीरियड के दौरान, दूसरे एजेंट के वेबहुक को कॉल किया जाएगा. हालांकि, डिलीवर न हो पाने वाले मैसेज फिर से भेजने के लिए लाइन में लग जाएंगे. इससे, डिलीवरी की कुल दरें कम हो जाएंगी और दूसरे एजेंट पर असर पड़ेगा.

यह ज़रूरी है कि डेवलपर इस मॉडल को समझें और उसी हिसाब से कोड लिखें. जहां तक हो सके, मैसेज स्वीकार करें और उन्हें प्रोसेस करने के लिए लाइन में लगाएं, ताकि गड़बड़ी होने की संभावना कम हो.

अगले चरण

वेबहुक कॉन्फ़िगर करने के बाद, आपके एजेंट को आपके टेस्ट डिवाइसों से मैसेज मिल सकते हैं. अपने सेटअप की पुष्टि करने के लिए, मैसेज भेजें.