Tuesday, 29 June, 2021 UTC


Summary


Hallo und Danke fürs Lesen! Dieser Blogpost ist eine Übersetzung von Building an SMS notification service with Serverless. Während wir unsere Übersetzungsprozesse verbessern, würden wir uns über Dein Feedback an [email protected] freuen, solltest Du etwas bemerken, was falsch übersetzt wurde. Wir bedanken uns für hilfreiche Beiträge mit Twilio Swag :)
Ethereum ist eine Blockchain mit einer Kryptowährung. Wie bei Bitcoin müssen Benutzer die Kosten tragen, wenn sie über Ethereum Transaktionen senden oder mit einem Smart Contract (Programm, das auf der Blockchain ausgeführt wird) interagieren. Diese Transaktionskosten werden bei Ethereum als Gaspreise bezeichnet, und der Preis kann je nach Auslastung variieren. Wenn sich viele Benutzer auf dem Netzwerk tümmeln, können die Gaspreise enorm steigen. Weitere Informationen zu Gaspreisen und wie sie diesen Sommer geradezu explodierten, findest du hier. Versierte Benutzer warten daher, bis die Gaspreise sinken, bevor sie mit Smart Contracts auf Ethereum interagieren. Die SMS-API von Twilio ist das ideale Tool, um sich über die Gaspreise auf dem Laufenden zu halten. In diesem Blog zeige ich, wie wir eine Serverless-Anwendung schreiben, die eine SMS-Benachrichtigung sendet, wenn die Gaspreise unter ein bestimmtes Niveau sinken.
Wenn du kein Interesse an Gaspreisen hast, kann der Ablauf in diesem Tutorial auch verwendet werden, um jede HTTPS-REST-API über Serverless mit der SMS-API von Twilio zu verbinden und Abfragen zu stellen.
Technische Voraussetzungen
Für dieses Tutorial benötigen wir Folgendes:
  • Ein kostenloses Twilio-Konto. Wenn du dich über diesen Link registrierst, erhältst du ein Guthaben von 10 $ bei einem Upgrade auf ein kostenpflichtiges Konto.
  • Ein Serverless-Konto
  • Installiertes Node.js und npm
Fangen wir an.
Erstellen einer Serverless-Anwendung
Wir verwenden das Serverless-Framework, um unsere Anwendung zu schreiben. Serverless eignet sich ideal zum Erstellen von serverlosen Funktionen, die auf AWS Lambda gehostet werden. Serverless abstrahiert die AWS-Schnittstelle für uns, d. h., wir können über die Benutzeroberfläche von Serverless arbeiten und müssen nur minimalen Gebrauch der AWS-Konsole machen. Wir lösen unsere Funktionen nur zu bestimmten Zeitintervallen aus, deshalb benötigen wir keinen Server, der rund um die Uhr ausgeführt wird. Für dieses Tutorial nutzen wir die kostenlose Stufe von Serverless, damit uns keine Kosten entstehen.
Wir installieren die Severless-CLI als globales npm-Modul.
npm install -g serverless 
Dann erstellen wir ein neues Verzeichnis und führen den folgenden Befehl aus, um eine serverlose Anwendung zu erzeugen.
serverless create --template aws-nodejs 
Nachdem wir unser Konto erstellt haben, wählen wir in der Benutzeroberfläche von Serverless.com die Option „Create app“ und anschließend „Serverless Framework“ aus.
Wir öffnen die neu erstellte servless.yml und fügen die org hinzu (wie in der Benutzeroberfläche dargestellt). Außerdem heben wir in der serverless.yml die Auskommentierung auf und aktualisieren den Pfad wie folgt:
 events: - http: path: gas method: get 
