Twilio-Bindung für Azure Functions

Dieser Artikel erläutert das Senden von Textnachrichten mithilfe von Twilio-Bindungen in Azure Functions. Azure Functions unterstützt Ausgabebindungen für Twilio.

Dies sind Referenzinformationen für Azure Functions-Entwickler. Falls Sie mit Azure Functions noch nicht vertraut sind, beginnen Sie mit den folgenden Ressourcen:

Installieren der Erweiterung

Das NuGet-Erweiterungspaket, das Sie installieren, hängt vom C#-Modus ab, den Sie in Ihrer Funktions-App verwenden:

Funktionen werden in einem isolierten C#-Workerprozess ausgeführt. Weitere Informationen finden Sie im Leitfaden zum Ausführen von Azure Functions (C#) in einem isolierten Workerprozess.

Die Funktionalität der Erweiterung ist abhängig von der Erweiterungsversion unterschiedlich:

Twilio wird derzeit für Apps in einem isolierten Workerprozess nicht unterstützt.

Installieren des Pakets

Ab Functions Version 2.x ist die HTTP-Erweiterung Teil eines Erweiterungspakets, das in Ihrer Projektdatei „host.json“ angegeben wird. Weitere Informationen finden Sie unter Erweiterungspakete.

Diese Version der Erweiterung sollte bereits für Ihre Funktions-App mit dem Erweiterungspaket, Version 2.x, verfügbar sein.

Beispiel

Sofern nicht anders angegeben, gelten diese Beispiele speziell für die Version 2.x und höhere Versionen der Functions-Runtime.

Eine C#-Funktion kann mit einem der folgenden C#-Modi erstellt werden:

  • Isoliertes Workermodell: Kompilierte C#-Funktion, die in einem Workerprozess ausgeführt wird, der von der Runtime isoliert ist. Ein isolierter Workerprozess ist erforderlich, um C#-Funktionen zu unterstützen, die in LTS- und Nicht-LTS-Versionen von .NET und .NET Framework ausgeführt werden.
  • In-Process-Modell: Kompilierte C#-Funktion, die im gleichen Prozess wie die Functions-Runtime ausgeführt wird.
  • C#-Skript: Wird hauptsächlich beim Erstellen von C#-Funktionen im Azure-Portal verwendet.

Für Funktions-Apps, die in einem isolierten Workerprozess ausgeführt werden, wird die Twilio-Bindung derzeit nicht unterstützt.

Das folgende Beispiel zeigt eine Twilio-Ausgabebindung in einer Datei function.json sowie eine JavaScript-Funktion, die die Bindung verwendet.

Die Bindungsdaten in der Datei function.json:

Beispiel für „function.json“:

{
  "type": "twilioSms",
  "name": "message",
  "accountSidSetting": "TwilioAccountSid",
  "authTokenSetting": "TwilioAuthToken",
  "from": "+1425XXXXXXX",
  "direction": "out",
  "body": "Azure Functions Testing"
}

Der JavaScript-Code sieht wie folgt aus:

module.exports = async function (context, myQueueItem) {
    context.log('Node.js queue trigger function processed work item', myQueueItem);

    // In this example the queue item is a JSON string representing an order that contains the name of a
    // customer and a mobile number to send text updates to.
    var msg = "Hello " + myQueueItem.name + ", thank you for your order.";

    // Even if you want to use a hard coded message in the binding, you must at least
    // initialize the message binding.
    context.bindings.message = {};

    // A dynamic message can be set instead of the body in the output binding. The "To" number 
    // must be specified in code. 
    context.bindings.message = {
        body : msg,
        to : myQueueItem.mobileNumber
    };
};

Vollständige PowerShell-Beispiele sind derzeit für SendGrid-Bindungen nicht verfügbar.

Im folgenden Beispiel wird gezeigt, wie Sie eine SMS-Nachricht unter Verwendung der Ausgabebindung senden, wie im folgenden Code (function.json) definiert.

    {
      "type": "twilioSms",
      "name": "twilioMessage",
      "accountSidSetting": "TwilioAccountSID",
      "authTokenSetting": "TwilioAuthToken",
      "from": "+1XXXXXXXXXX",
      "direction": "out",
      "body": "Azure Functions Testing"
    }

Sie können ein serialisiertes JSON-Objekt an den Parameter func.Out übergeben, um die SMS-Nachricht zu senden.

import logging
import json
import azure.functions as func

