https://d226lax1qjow5r.cloudfront.net/blog/blogposts/sending-sms-from-python-with-google-cloud-functions-dr/Blog_Google-Cloud_SMS_1200x600-1.png

SMS-Versand aus Python mit Google Cloud Functions

Zuletzt aktualisiert am November 9, 2020

Lesedauer: 6 Minuten

Das folgende Tutorial zeigt, wie man eine Funktion auf Google Cloud-Plattform unter Verwendung von Python 3.7.

Die Funktion verwendet die Vonage SMS API, um eine Textnachricht an einen Benutzer zu senden. Der Anwendungsfall ist das Senden einer Nachricht, die den Benutzer zum Herunterladen einer App einlädt. Diese Funktion kann dann von einem JavaScript-Frontend aus aufgerufen werden. Sie können mit einer Google Cloud Function auch anspruchsvollere Dinge tun, aber dies ist eine einfache Demonstration, wie man zu einer einfachen funktionierenden Funktion kommt.

Warum dies tun

Vielleicht haben Sie schon von "Functions-as-a-Service" oder der Erstellung von "serverlosen" Anwendungen gehört: der Trend, einzelne Funktionen bei einem Cloud-Service-Anbieter wie Google, Amazon oder Microsoft ist gewachsen. Der Vorteil dieser Art von Architektur besteht darin, dass Sie Anwendungen in kleinstmögliche Teile - einzelne Funktionen - zerlegen und diese schnell und skalierbar erstellen können, ohne Server verwalten oder für nicht genutzte Dienste bezahlen zu müssen.

Diese Art der Bereitstellung ist besonders nützlich für das Hinzufügen eines sehr kleinen Teils des Backend-Codes für eine überwiegend statische Website. Sie können dann eine mit einem statischen Website-Generator erstellte Website auf einer Plattform wie GitHub Pages oder Netlifyhosten, ohne den Aufwand oder die Kosten für den Betrieb eines kompletten Webservers nur für eine Funktion.

Einrichten bei Google

Um mit der Google Cloud Platform zu beginnen, gehen Sie zu cloud.google.com und melden Sie sich an. Sie benötigen ein Google-Konto: Wenn Sie bereits ein Google-Konto für Google Mail, Android oder andere Google-Dienste verwenden, können Sie dieses nutzen.

Wenn Sie Google Cloud Platform bisher noch nicht genutzt haben, erhalten Sie im ersten Jahr ein großzügiges Guthaben im Wert von 300 $ (oder dem Gegenwert in Ihrer Landeswährung), das Sie nutzen können. Solange Ihre Website nicht extrem populär ist und ständig Besucher auf Ihre Website zugreifen, werden Sie wahrscheinlich nicht mehr als das kostenlose Guthaben verbrauchen.

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.

Einrichten von Vorraussetzungen

Google Cloud Functions können entweder für Node.js oder für Python 3 geschrieben werden. Wenn Sie Node.js verwenden, verwendet Google die Express Bibliothek, während für Python die Flask Framework für die Verarbeitung von Anfragen und Antworten verwendet wird. Jede Anfrage, die eingeht, wird an Ihre Funktion als flask.Request übergeben, und Ihre Funktion muss eine Antwort auf dieselbe Weise zurückgeben, wie sie es in einer Flask-Anwendung tun würde.

Eine Sache, mit der Sie umgehen müssen, ist das Cross-Origin Resource Sharing (CORS). Wir können dies lösen, indem wir Flask-CORS.

Der erste Schritt bei der Erstellung unserer Funktion besteht darin, im Abschnitt "Cloud-Funktionen" der Google Cloud Platform-Konsole auf "Funktion erstellen" zu klicken. Sie werden dann aufgefordert, einen Namen für Ihre Funktion festzulegen und einige Optionen auszuwählen.

Create a Google Cloud FunctionCreate a Google Cloud Function

