Enlace de Twilio para Azure FunctionsTwilio binding for Azure Functions

En este artículo se explica cómo enviar mensajes de texto mediante los enlaces de Twilio en Azure Functions.This article explains how to send text messages by using Twilio bindings in Azure Functions. Azure Functions admite los enlaces de salida para Twilio.Azure Functions supports output bindings for Twilio.

Esta es la información de referencia para desarrolladores de Azure Functions.This is reference information for Azure Functions developers. Si está familiarizado con Azure Functions, comience con los siguientes recursos:If you're new to Azure Functions, start with the following resources:

Paquetes: Functions 1.xPackages - Functions 1.x

Los enlaces de Twilio se proporcionan en el paquete NuGet Microsoft.Azure.WebJobs.Extensions.Twilio, versión 1.x.The Twilio bindings are provided in the Microsoft.Azure.WebJobs.Extensions.Twilio NuGet package, version 1.x. El código fuente del paquete se encuentra en el repositorio azure-webjobs-sdk de GitHub.Source code for the package is in the azure-webjobs-sdk GitHub repository.

En la siguiente tabla se explica cómo agregar compatibilidad para este enlace en cada entorno de desarrollo.The following table tells how to add support for this binding in each development environment.

Entorno de desarrolloDevelopment environment Para agregar compatibilidad enTo add support in
Functions 1.xFunctions 1.x
Desarrollo local: biblioteca de clases C#Local development - C# class library Instalación del paqueteInstall the package
Desarrollo local: script de C#, JavaScript, F#Local development - C# script, JavaScript, F# AutomáticoAutomatic
Desarrollo con PortalPortal development AutomáticoAutomatic

Paquetes: Functions 2.xPackages - Functions 2.x

Los enlaces de Twilio se proporcionan en el paquete NuGet Microsoft.Azure.WebJobs.Extensions.Twilio, versión 3.x.The Twilio bindings are provided in the Microsoft.Azure.WebJobs.Extensions.Twilio NuGet package, version 3.x. El código fuente del paquete se encuentra en el repositorio azure-webjobs-sdk de GitHub.Source code for the package is in the azure-webjobs-sdk GitHub repository.

En la siguiente tabla se explica cómo agregar compatibilidad para este enlace en cada entorno de desarrollo.The following table tells how to add support for this binding in each development environment.

Entorno de desarrolloDevelopment environment Para agregar compatibilidad enTo add support in
Functions 2.xFunctions 2.x
Desarrollo local: biblioteca de clases C#Local development - C# class library Instalación del paqueteInstall the package
Desarrollo local: script de C#, JavaScript, F#, Java y PythonLocal development - C# script, JavaScript, F#, Java and Python Registro de la extensiónRegister the extension
Desarrollo con PortalPortal development Instalación al agregar el enlace de salidaInstall when adding output binding

Para saber cómo actualizar las extensiones de enlace existentes en el portal sin tener que volver a publicar su proyecto de aplicación de función, consulte Actualización de las extensiones.To learn how to update existing binding extensions in the portal without having to republish your function app project, see Update your extensions.

Ejemplo: Functions 1.xExample - Functions 1.x

Vea el ejemplo específico del lenguaje:See the language-specific example:

Ejemplo de C#C# example

En el ejemplo siguiente se muestra una función de C# que envía un mensaje de texto cuando se desencadena mediante un mensaje de cola.The following example shows a C# function that sends a text message when triggered by a queue message.

[FunctionName("QueueTwilio")]
[return: TwilioSms(AccountSidSetting = "TwilioAccountSid", AuthTokenSetting = "TwilioAuthToken", From = "+1425XXXXXXX" )]
public static SMSMessage Run(
    [QueueTrigger("myqueue-items", Connection = "AzureWebJobsStorage")] JObject order,
    TraceWriter log)
{
    log.Info($"C# Queue trigger function processed: {order}");

    var message = new SMSMessage()
    {
        Body = $"Hello {order["name"]}, thanks for your order!",
        To = order["mobileNumber"].ToString()
    };

    return message;
}