def main(req: func.HttpRequest, twilioMessage: func.Out[str]) -> func.HttpResponse:

    message = req.params.get('message')
    to = req.params.get('to')

    value = {
      "body": message,
      "to": to
    }

    twilioMessage.set(json.dumps(value))

    return func.HttpResponse(f"Message sent")

Im folgenden Beispiel wird gezeigt, wie Sie die Anmerkung TwilioSmsOutput verwenden, um eine SMS-Nachricht zu senden. In der Attributdefinition müssen Werte für to, from und body angegeben werden, auch wenn Sie sie programmgesteuert überschreiben.

package com.function;

import java.util.*;
import com.microsoft.azure.functions.annotation.*;
import com.microsoft.azure.functions.*;

public class TwilioOutput {

    @FunctionName("TwilioOutput")
    public HttpResponseMessage run(
            @HttpTrigger(name = "req", methods = { HttpMethod.GET, HttpMethod.POST },
                authLevel = AuthorizationLevel.FUNCTION) HttpRequestMessage<Optional<String>> request,
            @TwilioSmsOutput(
                name = "twilioMessage",
                accountSid = "AzureWebJobsTwilioAccountSID",
                authToken = "AzureWebJobsTwilioAuthToken",
                to = "+1XXXXXXXXXX",
                body = "From Azure Functions",
                from = "+1XXXXXXXXXX") OutputBinding<String> twilioMessage,
            final ExecutionContext context) {

        String message = request.getQueryParameters().get("message");
        String to = request.getQueryParameters().get("to");

        StringBuilder builder = new StringBuilder()
            .append("{")
            .append("\"body\": \"%s\",")
            .append("\"to\": \"%s\"")
            .append("}");

        final String body = String.format(builder.toString(), message, to);

        twilioMessage.setValue(body);

        return request.createResponseBuilder(HttpStatus.OK).body("Message sent").build();
    }
}

Attributes

Sowohl von C#-Bibliotheken des Typs In-Process als auch des Typs Isolierter Workerprozess werden Attribute verwendet, um die Ausgabebindung zu definieren. Vom C#-Skript wird stattdessen die Konfigurationsdatei function.json verwendet.

Für Funktions-Apps, die in einem isolierten Workerprozess ausgeführt werden, wird die Twilio-Bindung derzeit nicht unterstützt.

Anmerkungen

Mit der Anmerkung TwilioSmsOutput können Sie die Twilio-Ausgabebindung deklarativ konfigurieren, indem Sie die folgenden Konfigurationswerte angeben:

+

Platzieren Sie die Anmerkung TwilioSmsOutput in einem Parameter vom Typ OutputBinding<T>. T kann hierbei ein beliebiger nativer Java-Typ (beispielsweise int, String oder byte[]) oder ein POJO-Typ sein.

Konfiguration

Die folgende Tabelle gibt Aufschluss über die Bindungskonfigurationseigenschaften, die Sie in der Datei function.json festlegen (unterscheidet sich je nach Runtimeversion):

Eigenschaft von „function.json“ BESCHREIBUNG
type auf twilioSms festgelegt werden muss.
direction auf out festgelegt werden muss.
name Variablenname, der im Funktionscode für die Twilio-SMS-Textnachricht verwendet wird
accountSidSetting Dieser Wert muss auf den Namen einer App-Einstellung festgelegt werden, die Ihre Twilio-Konto-SID (TwilioAccountSid) enthält. Wenn sie nicht festgelegt wird, lautet der Standardname der App-Einstellung AzureWebJobsTwilioAccountSid.
authTokenSetting Dieser Wert muss auf den Namen einer App-Einstellung festgelegt werden, die Ihr Twilio-Authentifizierungstoken (TwilioAccountAuthToken) enthält. Wenn sie nicht festgelegt wird, lautet der Standardname der App-Einstellung AzureWebJobsTwilioAuthToken.
from Dieser Wert wird auf die Telefonnummer festgelegt, von der die SMS-Textnachricht gesendet wird.
body Dieser Wert kann verwendet werden, um die SMS-Textnachricht als vordefinierten Code festzulegen und nicht dynamisch im Code für die Funktion.

Legen Sie den Wert to in Version 2.x im Code fest.

Wenn Sie die Entwicklung lokal ausführen, fügen Sie Ihre Anwendungseinstellungen in der Datei local.settings.json in der -Sammlung hinzu.

Nächste Schritte