https://d226lax1qjow5r.cloudfront.net/blog/blogposts/how-send-receive-sms-messages-with-node-js-azure-functions-dr/E_SMS-Messages_Azure_1200x600-1.jpg

Senden und Empfangen von SMS-Nachrichten mit Node.js und Azure Functions

Zuletzt aktualisiert am November 11, 2020

Lesedauer: 4 Minuten

Dieser Blogbeitrag ist Teil der Angewandte Cloud-Geschichten Initiative.

Webhooks werden in der API-Welt immer beliebter, und Vonage verwendet sie für eine ganze Reihe unserer APIs. Also schreibe ich am Ende ziemlich viele davon. Da ich ein Node.js-Fan bin, habe ich die meisten von ihnen mit Express erstellt. Es war mühsam, einen Webserver aufzusetzen und ihn irgendwo einzusetzen, also habe ich mich nach Alternativen umgesehen. Serverless tauchte bei meinen Recherchen immer wieder als eine der guten Alternativen auf, also dachte ich, ich würde Azure-Funktionen und Node.js zum Senden und Empfangen von SMS-Nachrichten verwenden.

Für SMS werde ich die Vonage SMS APIdie es Ihnen ermöglicht, ein großes Volumen an SMS überall auf der Welt zu senden und zu empfangen. Sobald Sie Ihre virtuelle Telefonnummer haben, können Sie die API verwenden, um ausgehende Nachrichten ("Senden") und eingehende Nachrichten ("Empfangen") zu verwalten.

In diesem Artikel erfahren Sie, wie Sie SMS-Nachrichten mit Node Js senden und empfangen können. Node.js und einer Azure-Funktionen-App.

Den Code für dieses Tutorial finden Sie auf GitHub.

Voraussetzungen

Bevor Sie beginnen, vergewissern Sie sich, dass Sie alles haben:

Vonage API-Konto

Um dieses Tutorial durchzuführen, benötigen Sie ein Vonage API-Konto. Wenn Sie noch keines haben, können Sie sich noch heute anmelden und mit einem kostenlosen Guthaben beginnen. Sobald Sie ein Konto haben, finden Sie Ihren API-Schlüssel und Ihr API-Geheimnis oben auf dem Vonage-API-Dashboard.

Eine Azure Functions-App einrichten

Es gibt mehrere Möglichkeiten, wie Sie eine Azure Functions App einrichten können. Ich habe mich dafür entschieden, dies über das Azure-Portal.

Create Azure Functions AppCreate Azure Functions App

Ich habe ihr einen Namen gegeben send-receive-smsbenannt, eine neue Ressource dafür erstellt und Node.js als Laufzeitumgebung gewählt. Ich habe die Standardeinstellungen in Bezug auf Bereitstellung, Region und Pläne gewählt.

Sobald die Bereitstellung abgeschlossen ist (in der Regel etwa 2 Minuten), können Sie zur neu erstellten Ressource gehen und Ihre erste Funktion erstellen. Es gibt einen Assistenten, der Sie durch den Prozess führt, und ich habe ausgewählt VS-Code als Entwicklungsumgebung und "Direct publish" als Bereitstellungsmethode ausgewählt. Daraufhin erhielt ich eine Reihe von Anweisungen, wie VS Code für Azure einzurichten ist.

Create Azure Function quickstartCreate Azure Function quickstart

Sobald ich mit der Einrichtung fertig war, erstellte ich meine erste Funktion, einen HTTP-Trigger. Ich habe sie inboundgenannt, aber Sie können jeden beliebigen Namen verwenden. Für den Sicherheitsmechanismus gibt es einige Optionen, die die Berechtigungsstufe für die Funktion steuern: "Function" erfordert einen funktionsbasierten API-Schlüssel, "Admin" erfordert Ihren Haupt-API-Schlüssel von Azure und "Anonymous" erfordert keinen API-Schlüssel. Ich habe mich für "Anonymous" als Sicherheitsmechanismus entschieden. Damit wurde eine neue Datei mit einer Standardvorlage erstellt.

