RBM kampanyalarınızda çevrimdışı kullanıcılarla ilgilenme

Temsilcinizin mesajlarının teslimat süresini etkileyen önemli faktörlerden biri, temsilciniz mesaj gönderirken ulaşmaya çalıştığınız kullanıcının veri bağlantısı olup olmadığıdır. Kullanıcı çevrimdışıysa RBM platformu iletiyi depolar ve 30 güne kadar teslimat dener. Mesaj bu tarihe kadar teslim edilemezse sistemden kaldırılır.

Temsilciniz kullanıcıyla iletişime geçmeye çalışırken kullanıcının bağlantısı kesilebilir. Bunun birçok nedeni ve durumu vardır. Veri bağlantısını kapatmış olabilirlerdi Wi-Fi bağlantısı olmayan bir uçakta seyahat edebilecek. bir tünelde metroda yolculuğa çıkıyorlar. Mesajlarınızın teslim edilmesi gereken aciliyet derecesine bağlı olarak temsilcinizin, teslim edilmeyen RBM mesajlarını iptal ederek ve bu mesajları farklı bir kanal üzerinden yeniden yönlendirerek çevrimdışı kullanıcıları sorunsuz bir şekilde yönetmesi gerekir.

Aşağıdaki bölümlerde, bir Google Cloud Datastore (verilerinizi takip etmek için) ve teslim ettiğiniz iletilerin nasıl kullanılacağı, cron'un iptal et ve bu iletileri SMS aracılığıyla nasıl yeniden yönlendirebileceğiniz hakkında daha fazla bilgi edinin.

Gönderilen mesajları takip etme

RBM temsilciniz tarafından gönderilen her mesaj benzersiz bir mesaj kimliği içermelidir. Temsilcinizin gönderdiği mesajları takip etmek için her mesajın mesaj kimliğini, telefon numarasını ve zaman damgasını kaydetmeniz gerekir.

Bu bilgileri depolamak için Google Cloud Datastore da dahil olmak üzere çeşitli teknolojiler kullanabilirsiniz. Cloud Datastore, parçalama ve çoğaltma işlemlerini otomatik olarak gerçekleştiren, yüksek düzeyde ölçeklendirilebilen bir NoSQL veritabanıdır. Bir müşteri temsilcisi tarafından gönderilen mesajlar gibi ilişkisel olmayan verileri depolamak için mükemmel bir çözümdür. Cloud Datastore, etkin bir Google App Engine örneğine sahip olmanızı gerektirir. Bu nedenle, RBM aracınızı barındırmak ve bir cron işi yapılandırmak için App Engine'i kullanabilirsiniz.

Cloud Datastore için birçok dilde istemci kitaplıkları mevcuttur. Bu örnekte Node.js'i kullanabilir ve RBM aracısı kodunu RBM Geliştirici Web Sitesi'nde bulunan İlk Aracı Node.js Örneği'ne dayandırabilirsiniz. İlk başta, Node.js projem için Cloud Datastore'u kurmak için şu komutu kullanın:

npm install --save @google-cloud/datastore

Aracı kaynak kodunuzda Cloud Datastore istemcisine genel bir referans ekleyin kitaplığını açar.

// Imports the Google Cloud client library
const Datastore = require('@google-cloud/datastore');

// Creates a client
const datastore = new Datastore({
    projectId: PROJECT_ID,
});

Datastore nesnesi oluşturulduktan sonra, depoladığınız verileri saklamak için Her mesaj için msisdn, message id, sent time ve delivery durumları.

/**
 *   Records an entry in the Cloud Datastore to keep track of the
 *   messageIds sent to users and the delivery state.
 *
 *   @property {string} msisdn The user's phone number in E.164 format.
 *   @property {string} messageId The unique message identifier.
 *   @property {boolean} delivered True if message has been delivered.
 */
