Heim >Web-Frontend >js-Tutorial >So erstellen Sie eine SMS -Terminerinnerungs -App mit Twilio

So erstellen Sie eine SMS -Terminerinnerungs -App mit Twilio

Lisa Kudrow
Lisa KudrowOriginal
2025-02-18 11:04:13976Durchsuche

So erstellen Sie eine SMS -Terminerinnerungs -App mit Twilio

Dieser Artikel wurde von Marc Towler und Bruno Mota geprüft. Vielen Dank an alle Peer -Rezensenten von SitePoint, die SitePoint -Inhalte so gut wie möglich gemacht haben!

In diesem Tutorial werden wir eine SMS -Erinnerungs -App mit Node.js. erstellen. Wir werden den Google -Kalender des Benutzers verwenden, um Termine zu erhalten und dann die Textnachricht mit Twilio zu senden.

Wie immer finden Sie den Code, der in diesem Tutorial aus dem Github Repo verwendet wird.

Key Takeaways

  • Richten Sie die erforderlichen Konten bei Google und Twilio ein und aktivieren Sie APIs wie die Google -Kalender -API zum Abholen von Terminen.
  • Verwenden Sie Node.js und verschiedene Bibliotheken wie Express, Googleapis und Twilio, um die Kernfunktionalität der SMS -Erinnerungs -App zu erstellen.
  • implementieren Sie OAuth 2.0 für die Benutzerauthentifizierung, um sicher auf Google -Kalenderdaten zuzugreifen.
  • Verwenden Sie eine MySQL -Datenbank, um Benutzerdaten und Termindetails aus Google Calendar zu speichern.
  • Aufgaben planen Sie Cron in node.js, um das Abrufen von Ereignissen aus dem Google -Kalender und das Senden von SMS -Erinnerungen über Twilio zu automatisieren.
  • Behandeln Sie Fehler und sorgen Sie für eine robuste Protokollierung, um Probleme während der Entwicklung und Bereitstellung der App zu beheben.

Dinge einstellen

Zuerst müssen Sie ein Google -Konto und ein Twilio -Konto haben. Wenn Sie diese noch nicht haben, können Sie sich anmelden. Hier sind die Links:

  • Google
  • Twilio

Sie müssen sich keine Sorgen um Twilio machen, es ist kostenlos zu versuchen.

Google Console -Projekt

Wenn Sie ein Google -Konto haben, gehen Sie zur Google -Konsole und erstellen Sie eine neue App. Standardmäßig zeigt die Google Console -Seite das Dashboard der neuesten App, an der Sie gearbeitet haben. Aber wenn Sie noch nicht an Projekten arbeiten, werden Folgendes angezeigt:

So erstellen Sie eine SMS -Terminerinnerungs -App mit Twilio

Von dort aus können Sie in der oberen rechten Ecke auf das Menü "Projekt auswählen" klicken und ein Projekt erstellen. Dadurch wird ein modales Fenster geöffnet, mit dem Sie den Titel des Projekts eingeben können.

So erstellen Sie eine SMS -Terminerinnerungs -App mit Twilio

Sobald das Projekt erstellt wurde, wird das Dashboard angezeigt. Von dort aus können Sie auf die Verwendung von Google APIs klicken, nach der Google -Kalender -API suchen und diese aktivieren.

So erstellen Sie eine SMS -Terminerinnerungs -App mit Twilio

Sobald die API aktiviert ist, werden Sie aufgefordert, Anmeldeinformationen zu erstellen. Klicken Sie auf die Anmeldeinformationen, um mit der Einrichtung zu beginnen. Dies zeigt Ihnen Folgendes:

So erstellen Sie eine SMS -Terminerinnerungs -App mit Twilio

Klicken Sie auf die Schaltfläche Anmeldeinformationen hinzufügen und wählen Sie OAuth 2.0 Client -ID.

Auf diese Weise werden Sie zuerst aufgefordert, den Einwilligungsbildschirm zu konfigurieren. Klicken Sie auf den Bildschirm der Einwilligung konfigurieren.

Geben Sie einen Wert für den Produktnamen ein, der dem Textfeld des Benutzers angezeigt wird, und klicken Sie auf Speichern.

So erstellen Sie eine SMS -Terminerinnerungs -App mit Twilio

Sobald dies konfiguriert ist, können Sie jetzt die Client -ID erstellen. Wählen Sie die Webanwendung für den Anwendungstyp aus, lassen Sie den Standardnamen (falls Sie möchten), geben Sie http: // localhost: 3000/Login für die autorisierte Redirect -URIs ein und klicken Sie auf Erstellen.

So erstellen Sie eine SMS -Terminerinnerungs -App mit Twilio

Dies öffnet ein Modal, in dem die Client -ID und das Client -Geheimnis angezeigt werden. Beachten Sie diese für den Moment, wie wir sie später verwenden werden.