Gehen wir diese kurz durch:

  • Der Name Ihrer Funktion wird auch in der URL verwendet, die zum Aufruf der Funktion dient.

  • Der Ihrer Funktion zugewiesene Speicher ist die maximale Menge an Speicher, die verwendet werden kann: Wenn Sie eine speicherintensive Funktion erstellen würden (z. B. für die Verarbeitung von Audio-/Videodateien), müssten Sie ihr mehr Speicher zuweisen.

  • Der Auslöser gibt an, wie Ihre Funktion aufgerufen wird. Da unsere Funktion von einem Formular auf einer Webseite aufgerufen werden soll, sollten wir sie auf HTTP einstellen, aber Sie können sie auch auf andere Aktionen einstellen.

  • Der Quellcode gibt an, wo sich der Code befindet: Für dieses Tutorial werden wir den Inline-Editor verwenden, aber dies kann geändert werden, um der Art und Weise zu entsprechen, wie Sie den Code entwickeln - er kann aus einer ZIP-Datei bereitgestellt werden, die Sie im Browser hochladen, aus einer ZIP-Datei, die Sie im Cloud-Speicher bereitstellen, oder aus einem Repository.

  • Die Laufzeit muss festgelegt werden: Standardmäßig ist Node.js eingestellt, aber wir werden für dieses Tutorial Python verwenden.

Unterhalb des Code-Editors gibt es eine Reihe erweiterter Optionen, die einen Blick wert sind:

  • Die Region: Sie ist standardmäßig auf us-central1 (Iowa, USA) eingestellt, aber wenn die meisten Ihrer Besucher aus Europa oder Asien kommen, sollten Sie sie auf europe-west1 (Belgien) oder asia-northeast1 (Tokio) einstellen. Wenn Sie dies ändern, ändert sich die URL.

  • Die Zeitüberschreitung ist auf 60 Sekunden eingestellt: Das sollte für unsere Zwecke ausreichen, aber Sie können dies anpassen. Denken Sie daran, dass die Nutzung der Cloud-Funktionen pro Millisekunde abgerechnet wird.

  • Die Umgebungsvariablen: Sie müssen zwei Umgebungsvariablen setzen: VONAGE_API_KEY und VONAGE_API_SECRET.

Unsere Funktion schaffen

Was Ihre individuelle Funktion macht, bleibt Ihnen überlassen. Ich habe ein einfaches Beispiel geschrieben, das Sie sich auf Gist oder unten lesen können. Es nimmt zwei Argumente:

  • phone: die Telefonnummer, an die wir die Nachricht senden wollen. Vonage benötigt die Nummer im E.164-Format.

  • platformdas Betriebssystem des Geräts des Benutzers - entweder iOS oder Android. Davon hängt ab, ob sie eine Nachricht erhalten, die sie mit dem Apple App Store oder dem Google Play Store verbindet.

import vonage
from flask import jsonify

def send_sms(request):
    data = request.get_json()

    # VONAGE_API_KEY and VONAGE_API_SECRET are in env vars
    # which are set in the Google Cloud function
    client = vonage.Client()

    # you may prefer to use link shorteners to see how many clickthroughs happen
    ios_msg = "Download our iOS app from https://example.org/apple"
    android_msg = "Download our Android app from https://example.org/android"

    if data['platform'] == "ios":
        msg = ios_msg
    elif data['platform'] == "android":
        msg = android_msg

    # you need some more data checking here. just an example...
    args = {
        'from': 'MyApp',
        'to': data['phone'],
        'text': msg
    }
    response = client.send_message(args)
    return jsonify(response)

Wenn Sie Ihre Funktion geschrieben haben, können Sie sie am einfachsten bereitstellen, indem Sie sie kopieren und in den Code-Editor auf der Google Cloud Functions-Website einfügen. Unterhalb des Code-Editors müssen Sie den Namen der auszuführenden Funktion festlegen - so erfahren Sie, welche Funktion in Ihrer Datei aufgerufen werden soll. Im Abschnitt "Erweitert" müssen Sie auch die Umgebungsvariablen festlegen, VONAGE_API_KEY und VONAGE_API_SECRET.

