Partilhar via


Receber uma mensagem SMS

Os recursos de SMS dos Serviços de Comunicação do Azure fornecem opções aos desenvolvedores para consumir eventos recebidos por SMS. Os eventos são postados na Grade de Eventos do Azure, que fornece integrações prontas para processar aqueles que usam webhooks, Azure Functions, conectores Power Automate / Logic App e muito mais.

Uma vez recebidas, as mensagens SMS podem ser processadas para respondê-las ou registrá-las em um banco de dados para acesso futuro.

Este artigo descreve como processar eventos recebidos por SMS usando o Azure Functions com triggers do Event Grid e conectores sem código para Power Automate / Logic Apps.

O SMSReceived evento gerado quando um SMS é enviado para um número de telefone dos Serviços de Comunicação do Azure é formatado da seguinte maneira:

[{
  "id": "d29ebbea-3341-4466-9690-0a03af35228e",
  "topic": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/acse2e/providers/microsoft.communication/communicationservices/{communication-services-resource-name}",
  "subject": "/phonenumber/15555555555",
  "data": {
    "MessageId": "d29ebbea-3341-4466-9690-0a03af35228e",
    "From": "15555555555",
    "To": "15555555555",
    "Message": "Great to connect with Azure Communication Services events",
    "ReceivedTimestamp": "2020-09-18T00:27:45.32Z"
  },
  "eventType": "Microsoft.Communication.SMSReceived",
  "dataVersion": "1.0",
  "metadataVersion": "1",
  "eventTime": "2020-09-18T00:27:47Z"
}]

Observação

O formato de MessageId retornado por esta API é considerado um detalhe interno de implementação e pode ser alterado sem prévio aviso. Os clientes devem tratar IDs de mensagem como identificadores opacos e não devem analisar, inferir estrutura ou criar lógica com base em seu formato ou conteúdo.

Para começar a gerar eventos, configure a Grade de Eventos do Azure para usar seu recurso dos Serviços de Comunicação do Azure.

Observação

Usar a Grade de Eventos do Azure incorre em mais custos. Para obter mais informações, consulte Preços da Grade de Eventos do Azure.

Pré-requisitos

O Event Grid fornece suporte nativo ao Azure Functions, facilitando a configuração de um ouvinte de eventos sem a necessidade de lidar com a complexidade de analisar cabeçalhos ou depurar webhooks. Usando o gatilho pré-definido, podemos configurar uma Função do Azure que é executada sempre que é detetado um evento que corresponda ao gatilho. Neste documento, concentramo-nos nos gatilhos recebidos por SMS.

Configurando o nosso ambiente local

  1. Usando o Visual Studio Code, instale a Extensão do Azure Functions.

  2. Com a extensão, crie uma Função do Azure seguindo estas instruções.

    Configure a função com as seguintes instruções:

    • Idioma: TypeScript
    • Modelo: Gatilho de Grade de Eventos do Azure
    • Nome da função: definido pelo usuário

    Uma vez criada, você vê uma função criada em seu diretório como esta:

    
    import { AzureFunction, Context } from "@azure/functions"
    
    const eventGridTrigger: AzureFunction = async function (context: Context, eventGridEvent: any): Promise<void> {
        context.log(eventGridEvent);
    
    };
    
    export default eventGridTrigger;
    
    

Configurar o Azure Function para receber eventos SMS

  1. Configure o Azure Function para analisar valores do evento, como quem o enviou, para que número e qual foi a mensagem.

    
    import { AzureFunction, Context } from "@azure/functions"
    
    const eventGridTrigger: AzureFunction = async function (context: Context, eventGridEvent: any): Promise<void> {
       context.log(eventGridEvent);
       const to = eventGridEvent['data']['to'];
       const from = eventGridEvent['data']['from'];
       const message = eventGridEvent['data']['message'];
    
    };
    
    export default eventGridTrigger;
    
    

Nesta fase, lidaste com sucesso com a receção de um SMS através de eventos. Agora, as possibilidades do que fazer com esse evento vão desde apenas registrá-lo até responder a ele. Na próxima seção, nos concentramos em responder ao SMS que recebemos. Se você não quiser responder ao SMS, pule para a próxima seção sobre como executar a função localmente.