Twilio

Sobald Sie ein Twilio -Konto erstellt haben, wechseln Sie zur Seite "Einstellungen

Gehen Sie als nächstes zum programmierbaren Voice -Dashboard. Hier sehen Sie die Sandbox -Nummer. Sie können diese Nummer zum Testen von Twilio verwenden. Später müssen Sie jedoch eine Telefonnummer kaufen, damit die von Twilio gesendeten Textnachrichten nicht

"Von Twilio Sandbox gesendet" hinzugefügt werden. Eine weitere Grenze der Twilio -Sandbox -Nummer ist, dass sie nur mit verifizierten Zahlen verwendet werden kann. Dies bedeutet, dass Sie eine Telefonnummer mit Twilio registrieren müssen, um eine Nachricht an sie zu senden. Sie können dies auf der Seite "Caller -IDs verwalten".

Erstellen der App

Jetzt sind wir bereit, die App zu erstellen. Bevor wir fortfahren, möchte ich einen kurzen Überblick darüber geben, wie wir die App implementieren werden. Es werden drei Hauptdateien vorhanden sein: eine für den Server, eine zum Zwischenspeichern von Ereignissen aus Google Calendar und eine für die Erinnerung des Benutzers. Der Server wird verwendet, damit sich der Benutzer anmelden und ein Zugriffstoken erhalten kann. Die Ereignisse werden in der MySQL -Datenbank gespeichert und die globale App -Konfiguration wird in einer .json -Datei hinzugefügt. Die Implementierung von Cron durch die Noten wird zur Ausführung der Aufgabe zum Zwischenspeichern und der Erinnerung des Benutzers verwendet.

installieren Sie die Abhängigkeiten

Erstellen Sie in Ihrem Arbeitsverzeichnis eine Paket.json -Datei und fügen Sie Folgendes hinzu:

{
  "name": "google-calendar-twilio",
  "version": "0.0.1",
  "dependencies": {
    "config": "^1.17.1",
    "cron": "^1.1.0",
    "express": "^4.13.3",
    "googleapis": "^2.1.6",
    "moment": "^2.10.6",
    "moment-timezone": "^0.4.1",
    "mysql": "felixge/node-mysql",
    "twilio": "^2.6.0"
  }
}
In dieser Datei geben wir den Namen und die Version der Bibliotheken an, von denen unsere App abhängt. Hier ist eine Nutzungsabbrüche für jede Bibliothek:

  • Konfiguration - Wird zum Speichern und Abrufen der globalen App -Konfiguration verwendet.
  • Cron - Wird zur Ausführung einer bestimmten Aufgabe zu einer bestimmten Tageszeit verwendet. In dieser App verwenden wir es, um die Aufgabe für das Zwischenspeichern von Ereignissen aus dem Google -Kalender des Benutzers und Senden von Text -Erinnerungen zu sehen.
  • Express - Das Defacto -Web -Framework für node.js. Wir verwenden es, um die Anmeldeseite zu servieren.
  • googleapis - Der offizielle Node.js -Client für Googles APIs.
  • Moment - eine Bibliothek für Datum und Uhrzeit. Wir verwenden es, um die Daten, die wir von der Google Calendar API erhalten, einfach zu formatieren.
  • Moment-TimeZone-Das Timezone-Plugin für den Moment. Dies legt die Standardzeitzone für die App fest.
  • MySQL - Ein MySQL -Client für node.js.
  • Twilio - Der offizielle Twilio -Kunde für node.js. Auf diese Weise können wir Text -Erinnerungen senden.

Führen Sie die NPM aus Ihrem Terminal aus, um alle Abhängigkeiten zu installieren.

Datenbank

Wie bereits erwähnt, werden wir die MySQL -Datenbank für diese App verwenden. Erstellen Sie eine neue Datenbank mit dem Datenbankverwaltungs -Tool Ihrer Wahl. Verwenden Sie dann die folgende SQL-Dump-Datei, um die Tabellen zu erstellen: Termin-Notifier.sql.

Es gibt zwei Tabellen in der Datenbank: Benutzer und Termine. Die Benutzertabelle wird zum Speichern der Benutzerdaten verwendet. Im Fall dieser App werden wir nur einen Benutzer speichern, und nur das Zugriffstoken wird gespeichert.
Die Tisch für die Termine wird zum Speichern der Ereignisse verwendet, die wir von der Google Calendar API erhalten haben. Beachten Sie, dass es kein Feld user_id enthält, da wir nur einen Benutzer haben. Und wir werden alle Zeilen holen, die als Wert für das benachrichtigte Feld Null haben.

App -Konfiguration

