Compartilhar via


Receber uma mensagem SMS

Os recursos de SMS dos Serviços de Comunicação do Azure fornecem aos desenvolvedores opções 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 do Power Automate/Aplicativo Lógico e muito mais.

Depois de recebidas, as mensagens SMS podem ser processadas para responder a elas ou registrá-las em um banco de dados para acesso futuro.

Este artigo descreve como processar eventos de SMS recebidos por meio do Azure Functions usando gatilhos do Event Grid e conectores sem código para o 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 retornado MessageId por essa API é considerado um detalhe de implementação interna e está sujeito a alterações sem aviso prévio. Os clientes devem tratar as 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 o recurso dos Serviços de Comunicação do Azure.

Observação

O uso da Grade de Eventos do Azure gera mais custos. Para obter mais informações, consulte os preços da Grade de Eventos do Azure.

Pré-requisitos

O Grade de Eventos dá suporte imediato 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 pronto para uso, podemos configurar uma Função do Azure que é executada sempre que um evento é detectado que corresponde ao gatilho. Neste documento, nos concentramos nos gatilhos recebidos por SMS.

Configurando 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 da Grade de Eventos do Azure
    • Nome da função: definido pelo usuário

    Depois de criado, você verá 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 o evento SMS

  1. Configure a Função do Azure para analisar valores do evento, como quem o enviou, para qual número e qual era 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;
    
    

Neste ponto, você recebeu um SMS com sucesso por meio de eventos. Agora, as possibilidades do que fazer com esse evento vão desde apenas registrá-lo no log até responder a ele. Na próxima seção, nos concentramos em responder a esse 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.

Respondendo 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 invocando o SmsClient e inicializando-o com o connection string para o nosso recurso. Você pode colar a cadeia de conexão diretamente no código ou colocá-la dentro do arquivo local.settings.json no diretório de funções do Azure em valores.

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

  1. Em seguida, redigimos um SMS para enviar com base nos valores de to e from do evento que obtivemos.

    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;
    

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 no 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. Depois que a função estiver em execução, configure ngrok. Você precisa baixar o ngrok para seu ambiente.

    ngrok http 7071
    

    Copie o ngrok enlace fornecido onde sua função está rodando.

  2. Configure eventos SMS por meio da Grade de Eventos no recurso dos Serviços de Comunicação do Azure. Fazemos isso usando a CLI do Azure. Você precisa da ID de recurso para o recurso dos Serviços de Comunicação do Azure encontrado no portal do Azure. A ID do recurso é semelhante a: /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 no recurso dos Serviços de Comunicação do Azure. Você deve ver os logs do console no terminal em que a função está em execução. Se você adicionou o código para responder ao SMS, deverá ver essa mensagem de texto entregue de volta a você.

Publicar no Azure

Para implantar o Azure Function no Azure, você precisa seguir estas instruções. Depois de implantados, configuramos a Grade de Eventos para o recurso dos Serviços de Comunicação do Azure. Com a URL da Função do Azure 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, use o mesmo nome de assinatura de evento usado anteriormente.

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

Logic Apps e Power Automate fornecem conectores prontos para uso para ajudar a lidar com eventos gerados pelos Azure Communication Services por meio do Event Grid. Os Aplicativos Lógicos e o Power Automate fornecem o mesmo conjunto de conectores. Cabe a você decidir o que prefere, ler sobre as diferenças entre os serviços para informar sua decisão.

Manipulando eventos com o conector da Grade de Eventos

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

    Captura de tela da seleção de gatilho para o Power Automate.

  2. Agora, você pode configurar o conector. Você precisa fornecer uma assinatura que deseja usar. (Deve ser a mesma assinatura em que o recurso dos Serviços de Comunicação do Azure está). Especifique o tipo de recurso. Nesse 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 deseja que ele se conecte. Por fim, precisamos selecionar os tipos de evento que desejamos receber, nesse caso: Microsoft.Communication.SMSReceived.

    Captura de tela do conector da Grade de Eventos.

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

  3. Para facilitar nossas vidas posteriormente, adicione um Parse JSON connector para processar a resposta proveniente do conector da Grade de Eventos. Configure o conector para pegar o objeto Body do conector da Grade de Eventos e combiná-lo com o 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 tela do conector de análise JSON.

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

Respondendo 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 tela da página de instalaçã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ê-las. Toque nos números to e from para enviar um SMS de volta ao remetente original. Por fim, 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 recurso dos Serviços de Comunicação do Azure. Você deve receber de volta uma mensagem de texto.

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.

Limpar os recursos

Se quiser limpar e remover uma assinatura dos Serviços de Comunicação, exclua o recurso ou o grupo de recursos. Excluir o grupo de recursos também exclui todos os recursos associados a ele. Saiba mais sobre como limpar recursos.

Verificação por chamada gratuita

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

Próximas etapas