Create Azure Function templateCreate Azure Function template

Empfangen einer SMS-Nachricht

Erstellen einer Webhook-Funktion

Ich habe den Inhalt der Funktion so ersetzt, dass er mit dem SMS-Empfang-Codeausschnitt den wir in unserem Entwicklerportal verwenden. Es kombiniert den Textkörper und die Abfrageparameter einer Anfrage und protokolliert diese in der Konsole. Es handelt sich um einen einfachen Webhook, den Sie für den Empfang von SMS-Nachrichten auf der Vonage-Plattform verwenden können.

module.exports = async function(context, req) {
    const params = Object.assign(req.query, req.body);

    if (params.text) {
      context.log("SMS received", params);
    }

    context.res = {};
  };

Funktion bereitstellen

Da Vonage in der Lage sein muss, auf eine öffentliche URL zuzugreifen, habe ich meine Funktion mit Azure implementiert. Sie können dies in VS Code tun. Sobald die Bereitstellung abgeschlossen ist, erhalten Sie eine Live-URL für Ihre Funktion zurück, meine lautet zum Beispiel https://send-receive-sms.azurewebsites.net/api/inbound.

Deploy Azure FunctionDeploy Azure Function

Eingehende URL festlegen

Um eine SMS auf der Vonage Plattform zu empfangen, müssen Sie eine Vonage Number besitzen. Wenn Sie noch keine Nummer haben, können Sie eine im Vonage-Dashboard:

Buy Vonage Phone NumberBuy Vonage Phone Number