Erstellen Sie in Ihrem Arbeitsverzeichnis einen Konfigurationsordner und erstellen Sie dann eine Datei Standard.json. Hier setzen wir die globale App -Konfiguration ein. Dies beinhaltet die TimeZone, die Telefonnummer, an die wir die Erinnerungen, die Datenbank, die Google -App und die Twilio -Einstellungen senden werden.

Hier ist die Vorlage. Füllen Sie unbedingt alle Felder aus.

{
  "name": "google-calendar-twilio",
  "version": "0.0.1",
  "dependencies": {
    "config": "^1.17.1",
    "cron": "^1.1.0",
    "express": "^4.13.3",
    "googleapis": "^2.1.6",
    "moment": "^2.10.6",
    "moment-timezone": "^0.4.1",
    "mysql": "felixge/node-mysql",
    "twilio": "^2.6.0"
  }
}

gemeinsame Dateien

Als gute Entwickler müssen wir die Wiederholung von Code so weit wie möglich vermeiden. Aus diesem Grund müssen wir Code einfügen, der von diesen drei Hauptdateien (Server, Cache, Benachrichtigung) benötigt wird, die ich zuvor in separate Dateien erwähnt habe. Erstellen Sie einen gemeinsamen Ordner in Ihrem Arbeitsverzeichnis. Hier werden wir die gemeinsamen Dateien hinzufügen.

Datenbank

Erstellen Sie eine db.js -Datei im gemeinsamen Verzeichnis und fügen Sie Folgendes hinzu:

{
    "app": {
        "timezone": "Asia/Manila"
    },

    "me": {
        "phone_number": ""
    },

    "db": {
        "host": "localhost",
        "user": "root",
        "password": "secret",
        "database": "calendar_notifier"
    },

    "google":{
        "client_id": "THE CLIENT ID OF YOUR GOOGLE APP",
        "client_secret": "THE CLIENT SECRET OF YOUR GOOGLE APP",
        "redirect_uri": "http://localhost:3000/login",
        "access_type": "offline",
        "scopes": [
            "https://www.googleapis.com/auth/plus.me",
            "https://www.googleapis.com/auth/calendar"
        ]
    },

    "twilio": {
        "sid": "YOUR TWILIO SID",
        "secret": "YOUR TWILIO SECRET",
        "phone_number": "+YOUR TWILIO PHONE NUMBER / SANDBOX NUMBER"
    }

}

Hierbei wird die Konfigurationsbibliothek verwendet, um die Konfigurationswerte zu erhalten, die wir früher in der Datei config/default.json hinzugefügt haben. Insbesondere erhalten wir die Datenbankkonfiguration, damit wir eine Verbindung zur Datenbank herstellen können. Dann exportieren wir dieses Modul, damit wir es später aus einer anderen Datei verwenden können.

Zeit

Die Datei Time.js wird verwendet, um die Standard-Zeitzone mit der Moment-Timezone-Bibliothek festzulegen. Wir exportieren auch den Wert für die Zeitzone, da wir ihn später bei der Ausführung der beiden Cron -Aufgaben (Caching -Ereignisse und Benachrichtigung von Benutzern) verwenden.

{
  "name": "google-calendar-twilio",
  "version": "0.0.1",
  "dependencies": {
    "config": "^1.17.1",
    "cron": "^1.1.0",
    "express": "^4.13.3",
    "googleapis": "^2.1.6",
    "moment": "^2.10.6",
    "moment-timezone": "^0.4.1",
    "mysql": "felixge/node-mysql",
    "twilio": "^2.6.0"
  }
}

Google

Die Google.js -Datei wird zum Initialisieren des Google -Clients und des OAuth2 -Clients verwendet. Um den OAuth2 -Client zu initialisieren, müssen wir die Client -ID, das Client -Geheimnis und die Umleitungs -URL übergeben, die wir in der Konfigurationsdatei zuvor hinzugefügt haben. Dann initialisieren wir den Google -Kalenderdienst. Zuletzt exportieren wir den OAuth2 -Client, den Kalender und die Google -Konfiguration.

{
    "app": {
        "timezone": "Asia/Manila"
    },

    "me": {
        "phone_number": ""
    },

    "db": {
        "host": "localhost",
        "user": "root",
        "password": "secret",
        "database": "calendar_notifier"
    },

    "google":{
        "client_id": "THE CLIENT ID OF YOUR GOOGLE APP",
        "client_secret": "THE CLIENT SECRET OF YOUR GOOGLE APP",
        "redirect_uri": "http://localhost:3000/login",
        "access_type": "offline",
        "scopes": [
            "https://www.googleapis.com/auth/plus.me",
            "https://www.googleapis.com/auth/calendar"
        ]
    },

    "twilio": {
        "sid": "YOUR TWILIO SID",
        "secret": "YOUR TWILIO SECRET",
        "phone_number": "+YOUR TWILIO PHONE NUMBER / SANDBOX NUMBER"
    }

}

