Cloud Pub/Sub को सेट अप करना

आरबीएम एजेंट को CloudPub/Sub पर पब्लिश करने/सदस्यता लेने के ज़रिए मैसेज और इवेंट मिलते हैं. जब कोई व्यक्ति आपके एजेंट को मैसेज भेजता है या कोई इवेंट जनरेट करता है, तब उसका मैसेजिंग ऐप्लिकेशन आपके एजेंट की Pub/Sub सदस्यता को जानकारी भेजता है. इससे आपका एजेंट उस मैसेज या इवेंट को ऐक्सेस कर सकता है. मैसेज पाना देखें.

उपयोगकर्ता, एजेंट को मैसेज भेजता है

आपके एजेंट की Pub/Sub सदस्यता के टाइप से यह तय होता है कि आपके एजेंट को मैसेज कैसे मिलेंगे. इसलिए, आपको अपने एजेंट को मैसेज पाने से पहले, अपनी Pub/Sub सदस्यता कॉन्फ़िगर करनी होगी. आरबीएम एजेंट, pull और push सदस्यताओं, दोनों के साथ काम करते हैं.

पुल सदस्यता

पुल सदस्यता इस्तेमाल करके, आपका एजेंट Cloud Pub/Sub से संपर्क करता है और मैसेज, इवेंट, और दूसरे अनुरोध फ़ेच करता है.

ज़रूरी शर्तें

शुरू करने से पहले, आपको एक आरबीएम एजेंट की ज़रूरत होगी.

सेटअप

  1. Business Communications डेवलपर कंसोल खोलें. इसके बाद, अपने आरबीएम Google खाते से साइन इन करें और अपने एजेंट पर क्लिक करें.
  2. बाईं ओर मौजूद नेविगेशन में, इंटिग्रेशन पर क्लिक करें.
  3. सदस्यता में बदलाव करें पर क्लिक करें.
  4. खींचें चुनें. इसके बाद, सेव करें पर क्लिक करें.
  5. पुल सदस्यता का इस्तेमाल करने के लिए, अपने एजेंट को कॉन्फ़िगर करें:
    • अगर पुल सदस्यता के साथ सैंपल एजेंट का इस्तेमाल किया जाता है, तो सैंपल की README फ़ाइल में दिए गए निर्देशों का पालन करें.
    • अगर सैंपल एजेंट का इस्तेमाल नहीं किया जाता है, तो कोड के लिए Pull का इस्तेमाल करके मैसेज पाना देखें, ताकि आपका एजेंट पुल सदस्यता का इस्तेमाल कर सके. आपकी प्रोग्रामिंग भाषा के आधार पर, आपको अपने एजेंट के प्रोजेक्ट आईडी की ज़रूरत हो सकती है.

अपना प्रोजेक्ट आईडी ढूंढना

सदस्यता के कुछ तरीकों का इस्तेमाल करने के लिए, आपको अपने एजेंट का Google Cloud प्रोजेक्ट (GCP) प्रोजेक्ट आईडी तय करना होगा. आपके एजेंट का प्रोजेक्ट आईडी, project/ के बाद आने वाली पुल सदस्यता के नाम में एम्बेड किया गया है.

  1. Business Communications डेवलपर कंसोल खोलें. इसके बाद, अपने आरबीएम Google खाते से साइन इन करें और अपने एजेंट पर क्लिक करें.
  2. बाईं ओर मौजूद नेविगेशन में, इंटिग्रेशन पर क्लिक करें.
  3. अपने एजेंट की सदस्यता का नाम ढूंढें.
  4. project/ और नीचे दिए गए / के बीच के टेक्स्ट सेगमेंट का पता लगाएं. यह आपके एजेंट का प्रोजेक्ट आईडी है. उदाहरण के लिए, अगर सदस्यता का नाम projects/rbm-growing-tree-bank-nbdjkl6t/subscriptions/rbm-agent-subscription है, तो आपके एजेंट का प्रोजेक्ट आईडी rbm-growing-tree-bank-nbdjkl6t होगा.

C#

