Blog.

Verstehen von Crons durch Twilio: Eine Liebesgeschichte
Bei FloQast führt unsere App viele Aufgaben aus, die von Crons ausgeführt werden. Crons sind langlaufende Prozesse, die es Ihnen ermöglichen, Code in bestimmten Zeitintervallen auszuführen. Sie eignen sich hervorragend für die Automatisierung wiederkehrender Aufgaben wie das Senden von App-Benachrichtigungen oder das Sichern von Datenbanken.
Das Problem
Ich hatte in einem Code gearbeitet, von dem ich wusste, dass er von einem Cron ausgeführt wurde. Ich wusste zwar, was ein Cron in der Theorie ist, aber ich hatte selbst noch kein Cron-Projekt erstellt. Also beschloss ich, mir Zeit zu nehmen, um mehr über diesen Prozess zu lernen. Aber es war kurz vor dem Valentinstag und ich hatte noch kein Geschenk für meine Partnerin gefunden. Daher hatte ich leider nicht viel Zeit, um mich mit Crons zu beschäftigen.
Nachdem ich viel Zeit damit verbracht hatte, zwischen dem Lernen über Crons und dem Ausdenken von Geschenkideen hin und her zu springen, und mit der Zeit, die ich für beides aufwenden musste, nicht zufrieden war, begann ich über alternative Ideen nachzudenken. Wie könnte ich etwas über Krons lernen und gleichzeitig ein Geschenk besorgen?
Ich dachte über Geschenke nach, die von einem Cron ausgeführt werden könnten. Ich dachte, dass es schön wäre, regelmäßig über den Tag verteilte Valentinstagsnachrichten zu versenden, und suchte daher nach Textnachrichten-APIs, die dabei helfen könnten. Ich stieß auf die Twilio-API und dachte, sie wäre perfekt, um meine Texte zu automatisieren. Endlich hatte ich eine Möglichkeit, meine beiden Ziele gleichzeitig zu erreichen.
Hier sind die Schritte, die ich unternommen habe, um ein Cron-Projekt zu erstellen, mit dem ich meinem Partner stündlich Valentinstags-Überraschungstexte schicken kann.
Cron-Ausdrücke lernen
Crons können auf AWS erstellt werden für groß angelegte Anwendungen. Da es sich um ein kleines Projekt handelte, beschloss ich, die node-cron Paket für meinen Cron. Die node-cron
Die Dokumentation beschreibt dieses Paket als einen "winzigen Aufgabenplaner in reinem JavaScript für node.js, der auf GNU crontab. Mit diesem Modul können Sie Aufgaben in Node.js mit der vollständigen Crontab-Syntax planen." Was ist diese Syntax, von der sie sprechen?
Die cron-Syntax ist ein Ausdruck, den wir schreiben, um die Häufigkeit der Ausführung unseres Codes festzulegen. Der cron-Ausdruck bietet Platz für bestimmte Felder, die Sie bearbeiten können. Um das zu erklären, beginnen wir mit dem unten stehenden Code:
const cron = require('node-cron'); cron.schedule('* * * * *', () => { console.log('running a task every minute'); });
Die Sternchen kennzeichnen die Zeitplanungsfelder und können mit den unten gezeigten Werten aus dem Fenster node-cron
docs:
Im Folgenden finden Sie einige Beispiele dafür, wie sich Änderungen des Ausdrucks auf die Häufigkeit der Codeausführung auswirken würden.
Wenn wir diesen Zeitplan bearbeiten, um 0 * * * *
würde es zur Minute 0 jeder Stunde laufen.
Um jeden Tag um 10 Uhr zu senden, könnten wir es ändern in 0 10 * * *
.
Jeden Montag um 10 Uhr morgens würde geschrieben werden als 0 10 * * 1
.
Wir haben den Index 1 für Montag verwendet, aber wir könnten es weniger kryptisch machen, indem wir stattdessen den/die Namen der Wochentage angeben. Wir könnten auch mehrere durch Kommas getrennte Werte angeben, z. B. 0 10 * * 1,2
für jeden Montag und Dienstag um 10 Uhr.
Bindestriche bieten die Möglichkeit, für bestimmte Bereiche zu laufen, wie z. B. 0 10 * * 1-5
für Montag bis Freitag um 10 Uhr.
Schließlich können wir mit Hilfe von Stufenwerten die Bereiche genauer definieren, indem wir "/" verwenden. Wenn wir also unseren letzten Zeitplan auf "10 Uhr jeden zweiten Tag zwischen Montag und Freitag" ändern wollten, würden wir ihn ändern in 0 10 * * 1-5/2
.
Die node-cron
Dokumentation werden alle Optionen, die Sie haben, sehr gut erklärt. Wenn Sie mit der Syntax experimentieren möchten, https://crontab.guru hat einen sehr hilfreichen Editor, der die Ausdrücke für Sie in lesbare Sätze übersetzt.
Für meine kleine Messaging-App würde sie nicht die ganze Zeit laufen, also habe ich beschlossen, den Zeitplan auf 0 * * * *
so dass sie zur Minute Null jeder Stunde, in der ich die App laufen lasse, ausgeführt wird.
Einrichten von Twilio
Nachdem ich nun meinen Cron-Zeitplan hatte, begann ich mit der Einrichtung dessen, was ich zum Senden von Twilio-Nachrichten benötigte. Zuerst musste ich mich auf https://www.twilio.com/try-twilio für ein Twilio-Konto anmelden. Ein Twilio-Konto gibt uns alles, was wir brauchen, um ihre API zum Senden von Texten zu verwenden: eine Konto-SID, ein Auth-Token und eine Twilio-Telefonnummer.
Twilio verfügt über eine hervorragende Dokumentation, die die Ersteinrichtung sehr klar und einfach macht. Nach der Installation des Twilio-Pakets und dem Aufrufen des Dokuments " Send Messages with API " konnte ich den Quickstart-Code verwenden, um meine Kontodaten einzugeben und meine App fast startklar zu machen.
Es gab nur noch einen schwierigen Teil. Ich musste die Telefonnummer meiner Partnerin mit Twilio verifizieren. Twilio sendet eine Bestätigungsnachricht an die von Ihnen angegebene Nummer, und die konnte ich ihr natürlich nicht zeigen. Ich musste mir etwas Kreatives einfallen lassen, um ihr Telefon für eine Minute zu benutzen.
Sobald ich die Kontrolle über ihr Telefon hatte, dachte ich mir, dass ich einen neuen Kontakt für die Twilio-Telefonnummer mit dem Namen "Happy Valentine's Day from Brendan" erstellen würde, damit die kommenden Nachrichten nicht als Spam angesehen werden.
Der Kodex
Nachdem der Cron-Zeitplan festgelegt und mein Twilio-Konto aktiviert war, hatte ich alles, was ich brauchte, um mit der Codierung des Projekts zu beginnen.
Nachdem ich die Zugangsdaten für mein Twilio-Konto in eine config.js
und die Nachrichten, die ich sagen wollte, in ein Array, das von messages.js
konnte ich mein eigenes System einrichten. app.js
etwa so:
const cron = require('node-cron'); const config = require('./config'); const accountSid = config.ACCOUNT_SID; const authToken = config.AUTH_TOKEN; const client = require('twilio')(accountSid, authToken); const messages = require('./messages'); const job = cron.schedule('0 * * * *', () => { sendMessage(); }); let currentMessage = 0; function sendMessage() { client.messages .create({ body: messages.texts[currentMessage], from: config.TWILIO_NUMBER, to: config.RECEIPIENT_NUMBER }) .then(messages => { console.log(`Sent: ${currentMessage} - ${messages[currentMessage]}`) currentMessage++ if (currentMessage >= messages.MAX_TEXTS) { job.stop(); } }); }
Ich habe die App lokal ausgeführt, und die Texte gingen erfolgreich aus, um meine Partnerin jede Stunde zu überraschen. Da ich einfach nur dasaß und nicht einmal telefonierte, fragte sie ständig: "Wie machst du das?!
Die Moral von der Geschicht' ist also: Wenn Sie als Entwickler wachsen wollen, aber besondere Tage bevorstehen und Sie sich ein Geschenk ausdenken müssen ... warum nicht das Geschenk entwickeln?
Zurück zu Blog