https://a.storyblok.com/f/270183/95035/80e886b213/e_sms-messages_azure_1200x600-1.jpg

Como enviar e receber mensagens SMS com Node.js e Azure Functions

Publicado em November 11, 2020

Tempo de leitura: 5 minutos

Esta postagem do blog faz parte da iniciativa “Applied Cloud Stories” .

Os webhooks estão cada vez mais populares no mundo das APIs, e a Vonage os utiliza em várias de nossas APIs. Por isso, acabo criando muitos deles. Como sou fã do Node.js, costumava fazer a maioria deles com o Express. Era um trabalho dar e receber para inicializar um servidor web e fazer a implantação em algum lugar, então comecei a procurar alternativas. A tecnologia serverless aparecia constantemente nas minhas pesquisas como uma das melhores alternativas, então pensei em usar o Azure Functions e o Node.js para enviar e receber mensagens SMS.

Para SMS, vou usar a API da Vonage SMS API, que permite enviar e receber um grande volume de SMS em qualquer lugar do mundo. Depois de obter seu número de telefone virtual, você pode usar a API para gerenciar mensagens enviadas (“envio”) e mensagens recebidas (“recebimento”).

Neste artigo, você aprenderá a enviar e receber mensagens SMS com Node.js e um aplicativo do Azure Functions.

O código deste tutorial pode ser encontrado no GitHub.

Pré-requisitos

Antes de começar, certifique-se de ter:

Configurar um aplicativo do Azure Functions

Existem algumas maneiras de configurar um aplicativo do Azure Functions. Optei por fazê-lo a partir do Portal do Azure.

Create Azure Functions AppCreate Azure Functions App

Eu o chamei de send-receive-sms, criei um novo recurso para ele e escolhi o Node.js como ambiente de execução. Optei pelas configurações padrão em termos de implantação, região e planos.

Assim que a implantação for concluída (geralmente em cerca de 2 minutos), você pode acessar o recurso recém-criado e criar sua primeira função. Há um assistente que o orienta durante o processo, e eu selecionei o VS Code como meu ambiente de desenvolvimento e “Publicação direta” como meu método de implantação. Isso me forneceu um conjunto de instruções sobre como configurar o VS Code para o Azure.

Create Azure Function quickstartCreate Azure Function quickstart

Assim que terminei a configuração, criei minha primeira função, um gatilho HTTP. Eu a chamei de inbound, mas você pode usar o nome que quiser. Quanto ao mecanismo de segurança, há algumas opções que controlam o nível de autorização da função. “Função” exige uma chave de API baseada em função, “Admin” exige sua chave de API mestre do Azure e “Anônimo” não exige nenhuma chave de API. Escolhi “Anônimo” como mecanismo de segurança para ela. Isso criou um novo arquivo com um modelo padrão.

Create Azure Function templateCreate Azure Function template

Recebimento de uma mensagem SMS

Criar uma função de webhook

Substituí o conteúdo da função para que corresponda ao trecho de código “Receber um código por SMS” que usamos em nosso portal de desenvolvedores. Ele combina o corpo e os parâmetros de consulta de uma solicitação e registra isso no console. É um Webhook simples que você pode usar para receber mensagens SMS na plataforma da Vonage.

module.exports = async function(context, req) {
    const params = Object.assign(req.query, req.body);

    if (params.text) {
      context.log("SMS received", params);
    }

    context.res = {};
  };

Implantar função

Como o Vonage precisa ter acesso a uma URL pública, eu implantei minha função no Azure. Você pode fazer isso no VS Code. Assim que a implantação for concluída, você receberá uma URL ativa para sua função; por exemplo, a minha é https://send-receive-sms.azurewebsites.net/api/inbound.

Deploy Azure FunctionDeploy Azure Function

Definir URL de entrada

Para receber uma mensagem SMS na plataforma Vonage, é necessário ter um número da Vonage. Caso não tenha um, você pode adquirir um no Painel da Vonage:

Buy Vonage Phone NumberBuy Vonage Phone Number

