Associação de Twilio para o Azure Functions

Este artigo explica como enviar mensagens de texto usando-se as associações de Twilio no Azure Functions. O Azure Functions oferece suporte a uma associação de saída para o Twilio.

Essas são as informações de referência para desenvolvedores do Azure Functions. Se for novo no Azure Functions, comece com os seguintes recursos:

Instalar a extensão

O pacote NuGet da extensão instalado depende do modo C# usado no aplicativo de funções:

As funções são executadas em um processo de trabalho do C# isolado. Para saber mais, confira o Guia para executar C# do Azure Functions em um processo de trabalho isolado.

A funcionalidade da extensão varia de acordo com a versão da extensão:

Atualmente, não há compatibilidade com o Twilio para um aplicativo de processo de trabalho isolado.

Instalar pacote

A partir da versão Funções 2.x, a extensão HTTP faz parte de um pacote de extensão, que é especificado no arquivo de projeto host.json. Para saber mais, confira pacotes de extensão.

Esta versão da extensão já deve estar disponível para seu aplicativo de funções com o pacote de extensão na versão 2.x.

Exemplo

Salvo indicação em contrário, esses exemplos são específicos da versão 2.x e versões posteriores do runtime do Functions.

A função C# pode ser criada por meio de um dos seguintes modos C#:

  • Modelo de trabalho isolado: função C# compilada executada em um processo de trabalho que está isolado do runtime. É necessário um processo de trabalho isolado para dar suporte às funções C# executadas nas versões LTS e não LTS do .NET e do .NET Framework.
  • Modelo em processo: função C# compilada no mesmo processo que o runtime do Functions.
  • Script C#: usado principalmente ao criar funções C# no portal do Azure.

Importante

O suporte para o modelo em processo terminará em 10 de novembro de 2026. É altamente recomendável que você migre seus aplicativos para o modelo de trabalho isolado para obter suporte completo.

Atualmente, a associação do Twilio não é compatível com um aplicativo de funções em execução em um processo de trabalho isolado.

O exemplo a seguir mostra uma associação de saída do Twilio em um arquivo function.json e código script C# que usa a associação.

Aqui estão os dados de associação no arquivo function.json:

function.json de exemplo:

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

Aqui está o código 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
    };
};

Exemplos completos do PowerShell não estão disponíveis atualmente para as associações do SendGrid.

O exemplo a seguir mostra como enviar uma mensagem SMS usando a associação de saída, conforme definido no seguinte function.json.

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

Você pode passar um objeto JSON serializado para o parâmetro func.Out para enviar a mensagem 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")

O exemplo a seguir mostra como usar a anotação TwilioSmsOutput para enviar uma mensagem SMS. Os valores de to, from e body são necessários na definição do atributo, mesmo que você os substitua programaticamente.

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

Ambas as bibliotecas C# em processo e no processo de trabalho isolado usam atributos para definir a associação de saída. Em vez disso, o script C# usa um arquivo de configuração function.json.

Atualmente, a associação do Twilio não é compatível com um aplicativo de funções em execução em um processo de trabalho isolado.

Anotações

A anotação TwilioSmsOutput permite configurar declarativamente a associação de saída do Twilio fornecendo os seguintes valores de configuração:

+

Insira a anotação TwilioSmsOutput em um parâmetro OutputBinding<T> em que T pode ser qualquer tipo Java nativo, como int, String, byte[] ou um tipo POJO.

Configuração

A seguinte tabela explica as propriedades de configuração de associação que você define no arquivo function.json, que difere pela versão do runtime:

Propriedade function.json Descrição
tipo deve ser definido como twilioSms.
direction deve ser definido como out.
name Nome da variável usada no código de função para a mensagem de texto SMS do Twilio.
accountSidSetting Esse valor deve ser definido como o nome de uma Configuração de aplicativo que contém a SID da sua conta do Twilio (TwilioAccountSid). Se não estiver configurado, o nome da configuração do aplicativo padrão será AzureWebJobsTwilioAccountSid.
authTokenSetting Esse valor deve ser definido como o nome de uma Configuração de aplicativo que contém seu token de autenticação do Twilio (TwilioAccountAuthToken). Se não estiver configurado, o nome da configuração do aplicativo padrão será AzureWebJobsTwilioAuthToken.
from Esse valor é definido como o número de telefone com o qual será enviada a mensagem de texto SMS.
body Esse valor pode ser usado para fixar a mensagem de texto SMS no código se você não precisa defini-la dinamicamente no código de sua função.

Na versão 2.x, você definirá o valor to em seu código.

Quando você estiver desenvolvendo localmente, adicione as configurações do aplicativo no arquivo local.settings.json na coleção Values.

Próximas etapas