Umgang mit Offlinenutzern in RBM-Kampagnen

Ein wesentlicher Faktor bei der Zustellung von Nachrichten an Ihren Agent ist, ob die Der Nutzer, den Sie erreichen möchten, hat zum Zeitpunkt Ihres Agents eine Datenverbindung. sendet eine Nachricht. Wenn der Nutzer offline ist, speichert die RBM-Plattform die Nachricht und versucht, sie bis zu 30 Tage lang zuzustellen. Wenn die Nachricht bis dahin nicht zugestellt werden kann, wird es aus dem System entfernt.

Es gibt viele Gründe und Situationen, in denen ein Nutzer möglicherweise keine Verbindung hat, wenn dein Kundenservicemitarbeiter versucht, ihn zu kontaktieren. Daten deaktiviert haben um Geld bei ihrem Mobilfunktarif zu sparen, könnte sie im Flugzeug ohne WLAN arbeiten. oder sind in einer U-Bahn in einem Tunnel. Je nachdem, wie dringend Ihre Nachrichten zugestellt werden müssen, muss Ihr Kundenservicemitarbeiter Offlinenutzer ordnungsgemäß behandeln, indem er nicht zugestellte RBM-Nachrichten zurückzieht und diese Nachrichten über einen anderen Kanal weiterleitet.

In den folgenden Abschnitten erfahren Sie, wie Sie mit einem Google Cloud Datastore den Überblick über gesendete und zugestellte Nachrichten behalten, wie Sie mit Cron nicht zugestellte Nachrichten widerrufen und wie Sie diese Nachrichten per SMS weiterleiten.

Gesendete Nachrichten im Blick behalten

Jede Nachricht, die von Ihrem RBM-Agent gesendet wird, muss eine eindeutige Nachrichten-ID enthalten. Damit Sie den Überblick über die Nachrichten behalten, die Ihr Kundenservicemitarbeiter sendet, müssen Sie für jede Nachricht die Nachrichten-ID, Telefonnummer und den Zeitstempel speichern.

Sie können eine Vielzahl von Technologien verwenden, um diese Informationen zu speichern, einschließlich Google Cloud Datastore. Cloud Datastore ist eine hoch skalierbare NoSQL-Datenbank, die Fragmentierung und Replikation automatisch durchführt. Es ist eine großartige zum Speichern nicht relationaler Daten wie der von einem Agent gesendeten Nachrichten. Cloud Datastore benötigt eine aktive Google App Engine-Instanz. Sie können die App Engine also verwenden, um Ihren RBM-Agenten zu hosten und einen Cron-Job zu konfigurieren.

Es gibt Clientbibliotheken für Cloud Datastore in vielen Sprachen. Für In diesem Beispiel können Sie Node.js verwenden und den Code des RBM-Agents auf der Node.js-Beispiel für ersten Agent finden Sie auf der RBM Developer Website. Installieren Sie zuerst Cloud Datastore für mein Node.js-Projekt. Führen Sie dazu den folgenden Befehl aus:

npm install --save @google-cloud/datastore

Fügen Sie in Ihrem Agent-Quellcode eine globale Referenz auf die Cloud Datastore-Clientbibliothek hinzu.

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

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

Mit dem erstellten Datenspeicherobjekt können Sie eine Funktion zum Speichern der Der Status msisdn, message id, sent time und delivery für jede Nachricht.

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

Wenn Sie diese Funktion verwenden, müssen Sie diese Methode jedes Mal aufrufen, wenn Ihr Kundenservicemitarbeiter eine Nachricht an einen Nutzer sendet. Wenn der RBM Node.js-Client Mediathek RBM-Nachrichten sendet, stellt die Bibliothek ein Antwortobjekt im Callback bereit. , die messageId für die Nachricht enthält, die an den Nutzer.

Im folgenden Beispiel wird eine Nachricht im reinen Textformat an einen Nutzer gesendet und die Nachrichteninformationen werden aufgezeichnet, nachdem eine erfolgreiche Kommunikation mit der RBM API stattgefunden hat.

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

Nach der Ausführung des Codes können Sie den Datenspeicher über die Google Cloud Console in der Datenspeicherentitäten Ansicht.

Datastore

Zustellungsstatus von Nachrichten aktualisieren

Nachdem der Agent gesendete Nachrichtenanfragen im Datenspeicher gespeichert hat, aktualisieren Sie die Lieferstatus, sobald die Nachricht erfolgreich an das Gerät des Nutzers zugestellt wurde.