Responder ao SMS

  1. Para responder ao SMS de entrada, usamos os recursos de SMS do Serviço de Comunicação do Azure para enviar SMS. Começamos por invocar o SmsClient e inicializá-lo com o connection string para o nosso recurso. Você pode colar a string de conexão diretamente no código ou colocá-la dentro do seu arquivo local.settings.json no diretório da sua Função do Azure sob valores.

{
  "IsEncrypted": false,
  "Values": {
    "FUNCTIONS_WORKER_RUNTIME": "node",
    "ACS_CONNECTION_STRING": "<<CONNECTION STRING>>"
  }
}

  1. Em seguida, compomos um SMS para enviar com base nos valores to e from do evento que recebemos.

    import { AzureFunction, Context } from "@azure/functions"
    import { SmsClient } from "@azure/communication-sms";
    
    const connectionString = process.env.ACS_CONNECTION_STRING; //Replace with your connection string
    
    const eventGridTrigger: AzureFunction = async function (context: Context, eventGridEvent: any): Promise<void> {
        context.log(eventGridEvent);
        const to = eventGridEvent['data']['to'];
        const from = eventGridEvent['data']['from'];
        const message = eventGridEvent['data']['message'];
    
        const smsClient = new SmsClient(connectionString);
    
        const sendResults = await smsClient.send({
            from: to,
            to: [from],
            message: "Message received successfully. Will respond shortly."
        });
    
    };
    
    export default eventGridTrigger;
    

A partir daqui, as possibilidades são infinitas. Você pode responder a uma mensagem com uma resposta pré-escrita, adicionar um bot ou armazenar respostas adaptando o código na última etapa.

Executar localmente

Para executar a função localmente, pressione F5 em Visual Studio Code. Usamos o ngrok para conectar nossa Função do Azure em execução local com a Grade de Eventos do Azure.

  1. Quando a função estiver em execução, configure ngrok. Você precisa baixar o ngrok para o seu ambiente.

    ngrok http 7071
    

    Copie o ngrok link fornecido onde sua função está sendo executada.

  2. Configure eventos de SMS por meio da Grade de Eventos em seu recurso dos Serviços de Comunicação do Azure. Fazemos isso usando a CLI do Azure. Você precisa do ID do recurso para o seu serviço dos Serviços de Comunicação do Azure encontrado no portal do Azure. O ID do recurso é algo como: /subscriptions/<<AZURE SUBSCRIPTION ID>>/resourceGroups/<<RESOURCE GROUP NAME>>/providers/Microsoft.Communication/CommunicationServices/<<RESOURCE NAME>>

    az eventgrid event-subscription create --name "<<EVENT_SUBSCRIPTION_NAME>>" --endpoint-type webhook --endpoint "<<NGROK URL>> " --source-resource-id "<<RESOURCE_ID>>"  --included-event-types Microsoft.Communication.SMSReceived 
    
  3. Agora que tudo está conectado, teste o fluxo enviando um SMS para o número de telefone em seu recurso dos Serviços de Comunicação do Azure. Você deve ver os logs do console no terminal onde a função está sendo executada. Se você adicionou o código para responder ao SMS, você verá essa mensagem de texto entregue de volta para você.

Publicar no Azure

Para implantar a Função do Azure no Azure, você precisa seguir estas instruções. Depois de implantado, configuramos a Grade de Eventos para o recurso dos Serviços de Comunicação do Azure. Com a URL para a Função do Azure que foi implantada (URL encontrada no portal do Azure sob a função), executamos o seguinte comando:

az eventgrid event-subscription update --name "<<EVENT_SUBSCRIPTION_NAME>>" --endpoint-type azurefunction --endpoint "<<AZ FUNCTION URL>> " --source-resource-id "<<RESOURCE_ID>>"

Como estamos atualizando a assinatura de evento que criamos para testes locais, certifique-se de usar o mesmo nome de assinatura de evento que você usou anteriormente.

Você pode testar enviando um SMS para o número de telefone configurado em seu recurso dos Serviços de Comunicação do Azure.