En este ejemplo se usa el atributo TwilioSms con el valor devuelto del método.This example uses the TwilioSms attribute with the method return value. Una alternativa es usar el atributo con un parámetro out SMSMessage o un parámetro ICollector<SMSMessage> o IAsyncCollector<SMSMessage>.An alternative is to use the attribute with an out SMSMessage parameter or an ICollector<SMSMessage> or IAsyncCollector<SMSMessage> parameter.

Ejemplo de script de C#C# script example

En el ejemplo siguiente se muestra un enlace de salida de Twilio en un archivo function.json y una función de script de C# que usa el enlace.The following example shows a Twilio output binding in a function.json file and a C# script function that uses the binding. La función usa un parámetro out para enviar un mensaje de texto.The function uses an out parameter to send a text message.

Estos son los datos de enlace del archivo function.json:Here's binding data in the function.json file:

Function.json de ejemplo:Example function.json:

{
  "type": "twilioSms",
  "name": "message",
  "accountSid": "TwilioAccountSid",
  "authToken": "TwilioAuthToken",
  "to": "+1704XXXXXXX",
  "from": "+1425XXXXXXX",
  "direction": "out",
  "body": "Azure Functions Testing"
}

Este es el código de script de C#:Here's C# script code:

#r "Newtonsoft.Json"
#r "Twilio.Api"

using System;
using Newtonsoft.Json;
using Twilio;