Quando um número de telefone da Vonage recebe uma mensagem SMS, a Vonage encaminha essa mensagem para um webhook que você especificou no painel do Nexmo. Usaremos nossa função do Azure como o webhook de recepção. Para configurar a URL do webhook, clique no pequeno ícone de engrenagem ao lado de seus números de telefone no painel do Nexmo e preencha o campo “URL do Webhook de entrada” com a URL que você obteve após implantar a função do Azure (a minha era https://send-receive-sms.azurewebsites.net/api/inbound).

Set Inbound Webhook URL on the Vonage DashboardSet Inbound Webhook URL on the Vonage Dashboard

Você pode testar se está funcionando enviando um SMS do seu celular para o seu número de telefone da Vonage; ele aparecerá nos logs da função do Azure.

Envio de uma mensagem SMS

Achei que seria legal se a função fizesse um pouco mais do que apenas registrar as mensagens de SMS, então vou fazer com que ela também responda às mensagens de SMS, substituindo o texto da mensagem por emojis.

Vou usar o SDK do Vonage para Node.js para enviar a mensagem SMS, então você precisará instalá-lo na função do Azure. A pasta raiz da sua função contém um package.json arquivo que é instalado a cada implantação. Portanto, se você acessar essa pasta no Terminal e usar npm install nexmo, você terá acesso ao SDK da Vonage dentro da função do Azure.

Também atualizei a função para inicializar o SDK da Vonage, converter a mensagem SMS em emojis e, em seguida, enviá-la de volta como SMS para o remetente original.

module.exports = async function(context, req) {
  const Nexmo = require("nexmo");

  const nexmo = new Nexmo({
    apiKey: process.env["NEXMO_API_KEY"],
    apiSecret: process.env["NEXMO_API_SECRET"]
  });

  const params = Object.assign(req.query, req.body);

  if (params.text) {
    var response = [];

    // transform inbound SMS into emojis
    for (let i = 0; i < params.text.length; i++) {
      const emoji = String.fromCodePoint(127715 + params.text.charCodeAt(i));
      response.push(emoji);
    }

    // send SMS back with emojis
    nexmo.message.sendSms(
      params.to,
      params.msisdn,
      response.join(""),
      {
        type: "unicode"
      },
      (err, responseData) => {
        if (err) {
          context.log(err);
        } else {
          if (responseData.messages[0]["status"] === "0") {
            context.log("Message sent successfully.");
          } else {
            context.log(
              `Message failed with error: ${responseData.messages[0]["error-text"]}`
            );
          }
        }
      }
    );
  }

  context.res = {};
};

Você vai notar que meu código inicializa o SDK da Vonage com process.env["NEXMO_API_KEY"] e process.env["NEXMO_API_SECRET"]. O Azure Function App possui configurações de aplicativo e eu adicionei meu NEXMO_API_KEY e NEXMO_API_SECRET ali, e elas são atualizadas a cada implantação a partir da minha máquina local. Você também pode fazer isso ou substituir esses valores pela sua chave de API e seu segredo reais. Você pode encontrá-los na página “Introdução” no Painel da Vonage.

Add Application Settings in AzureAdd Application Settings in Azure

O método do SDK para enviar um SMS, nexmo.message.sendSms()aceita como parâmetros o ID do remetente, o número de telefone do destinatário, a mensagem de texto e as opções. Adicionei {type: "unicode"} nas opções porque estou enviando emojis. Ele também aceita um callback que é chamado quando a solicitação à API é concluída.

Os dados da resposta contêm uma matriz com todas as mensagens enviadas, incluindo informações sobre seu status. Na maioria dos casos, haverá apenas um elemento nessa matriz; porém, se a mensagem SMS tiver mais de 160 caracteres, ela será dividida em uma mensagem SMS com várias partes, e a matriz conterá dados sobre cada parte enviada. Se o status da mensagem for 0, a mensagem SMS foi enviada com sucesso; caso contrário, os dados de erro da mensagem estão na error-text propriedade da mensagem.

Como meu texto contém um emoji, estou definindo o tipo unicode no objeto de opções; caso contrário, esse emoji será enviado pela rede como ?.

Experimente

Agora envie uma mensagem SMS do seu celular para o seu número da Vonage. Você deve receber uma mensagem SMS de volta, na qual os caracteres do seu texto terão sido convertidos em emojis. Se você enviar Hello World! nesta mensagem SMS, você deve receber de volta 🌷🍈🍛🍗🌃🍐🍈🌃🍗🍈🍑🍇🍈🍕🌑.

Received SMS message with VonageReceived SMS message with Vonage

Espero que tenha dado certo e que você tenha acabado de aprender a enviar e receber mensagens SMS usando as APIs da Vonage, o Azure Functions e o Node.js.

Compartilhar:

https://a.storyblok.com/f/270183/384x384/dabe7c5397/laka.png
Alex LakatosEx-funcionários da Vonage

Alex Lakatos é um Developer Advocate de JavaScript na Nexmo. Em seu tempo livre, ele atua como voluntário na Mozilla como palestrante técnico e mentor do programa Reps. Como desenvolvedor de JavaScript que trabalha na web aberta, ele vem ampliando seus limites a cada dia. Quando não está programando em Londres, ele gosta de viajar pelo mundo; por isso, é provável que você o encontre em um lounge de aeroporto.