Associazione di Twilio per Funzioni di Azure

In questo articolo viene illustrato come inviare messaggi di testo tramite associazioni di Twilio in Funzioni di Azure. Funzioni di Azure supporta associazioni di output per Twilio.

Informazioni di riferimento per gli sviluppatori delle Funzioni di Azure. Se non si ha familiarità con le Funzioni di Azure, iniziare con le seguenti risorse:

Installare l'estensione

Il pacchetto NuGet di estensione installato dipende dalla modalità C# usata nell'app per le funzioni:

Le funzioni sono eseguite in un processo di lavoro C# isolato. Per altre informazioni, vedere Guida per l'esecuzione di Funzioni di Azure C# in un processo di lavoro isolato.

La funzionalità dell'estensione varia a seconda della versione dell'estensione:

Attualmente non è disponibile alcun supporto per Twilio per un'app del processo di lavoro isolato.

Installare il bundle

A partire da Funzioni versione 2.x, l'estensione HTTP fa parte di un bundle di estensione, specificato nel file di progetto host.json. Per altre informazioni, vedere bundle di estensioni.

Questa versione dell'estensione dovrebbe essere già disponibile per l'app per le funzioni con bundle di estensione versione 2.x.

Esempio

Se non diversamente specificato, questi esempi sono specifici della versione 2.x e successiva del runtime di Funzioni.

È possibile creare una funzione C# usando una delle modalità C# seguenti:

  • Modello di lavoro isolato: funzione C# compilata eseguita in un processo di lavoro isolato dal runtime. Il processo di lavoro isolato è necessario per supportare le funzioni C# in esecuzione in LTS e versioni non LTS .NET e .NET Framework.
  • Modello in-process: funzione C# compilata eseguita nello stesso processo del runtime di Funzioni.
  • Script C#: usato principalmente quando si creano funzioni C# nel portale di Azure.

L'associazione Twilio non è attualmente supportata per un'app per le funzioni in esecuzione in un processo di lavoro isolato.

L'esempio seguente illustra un'associazione di output di Twilio in un file function.json e una funzione JavaScript che usa l'associazione.

Ecco i dati di associazione nel file function.json:

Esempio di function.json:

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

Ecco il codice 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
    };
};

Gli esempi di PowerShell completi non sono attualmente disponibili per le associazioni SendGrid.

Nell'esempio seguente viene illustrato come inviare un messaggio SMS usando l'associazione di output come definito nel function.json seguente.

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

È possibile passare un oggetto JSON serializzato al func.Out parametro per inviare il messaggio 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")

Nell'esempio seguente viene illustrato come usare l'annotazione TwilioSmsOutput per inviare un messaggio SMS. I valori per to, frome body sono necessari nella definizione dell'attributo anche se ne viene eseguito l'override a livello di codice.

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

Attributi

Sia le librerie C# in-process che il processo di lavoro isolato usano attributi per definire l'associazione di output. Lo script C# usa invece un file di configurazione function.json.

L'associazione Twilio non è attualmente supportata per un'app per le funzioni in esecuzione in un processo di lavoro isolato.

Annotazioni

L'annotazione TwilioSmsOutput consente di configurare in modo dichiarativo l'associazione di output twilio specificando i valori di configurazione seguenti:

+

Inserire l'annotazione TwilioSmsOutput su un OutputBinding<T> parametro, dove T può essere qualsiasi tipo Java nativo, ad intesempio , Stringbyte[], o un tipo POJO.

Impostazione

La tabella seguente illustra le proprietà di configurazione dell'associazione impostate nel file function.json, che differisce dalla versione di runtime:

Proprietà di function.json Descrizione
type deve essere impostato su twilioSms.
direction deve essere impostato su out.
name Nome della variabile usato nel codice della funzione per il messaggio SMS di Twilio.
accountSidSetting Questo valore deve essere impostato sul nome di un'impostazione dell'app che contiene il Sid dell'account Twilio (TwilioAccountSid). Se non è impostato, il nome dell'impostazione predefinita dell'app è AzureWebJobsTwilioAccountSid.
authTokenSetting Questo valore deve essere impostato sul nome di un'impostazione dell'app che contiene il token di autenticazione Twilio (TwilioAccountAuthToken). Se non è impostato, il nome dell'impostazione predefinita dell'app è AzureWebJobsTwilioAuthToken.
da Questo valore è impostato sul numero di telefono da cui viene inviato il messaggio SMS.
body Questo valore può essere usato per impostare come hardcoded il messaggio SMS se non è necessario impostarlo dinamicamente nel codice per la funzione.

Nella versione 2.x impostare il to valore nel codice.

Quando si sviluppa in locale, aggiungere le impostazioni dell'applicazione nel file local.settings.json nella Values raccolta.

Passaggi successivi