private async void InitPullMessages(string projectId, string jsonPath)
{
  GoogleCredential googleCredential = null;
  using (var jsonStream = new FileStream(jsonPath, FileMode.Open,
    FileAccess.Read, FileShare.Read))
  {
    googleCredential = GoogleCredential.FromStream(jsonStream)
      .CreateScoped(SubscriberServiceApiClient.DefaultScopes);
  }

  SubscriptionName subscriptionName = new SubscriptionName(projectId, subscriptionId);
  SubscriberClient subscriber = new SubscriberClientBuilder
  {
    SubscriptionName = subscriptionName,
    GoogleCredential = googleCredential

  }.Build();

  // setup listener for pubsub messages
  await subscriber.StartAsync(
    async (PubsubMessage message, CancellationToken cancel) =>
    {
      string text = System.Text.Encoding.UTF8.GetString(message.Data.ToArray());

      JObject jsonObject = JObject.Parse(jsonAsString);

      string userResponse = GetResponseText(jsonObject);
      string eventType = (string)jsonObject["eventType"];
    
      // check if the message is a user response message
      if ((userResponse.Length > 0) && (eventType == null))
      {
        string messageId = (string)jsonObject["messageId"];
        string msisdn = (string)jsonObject["senderPhoneNumber"];
        // let the user know their message has been read
        kitchenSinkBot.SendReadMessage(messageId, msisdn);
        HandleUserResponse(userResponse, msisdn);
      }
      await Console.Out.WriteLineAsync(
        $"Message {message.MessageId}: {jsonAsString}");
      return SubscriberClient.Reply.Ack;
    });
  }
}
यह कोड, आरबीएम के सैंपल एजेंट से लिया गया है.

पुश सदस्यता

पुश सदस्यता की मदद से, Cloud Pub/Sub मैसेज, इवेंट, और अन्य अनुरोधों को आपके बताए गए वेबहुक यूआरएल पर भेजता है.

ज़रूरी शर्तें

शुरू करने से पहले, आपको इनकी ज़रूरत होगी:

  • आरबीएम एजेंट
  • ऐसा लाइव वेबहुक एंडपॉइंट यूआरएल जो इसके साथ काम करता हो
    • मान्य एसएसएल सर्टिफ़िकेट वाला एचटीटीपीएस
    • POST अनुरोध
    • पुष्टि करने के अनुरोध के जवाब में पैरामीटर को इको करने की सुविधा

सेटअप

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

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

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

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

  7. कंसोल में, पुष्टि करें पर क्लिक करें.

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

  8. सेव करें पर क्लिक करें.

  9. अपने वेबहुक से मैसेज पाने के लिए, अपने एजेंट को कॉन्फ़िगर करें:

    • अगर पुश सदस्यता के साथ सैंपल एजेंट का इस्तेमाल किया जाता है, तो सैंपल की README फ़ाइल में दिए गए निर्देशों का पालन करें.
    • अगर किसी सैंपल एजेंट का इस्तेमाल नहीं किया जाता है, तो वेबहुक से अपने एजेंट तक मैसेज भेजने के लिए, अपना इन्फ़्रास्ट्रक्चर कॉन्फ़िगर करें.

Node.js

let requestBody = req.body;

if ((requestBody.hasOwnProperty('clientToken')) && (requestBody.hasOwnProperty('secret'))) {
  console.log('RBM webhook verification request');

  // Confirm that the clientToken is the one we are seeing in the RBM console
  if (requestBody.clientToken == CLIENT_TOKEN) {
    console.log('Tokens match, returning secret');
    res.status(200).send('secret: ' + requestBody.secret);
  }
  else {
    // Client tokens did not match - sending permission denied
    console.log('Tokens do not match');
    res.sendStatus(403);
  }
}

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

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

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

  1. मैसेज का X-Goog-Signature हेडर एक्सट्रैक्ट करें. यह मैसेज के मुख्य हिस्से के पेलोड की हैश की गई, base64-एन्कोडेड कॉपी है.
  2. अनुरोध के message.body एलिमेंट में मौजूद आरबीएम पेलोड को Base-64-डिकोड करें.
  3. अपने वेबहुक के क्लाइंट टोकन (जिसका इस्तेमाल आपने अपनी पुश सदस्यता सेट अप करते समय किया था) को कुंजी के तौर पर इस्तेमाल करके, base-64 डिकोड किए गए मैसेज पेलोड के बाइट का SHA512 HMAC बनाएं और नतीजे को 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);

अगले चरण

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