Logic Apps e o Power Automate fornecem conectores prontos para uso para ajudar a gerir eventos gerados pelos Serviços de Comunicação do Azure por meio do Event Grid. Tanto o Logic Apps quanto o Power Automate fornecem o mesmo conjunto de conectores. Cabe a você decidir o que prefere, leia sobre as diferenças entre os serviços para informar sua decisão.

Trabalhar com eventos usando o conector Event Grid

  1. Comece criando um novo fluxo em seu ambiente preferido. Selecione o gatilho When a resource event occurs para começar.

    Captura de ecrã da seleção de gatilhos para Power Automate.

  2. Agora, você pode configurar o conector. Você precisa fornecer uma assinatura que deseja usar. (Deve ser a mesma assinatura em que está seu recurso dos Serviços de Comunicação do Azure). Especifique o tipo de recurso. Neste caso, escolha Microsoft.Communication.CommunicationServices. Em seguida, você precisa fornecer um nome de recurso para o recurso dos Serviços de Comunicação do Azure ao qual você deseja que ele se conecte. Finalmente, precisamos selecionar os tipos de eventos que queremos receber, neste caso: Microsoft.Communication.SMSReceived.

    Captura de ecrã do conector da Grelha de Eventos.

    O conector configura automaticamente a assinatura de evento em seu nome e configura os eventos que deseja receber.

  3. Para facilitar as nossas vidas mais tarde, adicione um Parse JSON connector para processar a resposta proveniente do conector do Event Grid. Configure o conector para pegar o Body objeto do conector da Grade de Eventos e combiná-lo com nosso esquema esperado para o evento:

    Esquema de exemplo (aberto para ver)
    
        {
            "properties": {
                "data": {
                    "properties": {
                        "From": {
                            "type": "string"
                        },
                        "Message": {
                            "type": "string"
                        },
                        "MessageId": {
                            "type": "string"
                        },
                        "ReceivedTimestamp": {
                            "type": "string"
                        },
                        "To": {
                            "type": "string"
                        }
                    },
                    "type": "object"
                },
                "dataVersion": {
                    "type": "string"
                },
                "eventTime": {
                    "type": "string"
                },
                "eventType": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "metadataVersion": {
                    "type": "string"
                },
                "subject": {
                    "type": "string"
                },
                "topic": {
                    "type": "string"
                }
            },
            "type": "object"
        }
    
    

    Captura de ecrã do conector Parse JSON.

Neste ponto, você manipulou com êxito o evento SMS. Você tem várias opções do que fazer com ele, desde registrar o evento até responder ao SMS. No contexto deste documento, respondemos à mensagem SMS recebida.

Responder ao SMS

  1. Comece adicionando o conector SMS ao nosso fluxo e configurando-o com as informações para nosso recurso dos Serviços de Comunicação do Azure. Ele permite que o conector acesse o recurso e envie o SMS em nosso nome. Você precisa do connection string para o seu recurso.

    Captura de ecrã da página de configuração do conector SMS.

  2. Em seguida, configuramos o conector com as informações para o remetente e o destinatário. Usamos as informações do evento que recebemos para preenchê-los. Inverta os números to e from para enviar um SMS de volta ao remetente original. Finalmente, adicione uma mensagem.

    Captura de tela da configuração do conector SMS.

Agora, você pode salvar o fluxo e testá-lo enviando um SMS para o número de telefone associado ao seu recurso dos Serviços de Comunicação do Azure. Você deve receber de volta uma mensagem de texto.

A partir daqui, as possibilidades são infinitas. Você pode responder a uma mensagem com uma resposta pré-escrita, adicionar um bot, armazenar a resposta ou adicionar automação de fluxo de trabalho.

Limpeza de recursos

Se pretende limpar e remover uma subscrição de Serviços de Comunicação, pode eliminar o recurso ou o grupo de recursos. A exclusão do grupo de recursos também exclui quaisquer outros recursos associados a ele. Saiba mais sobre a limpeza de recursos.

Verificação sem custos de chamada

Se você tiver um novo número gratuito e quiser enviar um grande volume de mensagens SMS ou enviar mensagens SMS para números de telefone canadenses, consulte SMS FAQ > Enviar verificação gratuita para saber como verificar seu número gratuito.

Próximos passos