public static void Run(string myQueueItem, out SMSMessage message,  TraceWriter log)
{
    log.Info($"C# Queue trigger function processed: {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.
    dynamic order = JsonConvert.DeserializeObject(myQueueItem);
    string msg = "Hello " + order.name + ", thank you for your order.";

    // Even if you want to use a hard coded message and number in the binding, you must at least 
    // initialize the SMSMessage variable.
    message = new SMSMessage();

    // A dynamic message can be set instead of the body in the output binding. In this example, we use 
    // the order information to personalize a text message to the mobile number provided for
    // order status updates.
    message.Body = msg;
    message.To = order.mobileNumber;
}

No puede usar parámetros de salida en el código sincrónico.You can't use out parameters in synchronous code. Este es un ejemplo del código de script de C# asincrónico:Here's an asynchronous C# script code example:

#r "Newtonsoft.Json"
#r "Twilio.Api"

using System;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using Twilio;

public static async Task Run(string myQueueItem, IAsyncCollector<SMSMessage> message,  ILogger log)
{
    log.LogInformation($"C# Queue trigger function processed: {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.
    dynamic order = JsonConvert.DeserializeObject(myQueueItem);
    string msg = "Hello " + order.name + ", thank you for your order.";

    // Even if you want to use a hard coded message and number in the binding, you must at least 
    // initialize the SMSMessage variable.
    SMSMessage smsText = new SMSMessage();

    // A dynamic message can be set instead of the body in the output binding. In this example, we use 
    // the order information to personalize a text message to the mobile number provided for
    // order status updates.
    smsText.Body = msg;
    smsText.To = order.mobileNumber;

    await message.AddAsync(smsText);
}

Ejemplo de JavaScriptJavaScript example

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.The following example shows a Twilio output binding in a function.json file and a JavaScript function that uses the binding.

Estos son los datos de enlace del archivo function.json:Here's binding data in the function.json file:

Function.json de ejemplo:Example function.json:

{
  "type": "twilioSms",
  "name": "message",
  "accountSid": "TwilioAccountSid",
  "authToken": "TwilioAuthToken",
  "to": "+1704XXXXXXX",
  "from": "+1425XXXXXXX",
  "direction": "out",
  "body": "Azure Functions Testing"
}

Este es el código de JavaScript:Here's the JavaScript code:

module.exports = 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 and number 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. In this example, we use 
    // the order information to personalize a text message to the mobile number provided for
    // order status updates.
    context.bindings.message = {
        body : msg,
        to : myQueueItem.mobileNumber
    };

    context.done();
};

Ejemplo: Functions 2.xExample - Functions 2.x

Vea el ejemplo específico del lenguaje:See the language-specific example:

Ejemplo de C# 2.x2.x C# example

En el ejemplo siguiente se muestra una función de C# que envía un mensaje de texto cuando se desencadena mediante un mensaje de cola.The following example shows a C# function that sends a text message when triggered by a queue message.

using Microsoft.Azure.WebJobs;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json.Linq;
using Twilio.Rest.Api.V2010.Account;
using Twilio.Types;
namespace TwilioQueueOutput
{
    public static class QueueTwilio
    {
        [FunctionName("QueueTwilio")]
        [return: TwilioSms(AccountSidSetting = "TwilioAccountSid", AuthTokenSetting = "TwilioAuthToken", From = "+1425XXXXXXX")]
        public static CreateMessageOptions Run(
        [QueueTrigger("myqueue-items", Connection = "AzureWebJobsStorage")] JObject order,
        ILogger log)
        {
            log.LogInformation($"C# Queue trigger function processed: {order}");

            var message = new CreateMessageOptions(new PhoneNumber(order["mobileNumber"].ToString()))
            {
                Body = $"Hello {order["name"]}, thanks for your order!"
            };

            return message;
        }
    }
}

En este ejemplo se usa el atributo TwilioSms con el valor devuelto del método.This example uses the TwilioSms attribute with the method return value. Una alternativa es usar el atributo con un parámetro out CreateMessageOptions o un parámetro ICollector<CreateMessageOptions> o IAsyncCollector<CreateMessageOptions>.An alternative is to use the attribute with an out CreateMessageOptions parameter or an ICollector<CreateMessageOptions> or IAsyncCollector<CreateMessageOptions> parameter.

Ejemplo de script de C# 2.x2.x C# script example

En el ejemplo siguiente se muestra un enlace de salida de Twilio en un archivo function.json y una función de script de C# que usa el enlace.The following example shows a Twilio output binding in a function.json file and a C# script function that uses the binding. La función usa un parámetro out para enviar un mensaje de texto.The function uses an out parameter to send a text message.

Estos son los datos de enlace del archivo function.json:Here's binding data in the function.json file:

Function.json de ejemplo:Example function.json:

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

Este es el código de script de C#:Here's C# script code:

#r "Newtonsoft.Json"
#r "Twilio"
#r "Microsoft.Azure.WebJobs.Extensions.Twilio"

using System;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using Microsoft.Azure.WebJobs.Extensions.Twilio;
using Twilio.Rest.Api.V2010.Account;
using Twilio.Types;

public static void Run(string myQueueItem, out CreateMessageOptions message,  ILogger log)
{
    log.LogInformation($"C# Queue trigger function processed: {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.
    dynamic order = JsonConvert.DeserializeObject(myQueueItem);
    string msg = "Hello " + order.name + ", thank you for your order.";

    // You must initialize the CreateMessageOptions variable with the "To" phone number.
    message = new CreateMessageOptions(new PhoneNumber("+1704XXXXXXX"));

    // A dynamic message can be set instead of the body in the output binding. In this example, we use
    // the order information to personalize a text message.
    message.Body = msg;
}

No puede usar parámetros de salida en el código sincrónico.You can't use out parameters in synchronous code. Este es un ejemplo del código de script de C# asincrónico:Here's an asynchronous C# script code example:

#r "Newtonsoft.Json"
#r "Twilio"
#r "Microsoft.Azure.WebJobs.Extensions.Twilio"

using System;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using Microsoft.Azure.WebJobs.Extensions.Twilio;
using Twilio.Rest.Api.V2010.Account;
using Twilio.Types;

public static async Task Run(string myQueueItem, IAsyncCollector<CreateMessageOptions> message,  ILogger log)
{
    log.LogInformation($"C# Queue trigger function processed: {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.
    dynamic order = JsonConvert.DeserializeObject(myQueueItem);
    string msg = "Hello " + order.name + ", thank you for your order.";

    // You must initialize the CreateMessageOptions variable with the "To" phone number.
    CreateMessageOptions smsText = new CreateMessageOptions(new PhoneNumber("+1704XXXXXXX"));

    // A dynamic message can be set instead of the body in the output binding. In this example, we use
    // the order information to personalize a text message.
    smsText.Body = msg;

    await message.AddAsync(smsText);
}

Ejemplo de JavaScript 2.x2.x JavaScript example

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.The following example shows a Twilio output binding in a function.json file and a JavaScript function that uses the binding.

Estos son los datos de enlace del archivo function.json:Here's binding data in the function.json file:

Function.json de ejemplo:Example function.json:

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

Este es el código de JavaScript:Here's the JavaScript code:

module.exports = 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
    };

    context.done();
};

AtributosAttributes

En las bibliotecas de clases de C#, use el atributo TwilioSms.In C# class libraries, use the TwilioSms attribute.

Para información sobre las propiedades de atributo que puede configurar, consulte Configuración.For information about attribute properties that you can configure, see Configuration. A continuación, se muestra un ejemplo del atributo TwilioSms en una signatura de método:Here's a TwilioSms attribute example in a method signature:

[FunctionName("QueueTwilio")]
[return: TwilioSms(AccountSidSetting = "TwilioAccountSid", AuthTokenSetting = "TwilioAuthToken", From = "+1425XXXXXXX")]
public static CreateMessageOptions Run(
[QueueTrigger("myqueue-items", Connection = "AzureWebJobsStorage")] JObject order, ILogger log)
{
    ...
}

Para obtener un ejemplo completo, consulte Ejemplo de C#.For a complete example, see C# example.

ConfiguraciónConfiguration

En la siguiente tabla se explican las propiedades de configuración de enlace que se definen en el archivo function.json y el atributo TwilioSms.The following table explains the binding configuration properties that you set in the function.json file and the TwilioSms attribute.

Propiedad de function.json v1v1 function.json property Propiedad de function.json v2v2 function.json property Propiedad de atributoAttribute property DESCRIPCIÓNDescription
typetype typetype Se debe establecer en twilioSms.must be set to twilioSms.
direccióndirection direccióndirection Se debe establecer en out.must be set to out.
namename namename Nombre de variable usado en el código de función para el mensaje de texto SMS de Twilio.Variable name used in function code for the Twilio SMS text message.
accountSidaccountSid accountSidSettingaccountSidSetting AccountSidSettingAccountSidSetting Este valor debe establecerse en el nombre de una configuración de aplicación que contiene el SID de la cuenta de Twilio, p. ej. TwilioAccountSid.This value must be set to the name of an app setting that holds your Twilio Account Sid e.g. TwilioAccountSid. Si no está establecido, el nombre predeterminado de la configuración de aplicación es "AzureWebJobsTwilioAccountSid".If not set, the default app setting name is "AzureWebJobsTwilioAccountSid".
authTokenauthToken authTokenSettingauthTokenSetting AuthTokenSettingAuthTokenSetting Este valor debe establecerse en el nombre de una configuración de aplicación que contiene el token de autenticación de Twilio, p. ej. TwilioAccountAuthToken.This value must be set to the name of an app setting that holds your Twilio authentication token e.g. TwilioAccountAuthToken. Si no está establecido, el nombre predeterminado de la configuración de aplicación es "AzureWebJobsTwilioAuthToken".If not set, the default app setting name is "AzureWebJobsTwilioAuthToken".
toto N/D: especificar en códigoN/A - specify in code ToTo Este valor se establece en el número de teléfono al que se envía el mensaje de texto SMS.This value is set to the phone number that the SMS text is sent to.
fromfrom fromfrom FromFrom Este valor se establece en el número de teléfono desde el que se envía el mensaje de texto SMS.This value is set to the phone number that the SMS text is sent from.
bodybody bodybody CuerpoBody 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.This value can be used to hard code the SMS text message if you don't need to set it dynamically in the code for your function.

Cuando desarrolla localmente, la configuración de aplicación pasa al archivo local.settings.json.When you're developing locally, app settings go into the local.settings.json file.

Pasos siguientesNext steps