https://a.storyblok.com/f/270183/89975/bfae05522d/e_sms-to-slack_1200x600.jpg

Encaminhar SMS da Nexmo para o Slack usando Express e Node

Publicado em May 18, 2021

Tempo de leitura: 9 minutos

Introdução

Os números virtuais da Nexmo permitem que você envie ou receba mensagens de texto e chamadas telefônicas, o que pode servir como um meio eficaz de comunicação com seus usuários ou clientes.

Neste tutorial usando Node e Express, veremos como podemos notificar automaticamente um canal do Slack sempre que um número virtual da Nexmo receber uma mensagem de texto. A notificação conterá o conteúdo da mensagem de texto recebida. Isso pode ser muito útil, pois significa que sempre seremos notificados quando recebermos uma mensagem de texto, e o canal do Slack pode funcionar como um local central para acompanhar as mensagens de texto recebidas.

Pré-requisitos

  • Node.js

  • ngrok que permite expor seu servidor web local à internet. Para saber mais sobre como configurar seu ambiente local com o ngrok, você pode conferir a documentação aqui.

  • Slack

Instalar dependências do Node

Na raiz do diretório do seu projeto, execute o seguinte comando para criar um package.json arquivo.

npm init

Isso exibirá uma série de perguntas para você responder; as configurações padrão funcionam bem para este tutorial. Para instalar todas as dependências do nosso projeto, execute o seguinte comando:

npm install express body-parser slack-notify
  • express é uma estrutura de aplicativos web para Node.js.

  • body-parser é um middleware do Express para analisar os corpos das solicitações recebidas.

  • slack-notify é um wrapper em Node.js para a API de Webhooks do Slack , que facilita o envio de notificações para o Slack a partir do seu aplicativo.

Em seguida, execute o comando a seguir para criar um index.js arquivo na raiz do diretório do seu projeto:

touch index.js

Adicione o código a seguir ao arquivo que acabamos de criar:

const express = require('express');
const app = express();
const bodyParser = require('body-parser')
const port = 3000;

app.use(bodyParser.json());

app.use(bodyParser.urlencoded({extended: true}));

app.listen(port, () => {
    console.log(`Listening on ${port}`);
})

Isso cria um aplicativo Express com um servidor web que escuta na porta 3000. Também configuramos o aplicativo para utilizar o analisador JSON do body-parser pacote que instalamos anteriormente e definimos a urlencoded opção como true. Vamos adicionar um comando para executar esse servidor.

No package.json arquivo, adicione o seguinte código à scripts seção:

"scripts": {
    "start": "node index.js"
  },

Agora podemos executar o aplicativo usando o seguinte comando

npm run start

Criação de webhooks de entrada no Slack

Para poder enviar mensagens para o Slack, precisamos criar uma URL de webhook de entrada. Para começar, acesse Slack e crie um aplicativo, caso ainda não tenha um.

Creating a Slack App

Escolha um nome para seu aplicativo e associe-o ao espaço de trabalho para o qual você deseja enviar notificações. Depois de criar o aplicativo, será exibida uma tela semelhante à que aparece abaixo:

Build an App for Slack

Selecione a aba “Webhooks de entrada” e clique no Activate incoming webhooks botão de alternância para ativá-la. Em seguida, clique no Add New Webhook to Workspace botão. Selecione o canal no qual você deseja publicar as notificações e, em seguida, clique allow para autorizar o aplicativo. Você será redirecionado de volta à página de configurações com uma nova URL de webhook criada para você.

Defining the Webhook URL

Anote a URL do Webhook, pois vamos precisar dela em breve.

Criar um webhook para mensagens recebidas

Precisamos definir um route em nosso aplicativo para onde a Nexmo enviará uma POST solicitação sempre que nosso número virtual receber uma mensagem de texto. Isso route será responsável por acionar as notificações no Slack. Antes de criarmos o route, precisamos require o slack-notify pacote que instalamos anteriormente.

Adicione o código a seguir ao index.js arquivo na require seção:

const webhookUrl = 'https://hooks.slack.com/services/xxxx/xxx';
const slack = require('slack-notify')(webhookUrl)

Substitua webhookUrl pela URL do Webhook que o Slack gerou para você na seção anterior.

Console output showing the webhook response

Sempre que recebermos uma mensagem, a Nexmo enviará uma carga útil semelhante à da captura de tela acima. A text chave contém o conteúdo da mensagem recebida.

Vamos adicionar a rota agora. Edite o index.js arquivo com o seguinte código:

app.post("/webhooks/inbound-message", (req, res) => {
    const { text } = req.body
    slack.alert({
        text: 'New SMS message',
        fields: {
            'Message' : text
        }
    });
    res.status(200).end();
})

A text chave do corpo da solicitação conterá o conteúdo da mensagem recebida. Usando a desestruturação, atribuímos a text chave a uma text const e, por sua vez, acionamos o envio da notificação para o Slack usando o alert() método. Você pode encontrar os diferentes métodos slack-notify suportados aqui.

A estrutura final do index.js arquivo deve ficar assim:

const express = require('express');
const app = express();
const bodyParser = require('body-parser')
const port = 3000;
const webhookUrl = 'https://hooks.slack.com/services/xxxx/xxx';
const slack = require('slack-notify')(webhookUrl)

app.use(bodyParser.json());

app.use(bodyParser.urlencoded({extended: true}));

app.post("/webhooks/inbound-message", (req, res) => {
    const { text } = req.body
    slack.alert({
        text: 'New SMS message',
        fields: {
            'Message' : text
        }
    });
    res.status(200).end();
})

app.listen(port, () => {
    console.log(`Listening on ${port}`);
})

Configurando o ngrok

Para tornar nosso aplicativo acessível ao público pela web, precisaremos configurar o ngrok. Você pode aprender como configurar o ngrok aqui. Como nosso aplicativo está rodando atualmente na porta 3000, basta executar o seguinte comando:

ngrok http 3000

Você deverá ver uma tela semelhante à que aparece abaixo:

Screenshot showing example of Ngrok running

Copie o primeiro URL de redirecionamento, pois vamos utilizá-lo em breve em nossa conta do Nexmo.

Adicionar a URL de entrada do Webhook ao Nexmo

Na Numbers seção no seu Painel do Nexmo, clique no ícone de engrenagem correspondente ao número para o qual você deseja receber notificações do Slack. Se você não tiver nenhum número virtual, precisará adquirir um.

Screenshot showing the Nexmo dashboard with a list of your numbers

Será exibida uma janela modal semelhante à que aparece abaixo:

Screenshot showing how to configure your Webhook URLS

Configure a URL do webhook de entrada com a ngrok URL que anotamos anteriormente. (http://1e389185.ngrok.io/webhooks/inbound-message)

Testes

Para verificar se nosso aplicativo funciona conforme o esperado, reinicie seu servidor Node.js e envie uma mensagem do seu celular para o seu número Nexmo.

Screenshot showing an example text message received

Dê uma olhada no seu canal do Slack; você deve ver a notificação.

Screenshot showing Slack bot receiving the SMS

Conclusão

Neste tutorial, vimos como podemos receber notificações do Slack usando o Nexmo. Este tutorial pode servir como um ótimo guia inicial para a criação de Applications com o Nexmo e o Slack. Você pode encontrar o repositório deste tutorial aqui.

Compartilhar:

https://a.storyblok.com/f/270183/250x250/d288ec8a73/dotun.png
Dotun Jolaoso

Software Developer who loves building awesome tools and products. I currently work with Laravel, PHP and Vue.