Nutzer Geräte senden DELIVERED-, READ- und IS_TYPING-Ereignisse an RBM-Kundenservicemitarbeiter über Cloud Pub/Sub. Im Handler für Pub/Sub nach übermittelten Ereignissen suchen und aktualisieren Sie die Datenspeichereinstellung für das übermittelte Flag auf "true".

/**
 *   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
    }
}

Der Agent speichert ausgehende Nachrichten im Datastore und aktualisiert die Daten, wenn er eine Zustellungsbenachrichtigung erhält. Im nächsten Abschnitt erfahren Sie, wie Sie einen Cron einrichten. Job in der Google App Engine alle 10 Minuten ausgeführt, um nicht ausgelieferte Nachrichten.

Cron in der App Engine von Google

Mit Cronjobs können Sie Aufgaben in verschiedenen Intervallen planen. In der Google App Engine ist ein Cronjob mit einer Beschreibung, einer URL und einem Intervall konfiguriert.

In Node.js-Anwendungen werden diese in einer cron.yaml-Datei konfiguriert, die Sie mit dem Google Cloud SDK in der App Engine bereitstellen können. Weitere Informationen zu anderen Konfigurationen der Sprachkonfiguration finden Sie unter Jobs mit cron.yaml planen.

Da die Cron-Aufgabe eine URL benötigt, müssen Sie dem Express einen URL-Endpunkt hinzufügen des App-Routers, der per Cron aufgerufen wird. Dieser Webhook ist für die Abfrage des Datenspeicher für alte Nachrichten, Löschen und Senden von Nachrichten aus der RBM-Plattform per SMS an den Nutzer senden.

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

Im Folgenden sehen Sie die Konfiguration der Datei cron.yaml, mit der dieser Endpunkt alle 10 Mal ausgeführt wird Minuten.

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

Führen Sie den folgenden Befehl aus, um die Cron-Aufgaben in App Engine bereitzustellen:

gcloud app deploy cron.yaml

Nach der Bereitstellung konfiguriert die App Engine die Cron-Aufgabe automatisch. Sie ist unter App Engine > Cronjobs zu sehen.

Cronjobs

Datastore nach nicht zugestellten Nachrichten abfragen

Im Webhook für den Cronjob, den Sie im vorherigen Abschnitt eingerichtet haben, müssen Sie Logik zur Suche nach allen gesendeten Nachrichten mit dem Status delivered „false“ und lastUpdated Mal älter als ein vordefiniertes Zeitlimit sind, durch das für unseren Anwendungsfall. In diesem Beispiel laufen Nachrichten ab, die älter als eine Stunde sind.

Damit eine solche zusammengesetzte Abfrage unterstützt werden kann, muss der Datenspeicher einen zusammengesetzten Index mit den Properties delivered und lastUpdated enthalten. Dazu können Sie in Ihrem Projekt eine Datei namens „index.yaml“ mit den folgenden Informationen erstellen:

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

Verwenden Sie ähnlich wie bei der Bereitstellung des zuvor definierten Cronjobs die Google Cloud SDK zum Bereitstellen des zusammengesetzten Index, den Sie mit dem folgenden Befehl definiert haben:

gcloud datastore create-indexes index.yaml

Nach der Bereitstellung konfiguriert App Engine automatisch den Index und den Index. finden Sie unter Datenspeicher > Indexe.

Datenspeicherindexe

Nachdem Sie den Index definiert haben, können Sie zum Webhook zurückkehren, den Sie für den Cron-Job erstellt haben, und die Logik für das Ablaufen von Nachrichten abschließen:

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 unterstützt den SMS-Fallback nicht nativ. Sie müssen also die Logik implementieren, um nicht zugestellte Nachrichten per SMS zu senden.

Zusammenfassung

Zur Handhabung von Offline-Nutzern können Sie eine Sperrlogik für nicht zugestellte RBM-Dateien erstellen. Nachrichten. Wie lange die Nachricht gültig ist, bevor sie abläuft, hängt davon ab, wie zeitkritisch die übertragenen Informationen sind. Bei zeitkritischen Informationen wird eine Zeitüberschreitung von weniger als zwei Stunden empfohlen.

In diesem Beispiel werden Cloud Datastore und Google App Engine zum Verwalten des Speicherns, Abfragen und Widerrufs verwendet. Es sollte jedoch jeder Speichermechanismus funktionieren, mit dem Sie Ihre gesendeten und zugestellten Nachrichten im Blick behalten können.

Viel Erfolg und viel Spaß beim Programmieren!