Erstellen des Servers

Jetzt sind wir bereit, auf dem Server zu arbeiten. Der Server ist dafür verantwortlich, den Zugriffstoken zu erhalten. Dies kann zum Gespräch mit der Google Calendar API verwendet werden, ohne dass der Benutzer derzeit angemeldet ist. Beginnen Sie mit dem Erstellen einer Server.js -Datei und dem Hinzufügen Folgendes:

var config = require('config');

var db_config = config.get('db');
var mysql = require('mysql');
var connection = mysql.createConnection({
    host: db_config.host,
    user: db_config.user,
    password: db_config.password,
    database: db_config.database
});

exports.db = connection;

brechen es ab:

Importieren wir zuerst das Google- und DB -Modul, das wir früher erstellt haben.

var config = require('config');
var app_timezone = config.get('app.timezone');
var moment = require('moment-timezone');
moment.tz.setDefault(app_timezone);

exports.config = {
    timezone: app_timezone
};

exports.moment = moment;

Erstellen Sie einen Express -Server, der auf Port 3000 von Localhost ausgeführt wird. Aus diesem Grund haben wir http: // localhost: 3000/Login früher in der App -Konfiguration und im Umleitungs -URI für Google hinzugefügt:

var config = require('config');
var google_config = config.get('google');

var google = require('googleapis');
var OAuth2 = google.auth.OAuth2;
var oauth2Client = new OAuth2(google_config.client_id, google_config.client_secret, google_config.redirect_uri);

var calendar = google.calendar('v3');

exports.oauth2Client = oauth2Client; 
exports.calendar = calendar;
exports.config = google_config;

Definieren Sie eine aktualisierte Funktion. Dies akzeptiert zwei Argumente: Token und Antwort. Das Token ist das Zugangs -Token, das wir von Google erhalten, nachdem der Benutzer die erforderlichen Berechtigungen erteilt hat. Und die Antwort ist das Antwortobjekt, das aus Express stammt. Wir übergeben es an diese Funktion, damit wir eine Antwort an den Benutzer senden können. In der Funktion aktualisieren wir den Access_Token der ersten Zeile. Wie bereits erwähnt, funktioniert diese App nur für einen einzelnen Benutzer. Sobald der Access_Token aktualisiert ist, senden wir die Antwort.

var google = require('./common/google');
var connection = require('./common/db');

var express = require('express');
var app = express();

var server = app.listen(3000, function () {
  var host = server.address().address;
  var port = server.address().port;

  console.log('Example app listening at http://%s:%s', host, port);
});


function updateAccessToken(tokens, response){

    connection.db.query(
        "UPDATE users SET access_token = ? WHERE id = 1", 
        [JSON.stringify(tokens)],
        function(err, rows, fields){
            if(!err){
                console.log('updated!');
                response.send('connected!');
            }else{
                console.log('error updating table');
                console.log(err);
                response.send('error occured, please try again');
            }
        }
    );

}

app.get('/', function(req, res){
    var url = google.oauth2Client.generateAuthUrl({
      access_type: google.config.access_type,
      scope: google.config.scopes
    });

    res.send('<a href="' + url + '">login to google</a>');
});


app.get('/login', function(req, res){
    var code = req.query.code;
    console.log('login');

    google.oauth2Client.getToken(code, function(err, tokens){

      if(!err){
        console.log('tokens');
        console.log(tokens);

        updateAccessToken(tokens, res);

      }else{
        res.send('error getting token');
        console.log('error getting token');
      }
    });

});

Fügen Sie die Route für die Startseite hinzu. Dies wird ausgeführt, wenn auf http: // localhost: 3000 zugegriffen wird. Von hier aus generieren wir die Authentifizierungs -URL. Dies verwendet die GenerateAuthurl -Methode aus dem OAuth2Client. Es akzeptiert ein Objekt, das den Access_Type und den Umfang enthält. Wir erhalten diese Werte aus der App -Konfigurationsdatei, die wir früher erstellt haben. Zuletzt senden wir den tatsächlichen Link, auf den der Benutzer klicken kann. Beachten Sie, dass Sie dies immer in einer Ansicht tun sollten, aber um die Dinge zu vereinfachen, werden wir den Link einfach direkt zurückgeben.

var google = require('./common/google');
var connection = require('./common/db');

Fügen Sie die Route für die Anmeldung hinzu. Dies ist die Route, auf der der Benutzer nach der Erhalt der erforderlichen Berechtigungen der App umgeleitet wird. Google übergibt einen Abfrageparameter namens Code. Und wir erhalten es durch das Query -Objekt in der Anfrage. Wir nennen dann die GetToken -Methode und geben den Code als Argument ein. Dies würde uns das Zugangstoken geben. Deshalb nennen wir die Funktion updateAccessOken, um sie in der Datenbank zu speichern.

