Enlace de Twilio para Azure Functions

En este artículo se explica cómo enviar mensajes de texto mediante los enlaces de Twilio en Azure Functions. Azure Functions admite los enlaces de salida para Twilio.

Esta es la información de referencia para desarrolladores de Azure Functions. Si está familiarizado con Azure Functions, comience con los siguientes recursos:

Instalación de la extensión

El paquete NuGet de la extensión que instale depende del modo de C# que esté usando en la aplicación de funciones:

Las funciones se ejecutan en un proceso de trabajo de C# aislado. Para más información, consulte Guía para ejecutar C# Azure Functions en un proceso de trabajo aislado.

La funcionalidad de la extensión varía en función de la versión de la extensión:

Actualmente no hay compatibilidad con Twilio para una aplicación de procesos de trabajo aislados.

Instalación del conjunto

A partir de Functions, versión 2.x, la extensión HTTP forma parte de un conjunto de extensiones, que se especifica en el archivo de proyecto host.json. Para obtener más información, consulte Conjuntos de extensiones.

Esta versión de la extensión ya debe estar disponible para la aplicación de función con el conjunto de extensiones, versión 2.x.

Ejemplo

A menos que se indique lo contrario, estos ejemplos son específicos de la versión 2.x y versiones posteriores del runtime de Functions.

Se puede crear una función C# mediante uno de los siguientes modos de C#:

  • Modelo de trabajo aislado: función compilada en C# que se ejecuta en un proceso trabajador aislado del tiempo de ejecución. Se requiere un proceso de trabajo aislado para admitir funciones de C# ejecutándose en versiones de .NET que son y no son LTS y .NET Framework.
  • Modelo en curso: función C# compilada que se ejecuta en el mismo proceso que el tiempo de ejecución de Functions.
  • Script de C#: se usa principalmente al crear funciones de C# en Azure Portal.

El enlace de Twilio no se admite actualmente para una aplicación de funciones que se ejecuta en un proceso de trabajo aislado.

En el ejemplo siguiente se muestra un enlace de salida de Twilio en un archivo function.json y una función de JavaScript que usa el enlace.

Estos son los datos de enlace del archivo function.json:

Function.json de ejemplo:

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

Este es el código de 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
    };
};

Los ejemplos completos de PowerShell no están disponibles actualmente para los enlaces de SendGrid.

En el ejemplo siguiente se muestra cómo enviar un mensaje SMS mediante el enlace de salida, tal y como se define en el siguiente archivo function.json.

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

Puede pasar un objeto JSON serializado al parámetro func.Out para enviar el mensaje 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")

En el ejemplo siguiente se muestra cómo utilizar la anotación TwilioSmsOutput para enviar un mensaje SMS. Los valores de to, from y body se requieren en la definición de atributo aunque se invaliden mediante programación.

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

Atributos

Las bibliotecas de C# en proceso y de proceso de trabajo aislado usan atributos para definir el enlace de salida. El script de C#, en su lugar, usa un archivo de configuración function.json.

El enlace de Twilio no se admite actualmente para una aplicación de funciones que se ejecuta en un proceso de trabajo aislado.

anotaciones

La anotación TwilioSmsOutput permite configurar el enlace de salida de Twilio mediante declaración proporcionando valores de configuración siguientes:

+

Coloque la anotación TwilioSmsOutput en un parámetro OutputBinding<T>, donde T pueda ser cualquier tipo de Java nativo como int, String,byte[] o un tipo POJO.

Configuración

En la siguiente tabla se explican las propiedades de configuración de enlace que definió en el archivo function.json, que difiere según la versión de tiempo de ejecución.

Propiedad de function.json Descripción
type Se debe establecer en twilioSms.
direction Se debe establecer en out.
name Nombre de variable usado en el código de función para el mensaje de texto SMS de Twilio.
accountSidSetting Este valor debe establecerse en el nombre de una configuración de aplicación que contiene el SID de la cuenta de Twilio (TwilioAccountSid). Si no está establecido, el nombre predeterminado de la configuración de aplicación es AzureWebJobsTwilioAccountSid.
authTokenSetting Este valor debe establecerse en el nombre de una configuración de aplicación que contiene el token de autenticación de Twilio (TwilioAccountAuthToken). Si no está establecido, el nombre predeterminado de la configuración de aplicación es AzureWebJobsTwilioAuthToken.
from Este valor se establece en el número de teléfono desde el que se envía el mensaje de texto SMS.
body Este valor se puede usar para codificar el mensaje de texto SMS si no necesita establecerlo dinámicamente en el código de la función.

En la versión 2.x, el valor to se establece en el código.

Cuando esté desarrollando localmente, agregue la configuración de la aplicación en el archivo local.settings.json de la colección Values.

Pasos siguientes