function saveMessage(msisdn, messageId, delivered) {
    const messageKey = datastore.key(['Message', messageId]);

    const dataForMessage = {
        key: messageKey,
        data: {
            id: messageId,
            msisdn: msisdn,
            lastUpdated: new Date().getTime(),
            delivered: delivered
        },
    };

    // Record that the message was sent.
    datastore
        .save(dataForMessage)
        .then(function() {
            console.log('saved message successfully');
        })
        .catch((err) => {
            console.error('ERROR:', err);
        });
}

Bu işlev etkinken temsilciniz her zaman kullanıcıya bir ileti gönderdiğinde RBM Node.js istemci kitaplığı RBM mesajları gönderdiğinde, kitaplık geri çağırma yönteminde kullanıcıya gönderilen mesajın messageId değerini içeren bir yanıt nesnesi sağlar.

Aşağıda, bir kullanıcıya düz kısa mesaj gönderme ve kaydı kaydetmeyle ilgili bir örnek verilmiştir. RBM API ile başarılı bir şekilde iletişim kurulduktan sonra mesaj bilgileri.

let params = {
    messageText: 'Hello, World!',
    msisdn:'+12223334444',
};

// Send "Hello, World!" to the user.
rbmApiHelper.sendMessage(params,
function(response) {
    // Extract the message ID from the response
    let messageId = response.config.params.messageId;

    // Store the sent state in the Datastore
    saveMessage(phoneNumber, messageId, false);
});

Kodu çalıştırdıktan sonra Google Cloud Console'daki Datastore Varlıkları görünümünde Datastore'u inceleyebilirsiniz.

Datastore

Mesajların teslimat durumunu güncelleme

Artık temsilciniz gönderilen mesaj isteklerini Datastore'da depoladığına göre Mesaj kullanıcının cihazına başarıyla teslim edildikten sonra.

Kullanıcıların cihazlar RBM aracılarına DELIVERED, READ ve IS_TYPING etkinliklerini gönderiyor Cloud Pub/Sub üzerinden erişilebilir. Pub/Sub işleyicisinde, yayınlanmış etkinlikleri kontrol edin ve yayınlandı işaretinin Veri Deposu ayarını true olarak güncelleyin.

/**
 *   Uses the event received by the Pub/Sub subscription to send a
 *   response to the client's device.
 *   @param {object} userEvent The JSON object of a message
 *   received by the subscription.
 */
function handleMessage(userEvent) {
    if (userEvent.senderPhoneNumber != undefined) {
        let msisdn = userEvent.senderPhoneNumber;
        let messageId = userEvent.messageId;
        let eventType = userEvent.eventType;

        if(eventType === 'DELIVERED') {
            saveMessage(msisdn, messageId, true);
        }

        // TODO: Process message and create RBM response
    }
}

Aracı, Datastore'a giden mesajları kaydeder ve işlem tamamlandığında verileri günceller. bir teslim bildirimi alır. Sonraki bölümde, teslim edilmeyen mesajları izlemek için Google'ın App Engine'inde 10 dakikada bir çalışacak bir cron işinin nasıl ayarlanacağını görebilirsiniz.

Google App Engine'de Cron

Görevleri farklı aralıklarda planlamak için cron işlerini kullanabilirsiniz. Google App Engine'da cron işleri açıklama, URL ve aralık ile yapılandırılır.

Node.js uygulamalarında bunları bir cron.yaml dosyasında yapılandırırsınız. Bu dosyayı Google Cloud SDK'sını kullanarak App Engine'e dağıtabilirsiniz. Şunları kullanarak işleri planlama: cron.yaml.

Cron görevinin bir URL'ye ihtiyacı olduğundan, cron tarafından çağrılması için Express uygulama yönlendiricisine bir URL uç noktası eklemeniz gerekir. Bu webhook, Eski mesajlar için Datastore, RBM platformundan silme ve gönderme kullanıcıya SMS ile gönderebilirsiniz.

router.get('/expireMessages', function(req, res, next) {
    // TOOD: Query the Datastore for undelivered messages,
    // remove them from the RBM platform, and send them over SMS

    res.status(200).send();
});

