Cloud Pub/Sub را راه اندازی کنید

عوامل RBM پیام‌ها و رویدادها را از طریق یک رابطه انتشار/اشتراک با Cloud Pub/Sub دریافت می‌کنند. وقتی کاربر پیامی برای نماینده شما ارسال می‌کند یا رویدادی را ایجاد می‌کند، برنامه پیام‌رسانی او اطلاعات را به اشتراک Pub/Sub نماینده شما می‌فرستد، جایی که نماینده شما می‌تواند به پیام یا رویداد دسترسی داشته باشد. به دریافت پیام مراجعه کنید.

کاربر پیامی را برای نماینده ارسال می کند

نوع اشتراک Pub/Sub نماینده شما تعیین می‌کند که نماینده شما چگونه پیام‌ها را دریافت کند، بنابراین باید قبل از اینکه نماینده شما بتواند پیام‌ها را دریافت کند، اشتراک Pub/Sub خود را پیکربندی کنید. عوامل RBM از اشتراک‌های کششی و فشاری پشتیبانی می‌کنند.

اشتراک را بکشید

با یک اشتراک کششی، نماینده شما با Cloud Pub/Sub تماس می گیرد و پیام ها، رویدادها و سایر درخواست ها را واکشی می کند.

پیش نیازها

قبل از شروع، به یک عامل RBM نیاز دارید.

برپایی

  1. کنسول توسعه‌دهنده Business Communications را باز کنید، با حساب Google RBM خود وارد شوید و روی نماینده خود کلیک کنید.
  2. در پیمایش سمت چپ، روی Integrations کلیک کنید.
  3. روی ویرایش اشتراک کلیک کنید.
  4. Pull را انتخاب کنید، سپس روی Save کلیک کنید.
  5. نماینده خود را برای استفاده از اشتراک کشش پیکربندی کنید:
    • اگر از یک عامل نمونه با اشتراک کشش استفاده می‌کنید، دستورالعمل‌های موجود در فایل README نمونه را دنبال کنید.
    • اگر از یک نماینده نمونه استفاده نمی‌کنید، به دریافت پیام‌ها با استفاده از Pull for code مراجعه کنید تا نماینده شما بتواند از اشتراک pull استفاده کند. بسته به زبان برنامه نویسی خود، ممکن است به شناسه پروژه نماینده خود نیاز داشته باشید.

شناسه پروژه خود را پیدا کنید

برخی از مکانیسم‌های اشتراک کششی از شما می‌خواهند شناسه پروژه Google Cloud Project (GCP) نماینده خود را مشخص کنید. شناسه پروژه نماینده شما در نام اشتراک pull زیر project/ .

  1. کنسول توسعه‌دهنده Business Communications را باز کنید، با حساب Google RBM خود وارد شوید و روی نماینده خود کلیک کنید.
  2. در پیمایش سمت چپ، روی Integrations کلیک کنید.
  3. نام اشتراک نماینده خود را پیدا کنید.
  4. قسمت متن بین project/ و زیر / را پیدا کنید. این شناسه پروژه نماینده شما است. برای مثال، اگر نام اشتراک projects/rbm-growing-tree-bank-nbdjkl6t/subscriptions/rbm-agent-subscription باشد، شناسه پروژه نماینده شما rbm-growing-tree-bank-nbdjkl6t است.

سی شارپ

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 است.

اشتراک پوش

با اشتراک push، Cloud Pub/Sub پیام‌ها، رویدادها و سایر درخواست‌ها را به URL وبی هوکی که شما مشخص کرده‌اید ارسال می‌کند.

پیش نیازها

قبل از شروع به موارد زیر نیاز دارید:

  • یک عامل RBM
  • URL نقطه پایانی وب هوک زنده که پشتیبانی می کند
    • HTTPS با گواهینامه SSL معتبر
    • درخواست های POST
    • قابلیت اکو یک پارامتر در پاسخ به درخواست اعتبارسنجی

برپایی

  1. کنسول توسعه‌دهنده Business Communications را باز کنید، با حساب Google RBM خود وارد شوید و روی نماینده خود کلیک کنید.
  2. در پیمایش سمت چپ، روی Integrations کلیک کنید.
  3. روی ویرایش اشتراک کلیک کنید.
  4. Push را انتخاب کنید.
  5. برای URL نقطه پایانی Webhook ، نشانی اینترنتی وب هوک خود را وارد کنید که با "https://" شروع می شود.
  6. وب هوک خود را طوری پیکربندی کنید که درخواست POST با پارامتر clientToken مشخص شده بپذیرد و یک پاسخ 200 OK با مقدار پارامتر secret ارسال کند.

    به عنوان مثال، اگر وب هوک شما یک درخواست POST با محتوای بدنه زیر دریافت کند

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

    وب هوک شما باید مقدار clientToken را تایید کند و اگر clientToken درست باشد، یک پاسخ 200 OK با متن secret: 1234567890 .

  7. در کنسول، روی تأیید کلیک کنید.

    هنگامی که پلت فرم RBM وب هوک شما را تأیید می کند، کادر گفتگوی Configure your webhook بسته می شود.

  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. Base-64-بارگذاری RBM را در عنصر message.body درخواست رمزگشایی کنید.
  3. با استفاده از رمز مشتری وب هوک خود (که هنگام تنظیم اشتراک فشار خود مشخص کردید) به عنوان یک کلید، یک SHA512 HMAC از بایت‌های بار پیام رمزگشایی شده base-64 ایجاد کنید و نتیجه را در 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 تنظیم کردید، نماینده شما می‌تواند پیام‌هایی را از دستگاه‌های آزمایشی شما دریافت کند. برای تایید تنظیمات خود پیامی ارسال کنید .