{
  "name": "google-calendar-twilio",
  "version": "0.0.1",
  "dependencies": {
    "config": "^1.17.1",
    "cron": "^1.1.0",
    "express": "^4.13.3",
    "googleapis": "^2.1.6",
    "moment": "^2.10.6",
    "moment-timezone": "^0.4.1",
    "mysql": "felixge/node-mysql",
    "twilio": "^2.6.0"
  }
}

Erstellen des Cacher

Der Cacher ist dafür verantwortlich, die Benutzer Termine in der Datenbank zu speichern. Dies verhindert, dass wir jedes Mal, wenn wir Erinnerungen senden, das Google Calendar API -Verzeichnis abfragen müssen. Erstellen Sie eine Cache.js -Datei und fügen Sie Folgendes hinzu:

{
    "app": {
        "timezone": "Asia/Manila"
    },

    "me": {
        "phone_number": ""
    },

    "db": {
        "host": "localhost",
        "user": "root",
        "password": "secret",
        "database": "calendar_notifier"
    },

    "google":{
        "client_id": "THE CLIENT ID OF YOUR GOOGLE APP",
        "client_secret": "THE CLIENT SECRET OF YOUR GOOGLE APP",
        "redirect_uri": "http://localhost:3000/login",
        "access_type": "offline",
        "scopes": [
            "https://www.googleapis.com/auth/plus.me",
            "https://www.googleapis.com/auth/calendar"
        ]
    },

    "twilio": {
        "sid": "YOUR TWILIO SID",
        "secret": "YOUR TWILIO SECRET",
        "phone_number": "+YOUR TWILIO PHONE NUMBER / SANDBOX NUMBER"
    }

}

brechen es ab:

Zuerst importieren wir alle Module, die wir brauchen.

var config = require('config');

var db_config = config.get('db');
var mysql = require('mysql');
var connection = mysql.createConnection({
    host: db_config.host,
    user: db_config.user,
    password: db_config.password,
    database: db_config.database
});

exports.db = connection;

Die AddAppointment -Funktion ist für die Einsparung der Termine in die Tischtermine verantwortlich. Dies akzeptiert Event_ID, Zusammenfassung, Start- und Enddatensätze des Termins. Die Event_ID ist im Grunde die ID des spezifischen Termins im Google -Kalender. Wir verwenden es als den Wert für den Primärschlüssel, was bedeutet, dass Duplikate nicht in die Tisch der Termine eingefügt werden. Was hier fehlt, ist das Mittel, um die bereits in der Datenbank befindlichen Termine zu vergleichen, und die von der API zurückgegebenen Termine. Wenn sich der Zeitplan des Termins ändert, wird die Datenbank nicht aktualisiert, da alles, was wir hier tun, in die Tabelle einfügt. Ich werde das für Ihre Todo -Liste verlassen.

var config = require('config');
var app_timezone = config.get('app.timezone');
var moment = require('moment-timezone');
moment.tz.setDefault(app_timezone);

exports.config = {
    timezone: app_timezone
};

exports.moment = moment;

Die GetEvents -Funktion ist dafür verantwortlich, alle von der API zurückgegebenen Termine durchzuschlafen. Dadurch wird die AddAppointment -Methode verwendet, um den Termin für jede Iteration der Schleife zu speichern.

var config = require('config');
var google_config = config.get('google');

var google = require('googleapis');
var OAuth2 = google.auth.OAuth2;
var oauth2Client = new OAuth2(google_config.client_id, google_config.client_secret, google_config.redirect_uri);

var calendar = google.calendar('v3');

exports.oauth2Client = oauth2Client; 
exports.calendar = calendar;
exports.config = google_config;

Die Cache -Methode ist diejenige, die den tatsächlichen Anruf bei der Google -Kalender -API tätigt. Dies geschieht durch die Verwendung des Google -Clients. Hier rufen wir die Listenmethode im Objekt Calendar.Events auf. Dies akzeptiert zwei Argumente: Erstens ist das Objekt, das die Optionen für die Abfrage enthält, und zweitens ist die Funktion, die ausgeführt wird, sobald ein Ergebnis zurückgegeben wird.

var google = require('./common/google');
var connection = require('./common/db');

var express = require('express');
var app = express();

var server = app.listen(3000, function () {
  var host = server.address().address;
  var port = server.address().port;

  console.log('Example app listening at http://%s:%s', host, port);
});


function updateAccessToken(tokens, response){

    connection.db.query(
        "UPDATE users SET access_token = ? WHERE id = 1", 
        [JSON.stringify(tokens)],
        function(err, rows, fields){
            if(!err){
                console.log('updated!');
                response.send('connected!');
            }else{
                console.log('error updating table');
                console.log(err);
                response.send('error occured, please try again');
            }
        }
    );

}

