إعداد Cloud Pub/Sub

يتلقّى موظّفو دعم RBM الرسائل والأحداث من خلال علاقة نشر/اشتراك باستخدام خدمة Cloud Pub/Sub. عندما يرسل أحد المستخدمين رسالة إلى وكيلك أو ينشئ حدثًا، يُرسِل تطبيق المراسلة لديه هذه المعلومات إلى اشتراك Pub/Sub لوكيلك، حيث يمكن لوكيلك الوصول إلى الرسالة أو الحدث. يمكنك الاطّلاع على تلقّي الرسائل.

يرسل المستخدم رسالة إلى الوكيل.

يحدّد نوع اشتراك Pub/Sub لوكيلك كيفية تلقّي الوكيل للرسائل، لذلك عليك إعداد اشتراك Pub/Sub حتى يتمكّن الوكيل من تلقّي الرسائل. يتيح موظّفو دعم RBM استخدام كلٍّ من الاشتراكات pull وpush.

سحب الاشتراك

من خلال الاشتراك في ميزة السحب، يتواصل وكيلك مع Cloud Pub/Sub ويجلب الرسائل والأحداث والطلبات الأخرى.

المتطلبات الأساسية

قبل البدء، تحتاج إلى وكيل RBM.

ضبط إعدادات الجهاز

  1. افتح وحدة تحكم مطوّر برامج اتصالات الأعمال، وسجّل الدخول باستخدام حساب Google الخاص بـ RBM، ثم انقر على الوكيل.
  2. في شريط التنقّل الأيمن، انقر على عمليات الدمج.
  3. انقر على تعديل الاشتراك.
  4. اختَر سحب، ثم انقر على حفظ.
  5. اضبط الوكيل لاستخدام اشتراك السحب:

العثور على رقم تعريف مشروعك

تتطلّب منك بعض آليات الاشتراك تحديد رقم تعريف مشروع Google Cloud Project (GCP) لوكيلك. يتم تضمين رقم تعريف مشروع الوكيل الخاص بك في اسم الاشتراك القابل للسحب الذي يلي project/.

  1. افتح وحدة تحكم مطوّر برامج اتصالات الأعمال، وسجّل الدخول باستخدام حساب Google الخاص بـ RBM، ثم انقر على الوكيل.
  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;
    });
  }
}
هذا الرمز مقتطف من نموذج وكيل RBM.

اشتراك فوري

من خلال الاشتراك المدفوع، ترسل خدمة Cloud Pub/Sub الرسائل والأحداث والطلبات الأخرى إلى عنوان URL للردّ التلقائي على الويب الذي تحدّده.

المتطلبات الأساسية

قبل البدء، تحتاج إلى ما يلي:

  • وكيل RBM
  • عنوان URL لنقطة نهاية مباشرة للردّ التلقائي على الويب يتوافق مع
    • بروتوكول HTTPS يتضمّن شهادة طبقة مقابس آمنة (SSL) صالحة
    • POST طلب
    • يشير ذلك المصطلح إلى القدرة على بث مَعلمة استجابةً لطلب تحقّق.

ضبط إعدادات الجهاز

  1. افتح وحدة تحكم مطوّر برامج اتصالات الأعمال، وسجّل الدخول باستخدام حساب Google الخاص بـ RBM، ثم انقر على الوكيل.
  2. في شريط التنقّل الأيمن، انقر على عمليات الدمج.
  3. انقر على تعديل الاشتراك.
  4. اختَر إرسال.
  5. في عنوان URL لنقطة نهاية الردّ التلقائي على الويب، أدخِل عنوان URL للردّ التلقائي على الويب الذي يبدأ بـ "https://".
  6. اضبط الرد التلقائي على الويب لقبول طلب POST باستخدام مَعلمة clientToken المحدّدة وإرسال ردّ 200 OK بقيمة معلَمة secret.

    على سبيل المثال، إذا تلقّى الرد التلقائي على الويب طلب POST مع محتوى النص التالي

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

    يجب أن يؤكّد الرد التلقائي على الويب قيمة clientToken، وإذا كانت clientToken صحيحة، يجب عرض ردّ 200 OK بنص secret: 1234567890.

  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. فك ترميز حمولة RBM في العنصر message.body ضمن الطلب استنادًا إلى ترميز Base-64.
  3. باستخدام الرمز المميز للعميل الخاص بالردّ التلقائي على الويب (الذي حدّدته عند إعداد الاشتراك في Google Push) كمفتاح، أنشِئ خوارزمية SHA512 HMAC لوحدات البايت الخاصة بحمولة الرسالة الأساسية المفكوك ترميزها باستخدام base64 وترميز النتيجة 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، يمكن لوكيلك استلام الرسائل من أجهزتك التجريبية. يمكنك إرسال رسالة للتحقّق من صحة الإعداد.