Cloud Pub/Sub'ı ayarlama

RBM temsilcileri, mesajları ve etkinlikleri Cloud Pub/Sub ile bir yayınlama/abone olma ilişkisi üzerinden alır. Bir kullanıcı temsilcinize mesaj gönderdiğinde veya bir etkinlik oluşturduğunda, mesajlaşma uygulaması bu bilgileri temsilcinizin Pub/Sub aboneliğine gönderir. Burada temsilciniz mesaja ya da etkinliğe erişebilir. Mesaj alma bölümüne bakın.

Kullanıcı, temsilciye ileti gönderir

Temsilcinizin Pub/Sub abonelik türü, aracınızın mesajları nasıl alacağını belirler. Bu nedenle aracınızın mesajları alabilmesi için önce Pub/Sub aboneliğinizi yapılandırmanız gerekir. RBM müşteri temsilcileri hem pull hem de push aboneliklerini destekler.

Aboneliği al

Pull aboneliğiyle, aracınız Cloud Pub/Sub ile iletişim kurar ve mesajları, etkinlikleri ve diğer istekleri getirir.

Ön koşullar

Başlamadan önce bir RBM temsilcisine ihtiyacınız vardır.

Kurulum

  1. İş İletişimi Geliştirici Konsolu'nu açın, RBM Google Hesabınızla oturum açın ve temsilcinizi tıklayın.
  2. Soldaki gezinme panelinde Integrations'ı (Entegrasyonlar) tıklayın.
  3. Aboneliği düzenle'yi tıklayın.
  4. Pull'u seçin ve ardından Save'i (Kaydet) tıklayın.
  5. Temsilcinizi pull aboneliğini kullanacak şekilde yapılandırın:
    • Pull aboneliğiyle bir örnek aracı kullanıyorsanız örneğin BENİOKU dosyasındaki talimatları uygulayın.
    • Örnek aracı kullanmıyorsanız temsilcinizin pull aboneliğini kullanmasını sağlamak için kod için Pull kullanarak mesaj alma bölümüne bakın. Programlama dilinize bağlı olarak temsilcinizin proje kimliğine ihtiyacınız olabilir.

Proje kimliğinizi bulma

Bazı pull abonelik mekanizmaları aracınızın Google Cloud Project (GCP) proje kimliğini belirtmenizi gerektirir. Aracınızın proje kimliği, project/ ifadesini izleyen pull abonelik adına yerleştirilmiştir.

  1. İş İletişimi Geliştirici Konsolu'nu açın, RBM Google Hesabınızla oturum açın ve temsilcinizi tıklayın.
  2. Soldaki gezinme panelinde Integrations'ı (Entegrasyonlar) tıklayın.
  3. Temsilcinizin Abonelik adını bulun.
  4. project/ ile sonraki / arasındaki metin segmentini bulun. Bu, temsilcinizin proje kimliğidir. Örneğin, abonelik adı projects/rbm-growing-tree-bank-nbdjkl6t/subscriptions/rbm-agent-subscription ise temsilcinizin proje kimliği rbm-growing-tree-bank-nbdjkl6t olur.

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;
    });
  }
}
Bu kod, bir RBM örnek aracısından alıntıdır.

Push aboneliği

Push aboneliği sayesinde Cloud Pub/Sub; mesajları, etkinlikleri ve diğer istekleri belirttiğiniz bir webhook URL'sine aktarır.

Ön koşullar

Başlamadan önce şunlara ihtiyacınız vardır:

  • RBM temsilcisi
  • Aşağıdakileri destekleyen bir canlı webhook uç nokta URL'si:
    • Geçerli bir SSL sertifikasıyla HTTPS
    • POST istekleri
    • Doğrulama isteğine yanıt olarak bir parametreyi yansıtma özelliği

Kurulum

  1. İş İletişimi Geliştirici Konsolu'nu açın, RBM Google Hesabınızla oturum açın ve temsilcinizi tıklayın.
  2. Soldaki gezinme panelinde Integrations'ı (Entegrasyonlar) tıklayın.
  3. Aboneliği düzenle'yi tıklayın.
  4. Aktar'ı seçin.
  5. Webhook uç nokta URL'si için webhook'unuzun "https://" ile başlayan URL'sini girin.
  6. Webhook'unuzu belirtilen clientToken parametresiyle bir POST isteğini kabul edecek ve secret parametresi değerini içeren bir 200 OK yanıtı gönderecek şekilde yapılandırın.

    Örneğin, webhook'unuz aşağıdaki gövde içeriğiyle birlikte bir POST isteği alırsa:

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

    webhook'unuz clientToken değerini onaylamalı ve clientToken doğruysa secret: 1234567890 gövdesine sahip bir 200 OK yanıtı döndürmelidir.

  7. Konsolda Doğrula'yı tıklayın.

    RBM platformu webhook'unuzu doğruladığında Webhook'unuzu yapılandırın iletişim kutusu kapanır.

  8. Kaydet'i tıklayın.

  9. Temsilcinizi webhook'unuzdan mesaj alacak şekilde yapılandırın:

    • Push aboneliğine sahip bir örnek aracı kullanıyorsanız örneğin BENİOKU dosyasındaki talimatları uygulayın.
    • Örnek aracı kullanmıyorsanız altyapınızı, mesajları webhook'unuzdan aracınıza iletecek şekilde yapılandırın.

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);
  }
}

Gelen iletileri doğrulama

Webhook'lar herhangi bir gönderenden mesaj alabildiğinden, Google'ın mesaj içeriğini işlemeden önce gelen mesajları gönderdiğini doğrulamanız gerekir.

Aldığınız iletinin Google tarafından gönderildiğini doğrulamak için aşağıdaki adımları uygulayın:

  1. İletinin X-Goog-Signature üstbilgisini çıkarın. Bu, mesaj gövdesi yükünün karma ve base64 kodlu bir kopyasıdır.
  2. İsteğin message.body öğesinde RBM yükünün Base-64 kodunu çöz.
  3. Webhook'unuzun istemci jetonunu (push aboneliğinizi oluştururken belirttiğiniz) anahtar olarak kullanarak base 64 kodu çözülmüş mesaj yükünün baytları için bir SHA512 HMAC oluşturun ve sonucu base64 ile kodlayın.
  4. X-Goog-Signature karmasını, oluşturduğunuz karma ile karşılaştırın.
    • Karma değerleri eşleşiyorsa mesajın Google tarafından gönderildiğini onaylamış olursunuz.
    • Karmalar eşleşmiyorsa bilinen iyi bir mesajla ilgili karma oluşturma işleminizi kontrol edin.

      Karma oluşturma işleminiz düzgün çalışıyorsa ve size hileli bir şekilde gönderildiğini düşündüğünüz bir mesaj alırsanız bize ulaşın.

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);

Sonraki adımlar

Aboneliğinizi yapılandırdıktan ve aracınızı Cloud Pub/Sub ile iletişim kuracak şekilde ayarladıktan sonra, temsilciniz test cihazlarınızdan mesaj alabilir. Kurulumunuzu doğrulamak için mesaj gönderin.