Movatterモバイル変換


[0]ホーム

URL:


Skip to content
DEV Community
Log in Create account

DEV Community

Romildo Junior
Romildo Junior

Posted on • Edited on

     

Enviando SMS com Amazon SNS

Enviar mensagens de texto, mum mundo em que os celulares dominam, é uma das formas mais simples e usuais de confirmação para login ou registro. Embora implementar algo assim tenha cara de complexo - afinal, envolve telefonia móvel, tipos de rotas e coisas obscuras para o cidadão médio - veremos nesse artigo como lançar mão da AWS para isso, com o Simple Notification Service (SNS) e um pouco de Javascript.

O que eu espero

  • Que você já tenha uma familiaridade mínima com a AWS;
  • Que você tenha acesso à credenciais (access key id e secret access key) para uma conta na AWS com acesso a SNS.
  • Que você já tenha utilizado Node (e mais especificamente express).

Conceitos

Já percebeu que o número daquela mensagem de confirmação do Uber ou iFood é bem curto?

Short Codes Example

Esses números são os chamadosshort code. O seu número, por outro lado, é um exemplo delong code. E por que isso é importante?

Short codes são destinados à comunicação em massa, podendo enviar cerca de 100 mensagens por segundo. Oslong codes, além de destinados para comunicação pessoal, podem enviar apenas uma mensagem por segundo (e quase sempre são identificados como spam).

Um segundo conceito importanté diz respeito ao tipo da mensagem. As mensagens promocionais (Promotional Messages) são otimizadas para reduzir custos. Quando se trata de algo não crítico, em que reenviar o conteúdo é aceitável, esse é o tipo mais interessante. O outro se trata de mensagens transacionais (Transactional Messages), que são mais caras, mas garantem maior confiabilidade na entrega.

Codando um exemplo

Obs.: Por simplicidade, vamos omitir alguns passos relativos à segurança da aplicação durante o exemplo.

Vamos utilizar oexpress para construir uma API simples de envio de SMS e a própria sdk da AWS (aws-sdk) para ter acesso à plataforma.

TL;DR

O código abaixo resume como criar a API:

importexpressfrom'express';importAWSfrom'aws-sdk';// Função para envio da mensagemasyncfunctionsendSMS({sns,Message,PhoneNumber}){// Definições sobre o tipo de mensagemawaitthis.sns.setSMSAttributes({attributes:{DefaultSMSType:'Promotional'}}).promise();// Envio da mensagemsns.publish({Message,PhoneNumber,}).promise();}// Configuração da SDKconst{AWS_ACCESS_KEY_ID:accessKeyId,AWS_SECRET_ACCESS_KEY:secretAccessKey,}=process.env;AWS.config.update({region:'us-east-1',accessKeyId,secretAccessKey,});constsns=newAWS.SNS({apiVersion:'2010-03-31'});// Criação da APIconstapp=express();app.use(express.json());app.post('/send-sms',(req,res)=>{const{PhoneNumber,Message}=req.body;sendSMS({sns,PhoneNumber,Message});returnres.status(201).end();});app.listen(process.env.PORT||3000);
Enter fullscreen modeExit fullscreen mode

Agora que tal ver isso em detalhes?

Configuração da SDK

Caso já tenha utilizado a SDK da AWS para javascript, essa é uma parte bem simples e sem mistérios. De todo modo, vale a pena explicar rapidamente o que é feito.

Ao trabalhar com os serviços da Amazon, é necessário ter, como dito no início, credenciais válidas - uma chave secreta e seu ID. Tendo isso em mãos, basta utilizar o métodoupdate dentro do pacoteAWS.config:

AWS.config.update({region:'us-east-1',accessKeyId,secretAccessKey,});
Enter fullscreen modeExit fullscreen mode

Observe que existe também um parâmetro chamado "region". Ele se refere a qual região será escolhida para fornecer os serviços solicitados na aplicação, uma vez que a Amazon possui data-centers em diversos países. Nesse caso estamos utilizando aus-east-1, mas existem outras regiões compatíveis. [2]

FunçãosendSMS

Nessa função, implementamos a lógica para envio das mensagens. Ela espera receber um objetosns, criado a partir da classe AWS.SNS, o número para envio e a mensagem.

awaitthis.sns.setSMSAttributes({attributes:{DefaultSMSType:'Promotional'}}).promise();
Enter fullscreen modeExit fullscreen mode

Definimos o tipo da que será enviada como"Promotional". Observe que o métodosetSMSAttributes por si utiliza um esquema de callbacks, mas pode ser facilmente convertido em promise utilizado o métodopromise em cadeia.

sns.publish({Message,PhoneNumber,}).promise();
Enter fullscreen modeExit fullscreen mode

Para de fato enviar a mensagem, basta chamar o métodopublish. Novamente, observe que utilizamos o métodopromise, mas desta vez não bloqueamos a execução da aplicação pelo fato de não ser importante monitorar a entrega do SMS.

Criação da API

Tendo configurado a SDK e criado a função para enviar as mensagens de texto, resta construir uma API para a aplicação, o que é feito no ultimo trecho do código de exemplo:

constapp=express();app.use(express.json());app.post('/send-sms',(req,res)=>{const{PhoneNumber,Message}=req.body;sendSMS({sns,PhoneNumber,Message});returnres.status(201).end();});
Enter fullscreen modeExit fullscreen mode

Conclusão

Enviar SMS utilizando o Amazon SNS é uma tarefa simples, que pode ser feita sem muitas complicações. Contudo, é interessante estar atento aos custos (aprox. USD 0.02/sms no momento em que escrevo este artigo) e ao tipo de mensagem.

Gostou do artigo? Tem algum feedback? Quer sugerir algum tema? Deixa seu comentário e vamos trocar uma ideia. E claro, se acredita que mais alguem pode achar esse conteúdo relevante, não pense duas vezes antes de compartilhar.

Referências

[1]Why use a short code instead of a long code?

[2]Regiões e países compatíveis (SNS)

Top comments(0)

Subscribe
pic
Create template

Templates let you quickly answer FAQs or store snippets for re-use.

Dismiss

Are you sure you want to hide this comment? It will become hidden in your post, but will still be visible via the comment'spermalink.

For further actions, you may consider blocking this person and/orreporting abuse

I'm a Brazilian back-end developer, with some front-end and devops powers. I do not play soccer well :')
  • Location
    Recife, Brazil
  • Education
    Electronic Engineering (incomplete) @ UFPE
  • Work
    Javascript / Typescript Developer
  • Joined

More fromRomildo Junior

DEV Community

We're a place where coders share, stay up-to-date and grow their careers.

Log in Create account

[8]ページ先頭

©2009-2025 Movatter.jp