app.get('/', function(req, res){
    var url = google.oauth2Client.generateAuthUrl({
      access_type: google.config.access_type,
      scope: google.config.scopes
    });

    res.send('<a href="' + url + '">login to google</a>');
});


app.get('/login', function(req, res){
    var code = req.query.code;
    console.log('login');

    google.oauth2Client.getToken(code, function(err, tokens){

      if(!err){
        console.log('tokens');
        console.log(tokens);

        updateAccessToken(tokens, res);

      }else{
        res.send('error getting token');
        console.log('error getting token');
      }
    });

});

In dem Objekt, das die Optionen enthält, haben wir Folgendes:

  • auth - Dies ist der OAuth2Client. Dies wird zur Authentifizierung der Anfrage verwendet.
  • Kalender - Die ID des Kalenders, in dem wir die Termine erhalten. In diesem Fall verwenden wir den Primärkalender. Mit Google Calendar können Sie tatsächlich viele Kalender erstellen. Andere können Ihnen auch ihre Kalender teilen. Und jeder dieser Kalender hat seine eigene ID. Das geben wir hier an. Wenn Sie daran interessiert sind, auf andere Kalender zuzugreifen, lesen Sie unbedingt die API -Dokumentation zu Kalendern.
  • Timemin - Die Basisdatetime, die in der Abfrage verwendet werden soll. In diesem Fall verwenden wir die aktuelle DateTime. Denn wer möchte über ein Ereignis informiert werden, das in der Vergangenheit passiert ist? Beachten Sie jedoch, dass dies den ISO 8601 -Standard zur Darstellung der Zeit verwendet. Zum Glück gibt es eine Methode namens ToiString im Moment, mit der wir das bekommen können.
  • MaxResults - Die Gesamtzahl der Ergebnisse, die Sie zurückgeben möchten.
  • SingleEvents-Ermöglichen Sie, dass Sie nur angeben, ob nur einzelne einmalige Ereignisse zurückgegeben werden sollen. Hier haben wir True verwendet, was bedeutet, dass wiederkehrende Ereignisse nicht zurückgegeben werden.
  • orderBy - Ermöglicht Ihnen die Reihenfolge an, in der die Ergebnisse zurückgegeben werden. In diesem Fall haben wir StartTime verwendet, was das Ergebnis zu Aufstiegsreihenfolge basierend auf ihren Startzeiten bestellt. Dies ist nur verfügbar, wenn die Option SingleEvents auf true eingestellt ist.
Alle diese Optionen und viele andere finden Sie in den Ereignissen: Listendokumentation

access_token aus der Datenbank abrufen und verwenden Sie sie, um die Anmeldeinformationen für den OAuth2Client -Client festzulegen. Sobald dies erledigt ist, erstellen Sie einen neuen Cron -Job, bei dem die Cache -Methode jeden Tag um 12. Nacht um Mitternacht ausgeführt wird.

{
  "name": "google-calendar-twilio",
  "version": "0.0.1",
  "dependencies": {
    "config": "^1.17.1",
    "cron": "^1.1.0",
    "express": "^4.13.3",
    "googleapis": "^2.1.6",
    "moment": "^2.10.6",
    "moment-timezone": "^0.4.1",
    "mysql": "felixge/node-mysql",
    "twilio": "^2.6.0"
  }
}
Erstellen des Notifiers

Last but not least haben wir den Notifier (benachrichtigen.js). Dies ist dafür verantwortlich, die Termine aus der Datenbank zu erhalten und festzustellen, ob sie zur Benachrichtigung reif sind. Wenn sie sind, dann senden wir sie.

{
    "app": {
        "timezone": "Asia/Manila"
    },

    "me": {
        "phone_number": ""
    },

    "db": {
        "host": "localhost",
        "user": "root",
        "password": "secret",
        "database": "calendar_notifier"
    },

    "google":{
        "client_id": "THE CLIENT ID OF YOUR GOOGLE APP",
        "client_secret": "THE CLIENT SECRET OF YOUR GOOGLE APP",
        "redirect_uri": "http://localhost:3000/login",
        "access_type": "offline",
        "scopes": [
            "https://www.googleapis.com/auth/plus.me",
            "https://www.googleapis.com/auth/calendar"
        ]
    },

    "twilio": {
        "sid": "YOUR TWILIO SID",
        "secret": "YOUR TWILIO SECRET",
        "phone_number": "+YOUR TWILIO PHONE NUMBER / SANDBOX NUMBER"
    }

}
brechen es ab:

Importieren Sie alle erforderlichen Module.

var config = require('config');

var db_config = config.get('db');
var mysql = require('mysql');
var connection = mysql.createConnection({
    host: db_config.host,
    user: db_config.user,
    password: db_config.password,
    database: db_config.database
});