Dadurch wird ein Endpunkt für die Auslösung unserer serverlosen Funktion erzeugt. Später ersetzen wir diesen durch einen geplanten Timer für eine Auslösung zu bestimmten Zeitintervallen.
Wir melden uns an und führen die Bereitstellung in der CLI mit folgendem Befehl durch:
serverless login serverless // only required for first time using serverless to setup AWS credentials see http://slss.io/aws-creds-setup serverless deploy 
Wir sollten jetzt unsere Anwendung im Dashboard von Severless.com sehen. Die Serverless-Benutzeroberfläche und die Konsolenausgabe zeigen uns auch den URL-Endpunkt an. Wir testen in unserem Browser, ob die Funktion richtig bereitgestellt wurde.
Abfragen der DeFi Pulse-API
Die Gaspreise fragen wir über die Gas Station-API ab. Dazu senden wir eine GET-Anfrage an die folgende URL:
https://data-api.defipulse.com/api/v1/egs/api/ethgasAPI.json
Wenn wir das in unserem Browser, in Postman oder über curl testen, erhalten wir ein Objekt mit den Gaspreisdaten zurück. Wir fügen diese Anfrage der handler.js-Funktion hinzu:
const axios = require("axios"); module.exports.hello = async (event) => { const gasData = await axios .get("https://data-api.defipulse.com/api/v1/egs/api/ethgasAPI.json") .catch((err) => { console.error(err.response); return err.response; }); if (gasData.status != 200) { return { statusCode: gasData.statusCode, body: JSON.stringify(gasData.statusText), }; } return { statusCode: 200, body: JSON.stringify(gasData.data) }; }; 
Hier haben wir Axios verwendet, um unsere HTTPS-Anfrage zu stellen. Weitere Informationen zum Stellen von Anfragen findest du hier. Wir installieren Axios mit dem Befehl npm install axios. Dann führen wir unsere serverlose Funktion lokal aus, um zu sehen, ob sie auch funktioniert. Um die Funktion lokal auszuführen, installieren wir das Plug-in „serverless-offline“ mit dem Befehl npm install serverless-offline --save-dev und fügen es unserer YML-Datei hinzu:
plugins: - serverless-offline 
Anschließend führen wir Folgendes aus:
serverless offline 
Wenn wir jetzt im Browser http://localhost:3000/dev/users/create aufrufen, sollten wir ein JSON-Objekt mit den erforderlichen Gaspreisdaten sehen. Im Terminal werden die Protokolle angezeigt, wenn wir lokal arbeiten. Sobald das funktioniert, können wir mit dem Befehl serverless deploy eine Remote-Bereitstellung durchführen, um das Gleiche unter der bereitgestellten URL zu sehen.
Hinzufügen von Twilio
Wir verfügen nun über die erforderlichen Daten. Im nächsten Schritt müssen wir unsere Funktion mit Twilio verbinden und eine SMS senden. Falls wir noch keine Telefonnummer haben, müssen wir zuerst eine kaufen. Wir melden uns hierzu an der Twilio-Konsole an und navigieren zu „Phone Numbers“ > „Buy a Number“. Wir suchen nach einer Nummer, die für SMS aktiviert ist, und kaufen sie.
Wir öffnen unsere serverless.yml und fügen ihr Folgendes als Umgebungsvariablen hinzu:
 environment: TWILIO_SID: YOUR_TWILIO_SID TWILIO_AUTH: YOU_TWILIO_AUTH_TOKEN FROM: YOUR_TWILIO_NUMBER # for number use this format '+15017122661' TO: RECIPIENT_NUMBER 
Unsere Twilio ACCOUNT_SID und das Twilio AUTH TOKEN finden wir im Konsolen-Dashboard.
Als Nächstes installieren wir mit npm die Twilio-Hilfebibliothek für unsere Funktion. Dann importieren wir sie und übergeben unsere Anmeldeinformationen, um einen Twilio-Client zu erstellen.
const client = require("twilio")( process.env.TWILIO_SID, process.env.TWILIO_AUTH ); 
Innerhalb unserer Funktion können wir nach der if-Anweisung, die Fehler aufgreift, Folgendes hinzufügen:
 // if (gasData.data.safeLow < 40) { const message = await client.messages.create({ body: `🦉 Gas Prices are low. Currently fast: ${gasData.data.fast}, fastest: ${gasData.data.fastest}, safeLow: ${gasData.data.safeLow}, average: ${gasData.data.average},`, from: process.env.FROM, to: process.env.TO, }); // } 
Wir führen einen weiteren lokalen Test durch. Wenn lokal Fehler auflaufen, schreiben wir Protokolle und prüfen die Fehler im Terminal, um sie zu beheben. Wenn alles richtig funktioniert, heben wir die Auskommentierung der if-Anweisung auf, damit Benachrichtigungen nur gesendet werden, wenn die Gaspreise niedrig sind. Wir können die Parameter der if-Anweisung auf jede gewünschte Stufe anpassen.
Planen von Triggern
Wir haben unsere Funktion zum Laufen gebracht. Jetzt können wir unseren Trigger von einem Endpunkt-Trigger in einen geplanten Trigger ändern. Diesen Vorgang führen wir wiederum in unserer serverless.yml aus. Wir suchen den Abschnitt events und entfernen das HTTP-Attribut. Wir heben die Auskommentierung des Werts „schedule“ auf und ersetzen ihn durch ein Zeitintervall unserer Wahl.
 events: - schedule: rate(2 hours) 
Wir führen ein letztes Mal serverless deploy aus. Gut gemacht! Jetzt haben wir ein serverloses SMS-Benachrichtigungssystem, das uns bei niedrigen Gaspreisen benachrichtigt.
Fazit
In diesem Tutorial haben wir gesehen, wie wir ein SMS-Benachrichtigungssystem für Ethereum-Gaspreise erstellen. Weitere Anregungen zu Blockchains und Twilio findest du in folgenden Blogs: Tägliches Abrufen und Senden von aktuellen Bitcoin-Kursen mit CEX.io, Twilio-SMS und PHP und Konvertieren von Bitcoin in lokale Währungen mit PHP. Wenn du an einer Entwicklung mit Blockchain und Twilio arbeitest, würde ich gern davon erfahren. Kontaktiere mich auf Twitter oder sende eine E-Mail an [email protected].
Wir können den Gas Station-API-Aufruf natürlich auch durch jede andere REST-API ersetzen, die wir lieber verwenden oder auf die wir Zugriff haben. Serverless und Twilio sind ein tolles Team zum Erstellen dieser Art von Diensten, mit denen wir uns selbst oder unseren Benutzern unterwegs Benachrichtigungen senden können.