https://a.storyblok.com/f/270183/37693/a681a26f2c/blog_send-outgoing-sms_1200x600.png

Uso de uma fila de mensagens com SMS para lidar com limitações de taxa de transferência

Publicado em May 5, 2021

Tempo de leitura: 9 minutos

Em alguns países, a limitação da taxa de transferência de SMS e os tempos de resposta lentos (às vezes de apenas uma solicitação por segundo) representam desafios para o envio em massa. Uma maneira de contornar essas limitações é usar uma fila de mensagens, como o AWS SQS.

Neste exemplo, você criará um microsserviço sem servidor no AWS Lambda usando este aplicativo em Python disponível no GitHub que utiliza o Flaske Serverless. O aplicativo tem duas finalidades: ele insere mensagens no AWS SQS e, em seguida, facilita o envio propriamente dito por meio do SMS da Vonage , conforme solicitado.

Pré-requisitos

Instruções de configuração

Clone o repositório nexmo-community/sms-aws-sqs-python-sender no GitHub e acesse o diretório recém-criado para continuar.

Meio ambiente

Renomear .env.default para .env e adicione valores a VONAGE_API_KEY e VONAGE_API_SECRET fornecidos no seu Painel da API da Vonage.

Configuração da AWS

Você precisa criar credenciais da AWS conforme indicado pelo Serverless. Atualize o .env arquivo com essas informações.

Além disso, crie uma nova fila FIFO do SQS usando as configurações padrão e atualize .env com a URL da fila SQS. O FIFO garante que as mensagens sejam enviadas na ordem em que foram armazenadas.

Uso

Para começar, crie um virtualenv na raiz do projeto para abrigar o projeto. Em seguida, ative-o da seguinte maneira:

virtualenv venv --python=python3 source venv/bin/activate

Em seguida, inicialize o npm e siga as instruções, selecionando as opções padrão, a menos que deseje alterar alguma delas. Além disso, use o npm para instalar as dependências necessárias para o DEV, a fim de permitir que o Serverless e o Lambda funcionem com o aplicativo Flask.

npm init npm install --save-dev serverless-wsgi serverless-python-requirements

Agora você pode usar o pip para instalar as dependências necessárias do Python. As dependências estão no arquivo requirements.txt; portanto, indique ao pip para usá-lo.

pip install -r requirements.txt

Corrida local

Caso deseje executar o aplicativo localmente e testá-lo antes de implantá-lo no AWS Lambda, você pode executá-lo com o seguinte comando:

sls wsgi serve

Por padrão, isso disponibiliza o aplicativo em http://localhost:5000. Você clica em Ctrl+c para fechá-lo.

Implantar no Lambda

Depois de concluir com sucesso todas as etapas acima, você já pode usar o Serverless para implantar o aplicativo no AWS Lambda.

sls deploy

IMPORTANTE: Este aplicativo não possui nenhuma autenticação para uso. Portanto, certifique-se de adicionar uma autenticação antes de usá-lo para impedir o uso público. Deixá-lo aberto ao público pode resultar em cobranças pela AWS e pela Vonage.

Pontos de extremidade disponíveis

Existem 3 pontos de extremidade de URL disponíveis neste cliente:

1 solicitação GET para /

  • Não executa nenhuma ação, mas oferece uma maneira rápida de testar

2 Solicitação POST para /add

  • Essa ação armazena a mensagem no SQS.

  • Envie uma solicitação POST com um corpo JSON como o seguinte. Substitua os marcadores de lugar, indicados com <> , pelos seus dados.

  • O resultado contém o SQS MessageId.

{
    "from": "<your_name_or_number>",
    "message": "<sms_message_contents>",
    "to": "<recipients_number>"
}

3 Solicitação GET para /process

  • Inicia o processo de envio.

  • Recupera mensagens da fila FIFO do SQS.

  • Conecta-se ao Nexmo e envia a mensagem SMS.

location=None, media_mode=relayed, archive_mode=manual
Exemplos:

Acesse a URL fornecida pelo processo de implantação. Veja a seguir alguns exemplos de como podem ser essas solicitações: (Sua URL pode variar.)

OBTER https://7ulasfasdasdfw4.execute-api.us-east-1.amazonaws.com/dev/

O / endpoint retorna a mensagem genérica.

POST https://7ulasfasdasdfw4.execute-api.us-east-1.amazonaws.com/dev/add

O add ponto final retorna o SQS MessageId.

OBTER https://7ulasfasdasdfw4.execute-api.us-east-1.amazonaws.com/dev/process

O process endpoint retorna uma mensagem indicando que o envio foi bem-sucedido.

Desativando o Virtualenv

Para sair do virtualenv, você pode desativá-lo quando quiser.

deactivate

NOTA: Dependendo do sistema operacional, talvez seja necessário adicionar virtualenv ao comando acima.

Próximos passos

Neste exemplo, o aplicativo contém um /process ponto de extremidade que pode ser chamado por meio de uma solicitação HTTP GET em intervalos programados. Como alternativa, o código em /process poderia ser colocado em uma função Lambda separada e chamado diretamente a partir de eventos agendados do CloudWatch, em vez de uma solicitação HTTP GET.

Se você tiver alguma dúvida ou encontrar algum problema, entre em contato com @VonageDev no Twitter ou fazer sua pergunta na Comunidade Vonage no Slack. Boa sorte.

Compartilhar:

https://a.storyblok.com/f/270183/384x384/b3c7ffaf85/adamculp.png
Adam CulpEx-funcionários da Vonage

Adam é um desenvolvedor e consultor que gosta de corridas de ultramaratona, escrever em blogs e gravar vlogs, além de ajudar outras pessoas a dominar a tecnologia para realizar coisas incríveis, movido por um desejo insaciável de orientar e ajudar.