exports.db = connection;
Erstellen Sie eine Aktualisierungsfunktion. Dies akzeptiert die ID der Ernennung als Argument. Alles, was es tut, ist, den Wert für das Benachrichtigungsfeld auf 1 festzulegen, was bedeutet, dass die Benachrichtigung für den spezifischen Termin bereits gesendet wurde.

var config = require('config');
var app_timezone = config.get('app.timezone');
var moment = require('moment-timezone');
moment.tz.setDefault(app_timezone);

exports.config = {
    timezone: app_timezone
};

exports.moment = moment;
Als nächstes haben wir die Funktion "SendNotifications". Dies ist dafür verantwortlich, dass die Text Erinnerungen mit Twilio tatsächlich gesendet werden. Diese Funktion wird nach dem Abholen der Termine aus der Datenbank aufgerufen. Aus diesem Grund hat es den Fehler, die Ergebnisse und die Felderargumente, die in ihn übergeben wurden. Der Fehler enthält einen Fehler aus der Datenbank. Die Ergebnisse enthalten die aus der Datenbank zurückgegebenen Zeilen. Und die Felder enthalten Informationen zu den zurückgegebenen Ergebnisfeldern.

var config = require('config');
var google_config = config.get('google');

var google = require('googleapis');
var OAuth2 = google.auth.OAuth2;
var oauth2Client = new OAuth2(google_config.client_id, google_config.client_secret, google_config.redirect_uri);

var calendar = google.calendar('v3');

exports.oauth2Client = oauth2Client; 
exports.calendar = calendar;
exports.config = google_config;
In der Funktion erhalten wir die Telefonnummer der Benutzer aus der App -Konfiguration.

{
  "name": "google-calendar-twilio",
  "version": "0.0.1",
  "dependencies": {
    "config": "^1.17.1",
    "cron": "^1.1.0",
    "express": "^4.13.3",
    "googleapis": "^2.1.6",
    "moment": "^2.10.6",
    "moment-timezone": "^0.4.1",
    "mysql": "felixge/node-mysql",
    "twilio": "^2.6.0"
  }
}

Überprüfen Sie, ob Fehler vorliegen und ob keine durch die zurückgegebene Ergebnisse durchschleifen.

.
{
    "app": {
        "timezone": "Asia/Manila"
    },

    "me": {
        "phone_number": ""
    },

    "db": {
        "host": "localhost",
        "user": "root",
        "password": "secret",
        "database": "calendar_notifier"
    },

    "google":{
        "client_id": "THE CLIENT ID OF YOUR GOOGLE APP",
        "client_secret": "THE CLIENT SECRET OF YOUR GOOGLE APP",
        "redirect_uri": "http://localhost:3000/login",
        "access_type": "offline",
        "scopes": [
            "https://www.googleapis.com/auth/plus.me",
            "https://www.googleapis.com/auth/calendar"
        ]
    },

    "twilio": {
        "sid": "YOUR TWILIO SID",
        "secret": "YOUR TWILIO SECRET",
        "phone_number": "+YOUR TWILIO PHONE NUMBER / SANDBOX NUMBER"
    }

}

In der Schleife extrahieren wir alle Werte, die wir benötigen, und konstruieren die tatsächliche Nachricht. Wir erhalten auch den Stundenunterschied zwischen der aktuellen Zeit und der Startzeit des Termins. Wir prüfen, ob der Stundenunterschied weniger als 24 Stunden beträgt.
var config = require('config');

var db_config = config.get('db');
var mysql = require('mysql');
var connection = mysql.createConnection({
    host: db_config.host,
    user: db_config.user,
    password: db_config.password,
    database: db_config.database
});

exports.db = connection;

Wenn es weniger als 24 Stunden ist, senden wir die Benachrichtigung. Dies geschieht durch die Verwendung des Twilio -Kunden. Wir rufen SendMessage an und geben ein Objekt ein, das die to (die Telefonnummer der Benutzer), aus (Twilios Sandobox -Nummer oder eine Telefonnummer, die Sie bei Twilio gekauft haben) und die Karosserie, die die Textnachricht enthält, enthält. Wenn keine Fehler zurückgegeben werden, gehen wir davon aus, dass die Benachrichtigung gesendet wurde. Daher rufen wir die Aktualisierungsfunktion auf, um das Benachrichtigungsfeld auf 1 festzulegen, sodass beim nächsten Mal die Aufgabe nicht ausgewählt wird.
var config = require('config');
var app_timezone = config.get('app.timezone');
var moment = require('moment-timezone');
moment.tz.setDefault(app_timezone);

exports.config = {
    timezone: app_timezone
};

exports.moment = moment;