Wenn eine Vonage-Telefonnummer eine SMS-Nachricht erhält, leitet Vonage diese Nachricht an einen Webhook weiter, den Sie im Nexmo-Dashboard angegeben haben. Wir werden unsere Azure-Funktion als empfangenden Webhook verwenden. Um die Webhook-URL einzurichten, klicken Sie auf das kleine Zahnradsymbol neben Ihren Telefonnummern im Nexmo Dashboard und fülle das Feld "Inbound Webhook URL" mit der URL aus, die du nach der Bereitstellung der Azure-Funktion erhalten hast (meine war https://send-receive-sms.azurewebsites.net/api/inbound).

Set Inbound Webhook URL on the Vonage DashboardSet Inbound Webhook URL on the Vonage Dashboard

Sie können testen, ob es funktioniert, indem Sie eine SMS von Ihrem Telefon an Ihre Vonage-Telefonnummer senden, die in den Azure-Funktionsprotokollen angezeigt wird.

Versenden einer SMS-Nachricht

Ich dachte, es wäre schön, wenn die Funktion ein wenig mehr tun würde, als nur die SMS-Nachrichten zu protokollieren, also werde ich sie auch auf SMS-Nachrichten reagieren lassen, indem ich die Nachricht von Text in Emojis umwandle.

Ich werde das Vonage Node.js SDK für den Versand der SMS verwenden, also müssen Sie es in der Azure-Funktion installieren. Der oberste Ordner für Ihre Funktion enthält eine package.json Datei enthalten, die bei jeder Bereitstellung installiert wird. Wenn Sie also im Terminal zu diesem Ordner navigieren und npm install nexmoaufrufen, erhalten Sie Zugriff auf das Vonage SDK innerhalb der Azure-Funktion.

Ich habe auch die Funktion aktualisiert, um das Vonage SDK zu initialisieren, die SMS-Nachricht in Emojis umzuwandeln und sie dann als SMS an den ursprünglichen Absender zurückzuschicken.

module.exports = async function(context, req) {
  const Nexmo = require("nexmo");

  const nexmo = new Nexmo({
    apiKey: process.env["NEXMO_API_KEY"],
    apiSecret: process.env["NEXMO_API_SECRET"]
  });

  const params = Object.assign(req.query, req.body);

  if (params.text) {
    var response = [];

    // transform inbound SMS into emojis
    for (let i = 0; i < params.text.length; i++) {
      const emoji = String.fromCodePoint(127715 + params.text.charCodeAt(i));
      response.push(emoji);
    }

    // send SMS back with emojis
    nexmo.message.sendSms(
      params.to,
      params.msisdn,
      response.join(""),
      {
        type: "unicode"
      },
      (err, responseData) => {
        if (err) {
          context.log(err);
        } else {
          if (responseData.messages[0]["status"] === "0") {
            context.log("Message sent successfully.");
          } else {
            context.log(
              `Message failed with error: ${responseData.messages[0]["error-text"]}`
            );
          }
        }
      }
    );
  }

  context.res = {};
};

Sie werden feststellen, dass mein Code das Vonage SDK mit process.env["NEXMO_API_KEY"] und process.env["NEXMO_API_SECRET"]. Die Azure Function App hat Anwendungseinstellungen und ich habe meine NEXMO_API_KEY und NEXMO_API_SECRET hinzugefügt, die bei jeder Bereitstellung von meinem lokalen Rechner aus aktualisiert werden. Sie können dies ebenfalls tun oder diese Werte durch Ihren tatsächlichen API-Schlüssel und Ihr Geheimnis ersetzen. Sie finden diese auf der Seite "Getting Started" im Vonage Dashboard.

Add Application Settings in AzureAdd Application Settings in Azure

Die SDK-Methode zum Senden einer SMS, nexmo.message.sendSms()nimmt die Absender-ID, die Empfänger-Telefonnummer, die Textnachricht und Optionen als Parameter entgegen. Ich habe {type: "unicode"} in den Optionen hinzugefügt, weil ich Emojis versende. Sie akzeptiert auch einen Rückruf, der aufgerufen wird, wenn die API-Anforderung abgeschlossen ist.

Die Antwortdaten enthalten ein Array für alle gesendeten Nachrichten mit Informationen über deren Status. In den meisten Fällen handelt es sich um ein einziges Element in diesem Array, aber wenn die SMS länger als 160 Zeichen war, wird sie in eine mehrteilige SMS aufgeteilt, und dann enthält das Array Daten über jeden gesendeten Teil. Wenn der Status der Nachricht 0 ist, wurde die SMS erfolgreich gesendet, andernfalls befinden sich die Fehlerdaten für die Nachricht in der error-text Eigenschaft der Nachricht.

Da mein Text ein Emoji enthält, setze ich den Typ unicode im Optionsobjekt ein, andernfalls wird das Emoji über das Netzwerk als ?.

Probieren Sie es aus

Senden Sie nun eine SMS-Nachricht von Ihrem Telefon an Ihre Vonage-Nummer. Sie sollten eine SMS zurückerhalten, die Ihre Textzeichen in Emojis umwandelt. Wenn Sie die Hello World! in der SMS eingeben, sollten Sie 🌷🍈🍛🍗🌃🍐🍈🌃🍗🍈🍑🍇🍈🍕🌑 zurückerhalten.

Received SMS message with VonageReceived SMS message with Vonage

Ich hoffe, es hat funktioniert und Sie haben soeben gelernt, wie man SMS-Nachrichten mit den Vonage APIs, Azure Functions und Node.js sendet und empfängt.

Teilen Sie:

https://a.storyblok.com/f/270183/384x384/dabe7c5397/laka.png
Alex LakatosVonage Ehemalige

Alex Lakatos ist ein JavaScript-Entwickler Advocate für Nexmo. In seiner Freizeit engagiert er sich bei Mozilla als Tech Speaker und Reps Mentor. Als JavaScript-Entwickler, der auf dem offenen Web aufbaut, verschiebt er jeden Tag dessen Grenzen. Wenn er nicht gerade in London programmiert, reist er gerne um die Welt, so dass man ihn wahrscheinlich in einer Flughafen-Lounge antrifft.