Set environment variablesSet environment variables

Wenn Sie fertig sind, klicken Sie auf "Speichern", warten Sie ein paar Augenblicke, bis die magischen Roboter von Google die Funktion eingerichtet haben, und dann können Sie sie testen.

curl -X "POST" "https://us-central1-youraccountname.cloudfunctions.net/app-sms" \ -H 'Content-Type: application/json; charset=utf-8' \ -d $'{ "phone": " 447700900000 ", "platform": "ios" }'

Zur Veranschaulichung wird das folgende Bild von der SMS API:

{
  "message-count": "1",
  "messages": [
    {
      "status": "0",
      "network": "23410",
      "remaining-balance": "10.00000000",
      "to": "447700900000",
      "message-price": "0.03330000",
      "message-id": "1500000000000AA1"
    }
  ]
}

(Es wird dringend empfohlen, Informationen wie die Nachrichten-ID herauszufiltern, anstatt sie an das Frontend zurückzuschicken).

Front-End-Integration

Sobald Sie die Funktion geschrieben haben, besteht der nächste Schritt darin, diesen Funktionsaufruf in ein Frontend zu integrieren. Bei einem JavaScript-basierten Frontend müssen Sie sicherstellen, dass alle Cloud-Funktionen, die Sie aufrufen, die Cross-Origin Resource Sharing (CORS) Header für die Domänen zurücksenden, aus denen sie aufgerufen werden.

Jeder Code, den Sie schreiben und in der Produktion verwenden, muss ein wenig ausgefeilter sein als das hier gezeigte Beispiel: Sie müssen dafür sorgen, dass Sie nicht zu viele Nachrichten senden. Nur weil Ihr Code "serverlos" ist, heißt das nicht, dass Sie sich keine Gedanken über die Sicherheit machen müssen. Ihre Funktionen sind zwar klein und in sich geschlossen, was bedeutet, dass sie keinen Einfluss auf anderen Code haben können, aber Sie müssen dennoch sicherstellen, dass Sie die Daten, die in Ihre Funktion eingehen, validieren und dass die APIs, die von Ihrer Funktion aus aufgerufen werden (einschließlich der APIs von Vonage), sicher aufgerufen werden.

Was nun?

Mit den Cloud-Funktionen von Google können Sie, wie mit den Azure-Funktionen von Microsoft und den Lambda-Funktionen von Amazon Web Services, sehr einfache APIs erstellen, für die Sie nur bei der Ausführung bezahlen. Sie eignen sich perfekt für die Integration in statische Websites, in JavaScript-Frontends oder in mobile Anwendungen.

Sie können verwendet werden, um Dienste von mehreren API-Anbietern zusammenzufügen. Zum Beispiel könnten Sie Cloud-Funktionen verwenden, um:

  • auf Webhook-Ereignisse von Voice-Diensten von Vonage reagieren

  • Benachrichtigungen von GitHub oder Ihrem Dienst für kontinuierliche Integration erhalten und dann eine Textnachricht auslösen, wenn eine Bedingung erfüllt ist

  • Informationen aus Ihrem E-Commerce-System und Ihrem Zahlungsanbieter zusammenführen, um eine Dankesnachricht an einen Kunden zu senden, wenn seine Bestellung versandt wurde

  • Speicherung von Analysedaten aus Ihrer mobilen Anwendung in einer Datenbank wie Firestore

Sobald Sie Ihre erste Funktion erstellt haben, erkennen Sie, wie sie alle möglichen Probleme lösen kann, an denen Sie gerade arbeiten.

Teilen Sie:

https://a.storyblok.com/f/270183/384x384/cd91b5afd9/tom.png
Tom Morris

Polyglot hacker and lifelong student trying a little bit of everything and documenting the experience.