Schließlich haben wir die Starttask -Methode. Alles, was es tut, ist, alle Termine aus der Ernennungstabelle auszuwählen, deren Benachrichtigung noch nicht gesendet wurde. Diese Funktion wird alle 12 Uhr und 18 Uhr ausgeführt.
var config = require('config');
var google_config = config.get('google');

var google = require('googleapis');
var OAuth2 = google.auth.OAuth2;
var oauth2Client = new OAuth2(google_config.client_id, google_config.client_secret, google_config.redirect_uri);

var calendar = google.calendar('v3');

exports.oauth2Client = oauth2Client; 
exports.calendar = calendar;
exports.config = google_config;

Schlussfolgerung

Das ist es! In diesem Tutorial haben Sie gelernt, wie man eine SMS -Erinnerungs -App mit Twilio erstellt. Insbesondere haben wir uns angesehen, wie die Termine des Benutzers über die Google Calendar API erhalten können. Wir haben diese in der Datenbank gespeichert und den Benutzer über Twilio informiert. Sie finden den in diesem Tutorial verwendeten Code aus dem Github Repo.

häufig gestellte Fragen (FAQs) zum Erstellen einer SMS -Terminerinnerungs -App mit Twilio

Wie kann ich die Funktionalität meiner SMS -Terminerinnerungs -App testen? Sie können die integrierten Testwerkzeuge von Twilio verwenden, um das Senden und Empfangen von Nachrichten zu simulieren. Sie können auch Unit -Test -Frameworks wie Scherz oder Mokka für Ihren JavaScript -Code verwenden. Denken Sie daran, alle Funktionen zu testen, einschließlich Erstellung von Terminen, Erinnerungsplanung und Senden von SMS.

Kann ich die Erinnerungsmeldungen in der App anpassen? . Der Nachrichteninhalt ist normalerweise in Ihrem serverseitigen Code definiert. Sie können dies so ändern, dass Sie alle gewünschten Informationen wie die Terminzeit, den Ort oder die anderen für den Termin relevanten Details einfügen.

Wie kann ich Erinnerungen für verschiedene Zeitzonen planen? Die Planungserinnerungen für verschiedene Zeitzonen können etwas schwierig sein. Sie müssen die Zeitzoneninformationen für jeden Termin speichern und diese bei der Planung der Erinnerungen verwenden. Das Datumsobjekt von JavaScript kann Zeitzonenkonvertierungen verwalten, oder Sie können Bibliotheken wie moment.js für komplexere Szenarien verwenden.

Was passiert, wenn die SMS nicht senden? Sie können auch die Fehlerbehandlung in Ihrem Code einrichten, um diese Fehler zu protokollieren und entsprechende Maßnahmen zu ergreifen, z. B. die Nachricht oder die Benachrichtigung des Benutzer Ja, Sie können diese App für mehrere Benutzer verwenden. Sie müssten den Code ändern, um Termine mit bestimmten Benutzern zu assoziieren und sicherzustellen, dass Erinnerungen an die richtige Telefonnummer gesendet werden. Auf diese Weise können Benutzerauthentifizierung und Verwaltung von Benutzerdaten in Ihre Datenbank hinzugefügt werden.

Wie sicher sind die Daten in dieser App? Twilio bietet sichere Kommunikationskanäle, aber Sie müssen auch sicherstellen, dass Ihr Server und Ihre Datenbank sicher sind. Dies kann die Verwendung sicherer Protokolle, Verschlüsseln sensibler Daten und die Befolgung der Best Practices für die Websicherheit beinhalten.

Kann ich diese App in mein vorhandenes Planungssystem integrieren? Ihr vorhandenes Planungssystem. Dies umfasst die Änderung des Code, um mit der API oder Datenbank Ihres Systems zu interagieren. Die genauen Details würden von den Einzelheiten Ihres Planungssystems abhängen.

Wie viel kostet es, SMS -Erinnerungen mit Twilio zu senden? Nachrichten, die Sie senden und die Länder, in die Sie sie senden. Twilio bietet eine detaillierte Preisstruktur auf ihrer Website.

Kann ich Erinnerungen an internationale Zahlen senden? Sie müssen jedoch sicherstellen, dass Sie den SMS -Vorschriften in jedem Land entsprechen, und die Kosten sind möglicherweise höher als für inländische Nachrichten.

Wie kann ich die Leistung meiner App überwachen?

Sie können die Leistung Ihrer App mit verschiedenen Tools überwachen. Twilio bietet Analysen für Ihre SMS-Nutzung und Sie können die Serverüberwachungstools verwenden, um die Leistung Ihres serverseitigen Codes zu verfolgen. Sie sollten auch die Protokollierung implementieren, um alle Probleme zu diagnostizieren.

Das obige ist der detaillierte Inhalt vonSo erstellen Sie eine SMS -Terminerinnerungs -App mit Twilio. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn