Como transmitir mensagens de texto SMS de aplicativos web com Python 3 Django

October 26, 2019
Escrito por
Matt Makai
Twilion

Como transmitir mensagens de texto SMS de aplicativos web com Python 3 Django

As mensagens de texto SMS (Short Message Service, serviço de mensagens curtas) são fundamentais para comunicações rápidas. Eles também são fáceis de enviar em escala, combinando um aplicativo da Web Django com uma API (Application Programming Interface, interface de programação de aplicativos).

Neste tutorial, vamos criar um projeto simples do Django com o recurso SMS que transmite mensagens a vários destinatários.

Se quiser ir mais longe no aprendizado do Python ou da API de SMS da Twilio, confira o incrível jogo de treinamento TwilioQuest.

Dependências necessárias do projeto

Python 3 é necessário para este tutorial porque não há mais suporte para o Python 2 desde 31 de dezembro de 2019. Usaremos o Python 3.8 para criar este tutorial.

Também usaremos as seguintes dependências de aplicativos em nosso aplicativo:

Se precisar de ajuda para configurar seu ambiente de desenvolvimento antes de executar o código, consulte este guia para configurar o Python 3 e o Django no Ubuntu 16.04 LTS.

O código desta publicação do blog também está disponível no GitHub no diretório django/djsms do repositório do Git python-twilio-example-apps no GitHub.

Como instalar as dependências do projeto do Python

Nosso código usará a biblioteca auxiliar da Twilio para facilitar o envio de mensagens de texto do Python. Vamos instalar a biblioteca auxiliar de PyPI em um virtualenv.

Mas primeiro precisamos criar o ambiente virtual. Em seu terminal, use o seguinte comando para criar um novo virtualenv e ativá-lo:

python3 -m venv smspy3
source smspy3/bin/activate

Instale o Django e a biblioteca auxiliar da Twilio:

pip install django==2.2.6 twilio==6.32.0

Quando o comando for concluído, você verá algumas saídas semelhantes às seguintes linhas:

Successfully installed django-2.2.6 pytz-2019.3 sqlparse-0.3.0
PyJWT-1.7.1 certifi-2019.9.11 chardet-3.0.4 idna-2.8 requests-2.22.0 six-1.12.0 twilio-6.32.0 urllib3-1.25.6

Neste ponto, instalamos as dependências necessárias e agora podemos usá-las para criar nosso projeto.

Como criar um projeto do Django

Começaremos nosso projeto usando a ferramenta django-admin do Django para criar uma estrutura de código boilerplate.

Mude para o diretório onde você desenvolve seus aplicativos. Por exemplo, normalmente eu uso /Users/matt/devel/py/ no meu Mac ou /home/matt/devel/py no Linux.

Execute o seguinte comando para iniciar um projeto do Django chamado djsms e mude para o diretório recém-criado:

django-admin startproject djsms
cd djsms

Crie um novo aplicativo Django chamado broadcast dentro do projeto djsms:

python manage.py startapp broadcast

O Django gerará uma nova pasta chamada broadcast depois que o comando terminar. Precisamos atualizar as configurações do projeto e os arquivos de URLs. Portanto, certifique-se de que o app broadcast esteja disponível.

Abra djsms/settings.py:

ALLOWED_HOSTS = []


TWILIO_ACCOUNT_SID = os.getenv("TWILIO_ACCOUNT_SID")
TWILIO_AUTH_TOKEN = os.getenv("TWILIO_AUTH_TOKEN")
TWILIO_NUMBER = os.getenv("TWILIO_NUMBER")
SMS_BROADCAST_TO_NUMBERS = [ 
    "", # use the format +19735551234
    "", 
    "", 
]


# Application definition

INSTALLED_APPS = [ 
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'broadcast',
]

Certifique-se de alterar os valores padrão DEBUG e SECRET_KEY em settings.py antes de fazer check-in dos arquivos no Git ou implantar qualquer código na produção. Proteja seu aplicativo adequadamente com as informações da lista de verificação de implantação de produção do Django para que você não adicione seu projeto à lista de aplicativos hackeados na Web.

Salve e feche settings.py. Abra o arquivo djsms/urls.py e adicione os URLs do app broadcast à sua lista de URLs do projeto principal:

from django.conf.urls import include
from django.contrib import admin
from django.urls import path

urlpatterns = [
    path('', include('broadcast.urls')),                                                                                                                                                 
    path('admin/', admin.site.urls),
]

As duas novas linhas de código acima conectam o arquivo urls.py principal ao arquivo broadcast/urls.py que será gravado em seguida.

Como codificar o app de transmissão

Em seguida, mude para o diretório broadcast. Crie um novo arquivo chamado urls.py para conter uma rota de URL para envio de SMS:

cd broadcast
touch urls.py

Abra o arquivo urls.py vazio e adicione estas linhas de código:

from django.conf.urls import url                                                                                                                                                         
from . import views

urlpatterns = [ 
    url(r'broadcast$', views.broadcast_sms, name="default"),
]

No código acima, temos uma única rota de URL que corresponde a broadcast como um caminho que mapeia para uma função de visualização broadcast_sms ainda a ser gravada.

Precisamos escrever essa função dentro de broadcast/views.py para lidar com o envio de mensagens. Salve urls.py e abra views.py e atualize-o com as seguintes linhas:

from django.conf import settings                                                                                                                                                       
from django.http import HttpResponse
from twilio.rest import Client


def broadcast_sms(request):
    message_to_broadcast = ("Have you played the incredible TwilioQuest "
                                                "yet? Grab it here: https://www.twilio.com/quest")
    client = Client(settings.TWILIO_ACCOUNT_SID, settings.TWILIO_AUTH_TOKEN)
    for recipient in settings.SMS_BROADCAST_TO_NUMBERS:
        if recipient:
            client.messages.create(to=recipient,
                                   from_=settings.TWILIO_NUMBER,
                                   body=message_to_broadcast)
    return HttpResponse("messages sent!", 200)

Neste código acima, importamos o arquivo settings do Django para que possamos acessar as configurações do nosso projeto, bem como a classe HttpResponse para retornar um código de status simples HTTP 200 com uma resposta de texto. Também importamos a biblioteca auxiliar para Python da Twilio.

A função broadcast_sms lida com a maior parte do trabalho. Ela especifica uma mensagem a ser enviada, instancia o cliente da biblioteca auxiliar e faz loops por cada número de telefone listado na variável SMS_BROADCAST_TO_NUMBERS. Se um número de telefone for especificado (não estiver em branco), ele chamará a API da Twilio para enviar o SMS para o número de telefone do destinatário. Após a conclusão do loop, retornamos uma resposta HTTP.200 com o texto "messages sent!" (mensagens enviadas!).

Antes de testar nosso aplicativo, precisamos obter um número de telefone da Twilio e credenciais para nos autenticar na API.

Acessar a API de SMS da Twilio

Faça login em sua conta existente da Twilio ou inscreva-se em uma nova conta gratuita da Twilio.

Após o processo de registro (ou login), você estará no Console da Twilio, onde você poderá acessar o Account SID (SID da conta) e o Auth Token (token de autenticação), conforme mostrado abaixo:

Como obter o SID da conta e o token de autenticação do Console da Twilio

Defina o Account SID (SID da conta) e o Auth Token (token de autenticação) como variáveis de ambiente para seu aplicativo Django ler e usar. Crie um arquivo chamado .env e cole-o nos seguintes conteúdos.

(Você também pode copiar o arquivo template.env incluído com o repositório Git no diretório django/djsms/ e renomeá-lo como .env.)

# Django SECRET_KEY for sessions                                                                                                                              
SECRET_KEY='development key' # change this to a secret string when deploying

# Twilio credentials and phone number
TWILIO_ACCOUNT_SID=' ' # obtained from twilio.com/console
TWILIO_AUTH_TOKEN=' ' # also obtained from twilio.com/console
TWILIO_NUMBER=' ' # use the number you received when signing up or buy a new number

Preencha as variáveis TWILIO_ACCOUNT_SID e TWILIO_AUTH_TOKEN com suas credenciais no Console. Você também deve ter um número de telefone da Twilio no processo de registro ou pode comprar um novo número de telefone para usar neste tutorial.

Invoque o arquivo .env para definir estas variáveis:

source .env

Observe que se você estiver no Windows, definir as variáveis de ambiente é um pouco diferente. Então, dê uma olhada neste tutorial para obter as instruções detalhadas.

Temos nosso código e as credenciais em vigor. Agora é hora de fazer o projeto funcionar.

Como testar uma transmissão SMS

Acione o servidor de desenvolvimento do Django:

python manage.py runserver

Acesse https://localhost:8000/broadcast em seu navegador da web para iniciar o envio de mensagens. No navegador, você deve ver:

Mensagens enviadas no navegador

Depois de um momento, todos os números de telefone listados em SMS_BROADCAST_TO_NUMBERS receberão seus SMS:

Mensagem de texto recebida

Incrível, funcionou! É hora de ver o que é esse link e conferir o TwilioQuest para saber o que mais você pode fazer com o Python e o Programmable SMS.

Como finalizar a transmissão de SMS do Django

Acabamos de criar um aplicativo para enviar SMS a vários destinatários usando o Python 3.8 e a estrutura da web Django.

Agora você pode construir em cima do meu código e expandir seu aplicativo armazenando números de telefone no banco de dados com o ORM do Django, ou criando a interface do usuário para facilitar a personalização de suas mensagens.

Aqui estão alguns outros tutoriais excelentes sobre o Python que você deve tentar:

Este artigo foi traduzido do original "How to Broadcast SMS Text Messages from Python 3 Django Web Applications". Enquanto melhoramos nossos processos de tradução, adoraríamos receber seus comentários em help@twilio.com - contribuições valiosas podem render brindes da Twilio.