Liaison Twilio pour Azure Functions

Cet article explique comment envoyer des SMS avec des liaisons Twilio dans Azure Functions. Azure Functions prend en charge les liaisons de sortie pour Twilio.

Il s’agit des informations de référence pour les développeurs Azure Functions. Si vous ne connaissez pas bien Azure Functions, commencez par consulter les ressources suivantes :

Installer l’extension

Le package NuGet de l’extension que vous installez dépend du mode C# que vous utilisez dans votre application de fonction :

Les fonctions s’exécutent dans un processus de travail C# isolé. Pour en savoir plus, consultez Guide pour l’exécution d’Azure Functions C# dans un processus Worker isolé.

La fonctionnalité de l’extension varie en fonction de la version de l’extension :

Il n’existe actuellement aucune prise en charge de Twilio pour une application de processus Worker isolé.

Installer le bundle

À partir de Functions version 2.x, l’extension HTTP fait partie d’une offre groupée d’extension, qui est spécifiée dans votre fichier projet host.json. Pour plus d’informations, consultez le bundle d’extensions.

Cette version de l’extension doit déjà être disponible pour votre application de fonction avec une offre groupée d’extension, version 2.x.

Exemple

Sauf indication contraire, ces exemples sont spécifiques à la version 2.x et aux versions ultérieures du runtime Functions.

Une fonction C# peut être créée à l’aide de l’un des modes C# suivants :

  • Modèle Worker isolé : fonction C# compilée exécutée dans un processus Worker isolé du runtime. Le processus Worker isolé est requis pour prendre en charge les fonctions C# exécutées sur les versions LTS et non-LTS de .NET et de .NET Framework.
  • Modèle in-process : fonction C# compilée exécutée dans le même processus que le runtime Functions.
  • Script C# : principalement utilisé lors de la création de fonctions C# dans le portail Azure.

La liaison Twilio n’est actuellement pas prise en charge pour une application de fonction qui s’exécute dans un processus Worker isolé.

L’exemple suivant montre une liaison de sortie Twilio dans un fichier function.json et une fonction JavaScript qui utilise la liaison.

Voici les données de liaison dans le fichier function.json :

Exemple de fichier function.json :

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

Voici le code JavaScript :

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
    };
};

Aucun exemple PowerShell complet n'est actuellement disponible pour les liaisons SendGrid.

L’exemple suivant indique comment envoyer un SMS à l’aide de la liaison de sortie telle que définie dans le fichier function.json suivant.

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

Vous pouvez transmettre un objet JSON sérialisé au paramètre func.Out pour envoyer le SMS.

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")

L’exemple suivant indique comment utiliser l’annotation TwilioSmsOutput pour envoyer un SMS. Les valeurs de to, from et body sont requises dans la définition de l’attribut même si vous les remplacez par programmation.

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();
    }
}

Attributs

Les bibliothèques C# In-process et de processus Worker isolé utilisent des attributs pour définir la liaison de sortie. Le script C# utilise à la place un fichier config function.json.

La liaison Twilio n’est actuellement pas prise en charge pour une application de fonction qui s’exécute dans un processus Worker isolé.

Annotations

L’annotation TwilioSmsOutput vous permet de configurer de manière déclarative la liaison de sortie Twilio en fournissant les valeurs de configuration suivantes :

+

Placez l’annotation TwilioSmsOutput sur un paramètre OutputBinding<T>, où T peut être n’importe quel type Java natif, comme int, String ou byte[], ou un type POJO.

Configuration

Le tableau suivant décrit les propriétés de configuration de la liaison que vous définissez dans le fichier function.json, qui diffère selon la version du runtime :

Propriété function.json Description
type Cette propriété doit être définie sur twilioSms.
direction Cette propriété doit être définie sur out.
name Nom de la variable utilisée dans le code de fonction pour le SMS Twilio.
accountSidSetting Cette valeur doit être définie sur le nom d’un paramètre d’application hébergeant le SID de votre compte Twilio (TwilioAccountSid). S’il n’est pas défini, le nom par défaut de l’application est AzureWebJobsTwilioAccountSid.
authTokenSetting Cette valeur doit être définie sur le nom d’un paramètre d’application hébergeant votre jeton d’authentification Twilio (TwilioAccountAuthToken). S’il n’est pas défini, le nom par défaut de l’application est AzureWebJobsTwilioAuthToken.
from Cette valeur est définie sur le numéro de téléphone à partir duquel est envoyé le SMS.
body Cette valeur peut être utilisée pour coder en dur le SMS, si vous n’avez pas besoin de procéder à une définition dynamique dans le code associé à votre fonction.

Dans la version 2.x, vous définissez la valeur to dans votre code.

Lorsque vous développez en local, ajoutez vos paramètres d’application dans le fichier local.settings.json de la collection .

Étapes suivantes