Bu uç noktayı 10 dakikada bir çalıştırmak için cron.yaml dosyası yapılandırması aşağıda verilmiştir.

cron:
-   description: "Processing expired RBM messages"
  url: /expireMessages
  schedule: every 10 mins

Cron görevlerini App Engine'e dağıtmak için aşağıdaki komutu çalıştırın:

gcloud app deploy cron.yaml

Dağıtımdan sonra App Engine, cron görevini otomatik olarak yapılandırır ve görev App Engine > Cron işleri bölümünde görüntülenebilir.

cron işleri

Teslim edilmemiş mesajlar için Datastore'u sorgulama

Önceki bölümde ayarladığınız cron işinin webhook'unda delivered durumu "false" olan tüm gönderilen iletileri arama mantığı önceden tanımlanmış bir zaman aşımından lastUpdated süre daha eski olan bir anlam ifade eder. Bu örnekte, bir saatten daha eski iletilerin süresi dolar.

Bunun gibi bir birleşik sorguyu desteklemek için Datastore'un hem delivered hem de lastUpdated özelliklerini içeren bileşik dizin. Bunu yapmak için projenizde aşağıdaki bilgileri içeren index.yaml adlı bir dosya oluşturabilirsiniz:

indexes:
-   kind: Message
  properties:
  -   name: delivered
    direction: asc
  -   name: lastUpdated
    direction: desc

Daha önce tanımladığınız cron işini dağıtmaya benzer şekilde, Google Cloud Aşağıdaki komutla tanımladığınız birleşik dizini dağıtacak SDK'yı kullanın:

gcloud datastore create-indexes index.yaml

App Engine, dağıtımdan sonra dizini ve dizini otomatik olarak yapılandırır. Datastore > Dizinler.

Datastore Dizinleri

Dizin tanımlandıktan sonra cron için oluşturduğunuz webhook'a geri dönebilirsiniz işlemini tamamlayın ve mesajın geçerlilik süresi mantığını tamamlayın:

router.get('/expireMessages', function(req, res, next) {
    // Milliseconds in an hour
    const TIMEOUT = 3600000;

    // Threshold is current time minus one hour
    const OLD_MESSAGE_THRESHOLD = new Date().getTime() - TIMEOUT;

    // Create a query to find old undelivered messages
    const query = datastore
        .createQuery('Message')
        .filter('delivered', '=', false)
        .filter('lastUpdated', '<', OLD_MESSAGE_THRESHOLD);

    // Execute the query
    datastore.runQuery(query).then((results) => {
        for(var i = 0; i < results[0].length; i++) {
            let msisdn = results[0][i].msisdn;
            let messageId = results[0][i].id;

            // Stop the message from being sent
            rbmApiHelper.revokeMessage(msisdn, messageId);

            // Remove the message from the Datastore
            datastore.delete(results[0][i][datastore.KEY]);

            // TODO: Send the user the message as SMS
        }
    });

    res.status(200).send();
});

RBM, SMS yedekleme özelliğini doğal olarak desteklemez. Bu nedenle, teslim edilmeyen mesajlarınızı SMS üzerinden göndermek için mantığı uygulamanız gerekir.

Özet ve özet

Çevrimdışı kullanıcıları işlemek için teslim edilmeyen RBM mesajları için iptal mantığı oluşturabilirsiniz. Mesajın süresi dolmadan önce harcayacağınız süre şunlara bağlıdır: ne kadar zaman hassasiyetine sahip olduğu. Zamana duyarlı kullanıyorsanız önerilen zaman aşımı süresi iki saatten kısadır.

Bu örnekte, depolama, sorgu ve iptal sürecini yönetmek için Cloud Datastore ve Google App Engine kullanılmaktadır ancak gönderilen ve teslim edilen mesajlarınızı takip etmek için kullanabileceğiniz herhangi bir depolama mekanizması işe yarayacaktır.

İyi şanslar ve keyifli kodlamalar dileriz.