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.
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.
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.
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.