Enlace do Twilio para Funções do Azure

Este artigo explica como enviar mensagens SMS com enlaces do Twilio no Funções do Azure. Funções do Azure suporta enlaces de saída para o Twilio.

Estas são informações de referência para programadores Funções do Azure. Se não estiver familiarizado com Funções do Azure, comece com os seguintes recursos:

Instalar a extensão

O pacote NuGet de extensão que instalar depende do modo C# que está a utilizar na sua aplicação de funções:

As funções são executadas num processo de trabalho C# isolado. Para saber mais, veja Guia para executar Funções do Azure C# num processo de trabalho isolado.

A funcionalidade da extensão varia consoante a versão da extensão:

Atualmente, não existe suporte para o Twilio para uma aplicação de processo de trabalho isolada.

Pacote de instalação

A partir da versão 2.x das Funções, a extensão HTTP faz parte de um pacote de extensões, especificado no ficheiro de projeto host.json. Para saber mais, veja pacote de extensões.

Esta versão da extensão já deve estar disponível para a sua aplicação de funções com o pacote de extensões, versão 2.x.

Exemplo

Salvo indicação em contrário, estes exemplos são específicos da versão 2.x e versão posterior do runtime das Funções.

Uma função C# pode ser criada através de um dos seguintes modos C#:

  • Modelo de trabalho isolado: função C# compilada que é executada num processo de trabalho isolado do runtime. O processo de trabalho isolado é necessário para suportar funções C# em execução nas versões LTS e não LTS .NET e na .NET Framework.
  • Modelo no processo: função C# compilada que é executada no mesmo processo que o runtime das Funções.
  • Script C#: utilizado principalmente quando cria funções C# no portal do Azure.

O enlace do Twilio não é atualmente suportado para uma aplicação de funções em execução num processo de trabalho isolado.

O exemplo seguinte mostra um enlace de saída do Twilio num ficheiro function.json e uma função JavaScript que utiliza o enlace.

Eis os dados de enlace no ficheiro function.json :

Function.json de exemplo:

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

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

Os exemplos completos do PowerShell não estão atualmente disponíveis para enlaces do SendGrid.

O exemplo seguinte mostra como enviar uma mensagem SMS com o enlace de saída, conforme definido no function.json seguinte.

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

Pode transmitir um objeto JSON serializado para o func.Out parâmetro 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 seguinte mostra como utilizar a anotação TwilioSmsOutput para enviar uma mensagem SMS. Os valores para to, frome body são necessários na definição do atributo, mesmo que 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

Tanto as bibliotecas C# do processo de trabalho no processo no processocomo no plano isolado utilizam atributos para definir o enlace de saída. Em vez disso, o script C# utiliza um ficheiro de configuração function.json.

O enlace do Twilio não é atualmente suportado para uma aplicação de funções em execução num processo de trabalho isolado.

Anotações

A anotação TwilioSmsOutput permite-lhe configurar declarativamente o enlace de saída do Twilio ao fornecer os seguintes valores de configuração:

+

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

Configuração

A tabela seguinte explica as propriedades de configuração de enlace que definiu no ficheiro function.json , que difere pela versão do runtime:

propriedade function.json Description
tipo tem de estar definido como twilioSms.
direção tem de estar definido como out.
nome Nome da variável utilizado no código de função para a mensagem de texto SMS do Twilio.
accountSidSetting Este valor tem de ser definido como o nome de uma definição de aplicação que contém o Sid da Conta do Twilio (TwilioAccountSid). Quando não estiver definido, o nome predefinido da definição da aplicação é AzureWebJobsTwilioAccountSid.
authTokenSetting Este valor tem de ser definido como o nome de uma definição de aplicação que contém o token de autenticação do Twilio (TwilioAccountAuthToken). Quando não estiver definido, o nome predefinido da definição da aplicação é AzureWebJobsTwilioAuthToken.
a partir de Este valor está definido como o número de telefone a partir do qual o texto SMS é enviado.
corpo Este valor pode ser utilizado para codificar a mensagem sms de texto se não precisar de a definir dinamicamente no código da sua função.

Na versão 2.x, define o to valor no seu código.

Quando estiver a desenvolver localmente, adicione as definições da aplicação no ficheiro local.settings.json na Values coleção.

Passos seguintes