Ir para o conteúdo

Twilio - SMS

As mensagens de SMS e MMS bidirecionais do Twilio permitem que você continue conversando, enviando e recebendo mensagens de texto e multimídia.

Aviso

Este plugin assume que você já possui uma conta do Twilio criada e configurada para usar os recursos de números de telefone. Se você ainda não possui uma conta configurada, siga as etapas da documentação do Twilio.

Instalação

pip install botcity-twilio-sms-plugin

Importando o plugin

Depois de instalar este pacote e configurar sua conta do Twilio, o próximo passo é importar o pacote para o seu código e começar a usar as funções.

from botcity.plugins.twilio.sms import BotTwilioSMSPlugin

Instanciando o plugin

Primeiro, vamos instanciar o plugin, passando algumas informações da sua conta do Twilio. Tudo o que precisamos é a ACCOUNT SID e o AUTH TOKEN da conta, você pode obter essas informações da seção Account Info no seu Twilio Dashboard.

account_sid = "<SUA_CONTA_SID>"
auth_token = "<SEU_AUTH_TOKEN>"
numero_telefone = "+19403534611"

# Instanciar o plugin para mensagens SMS
twilio_sms = BotTwilioSMSPlugin(conta_sid, auth_token, numero_telefone)

Enviando mensagens SMS

Com um número de telefone obtido através da sua conta do Twilio, podemos enviar mensagens SMS facilmente. Os números de telefone fornecidos devem seguir alguns formatos específicos, conforme mostrado abaixo.

Dica

Se você tiver mais de um número de telefone configurado na sua conta do Twilio, poderá alterar a propriedade número de telefone a qualquer momento durante o processo para definir qual número será usado.

sms = BotTwilioSMSPlugin(account_sid, auth_token, numero_telefone)
print("Número atual a ser usado: ", sms.numero_telefone)
sms.numero_telefone = "<SEU_SEGUNDO_NUMERO>"
from botcity.plugins.twilio.sms import BotTwilioSMSPlugin

account_sid = "<SUA_CONTA_SID>"
auth_token = "<SEU_AUTH_TOKEN>"

# Os números de telefone devem ser usados no formato E.164
# [+] [Código do país] [número de telefone, incluindo código de área]
meu_numero = "+19403534611"
numero_remetente = "+5519987654321"

# Enviando uma mensagem simples
sms = BotTwilioSMSPlugin(account_sid, auth_token, meu_numero)
sms.send_sms(
    to_number=numero_remetente,
    msg_content="Ei! Enviando para você um SMS simples"
)

Se o seu número de Twilio suportar MMS, podemos enviar algum conteúdo de mídia nas mensagens. O conteúdo da mídia deve ser uma URL acessível ao público, dessa maneira, podemos passar essa URL como uma lista para o parâmetro media urls.

# Lista contendo o URL das imagens
imagens = ["https://i.imgur.com/70fV8e4.png", "https://i.imgur.com/7qqUvQR.jpg"]

sms.send_sms(
    to_number=numero_remetente,
    msg_content="Enviando 2 imagens!",
    media_urls=imagens
)

Recuperando mensagens

Com este plugin, também podemos obter mensagens associadas a um número de telefone configurado. Podemos devolver mensagens que foram enviadas e recebidas por esse número.

Você pode usar filtros para procurar mensagens específicas, como a data em que a mensagem foi enviada ou o número que o enviou. Uma lista de mensagens será retornada e, para cada mensagem, é possível acessar algumas propriedades e executar algumas ações posteriormente.

sms = BotTwilioSMSPlugin(account_sid, auth_token, meu_numero)

# Coleta todas as mensagens que foram recebidas deste número específico
sms_recuperados = sms.get_received_messages(from_number="+5519987654321")

# Para cada SMS encontrado, impressões:
# A data de envio
# O conteúdo da mensagem
for msg in sms_recuperados:
    print(msg.date_sent)
    print(msg.body)

Respondendo mensagens

É possível responder a mensagens que foram retornada com o método get received messages, podemos responder a uma única mensagem ou percorrer pela lista e responder cada mensagem recuperada.

from datetime import datetime
from botcity.plugins.twilio.sms import BotTwilioSMSPlugin

account_sid = "<<SUA_CONTA_SID>>"
auth_token = "<SEU_AUTH_TOKEN>"
meu_numero = "+19403534611"

sms = BotTwilioSMSPlugin(account_sid, auth_token, meu_numero)

# Receba todas as mensagens recebidas antes05/31/2022
mensagens = sms.get_received_messages(before_date=datetime(2022, 5, 31))

# Responder a todas as mensagens retornadas
for msg in messages:
    sms.reply_sms(msg, "Recebida!")

Aguardando por novas mensagens

Nos casos em que precisamos esperar que uma nova mensagem chegue e não sabemos quanto tempo levará, podemos usar o método wait for new sms. Dessa maneira, é possível definir um tempo de espera máximo e o número que enviará a mensagem, quando necessário.

account_sid = "<<SUA_CONTA_SID>>"
auth_token = "<SEU_AUTH_TOKEN>"
meu_numero = "+19403534611"

sms = BotTwilioSMSPlugin(account_sid, auth_token, meu_numero)

# Wait for a new message from a specific number
novo_sms = sms.wait_for_new_sms(from_number="+5519987654321")

print(novo_sms.body)

Baixando o conteúdo de mídia recebido

Para mensagens que foram recebidas e possuem conteúdo de mídia, conseguimos salvar esses arquivos no disco.

# Espere por uma nova mensagem
novo_sms = sms.wait_for_new_sms(from_number="+5519987654321", timeout=60)

# Se a mensagem foi recebida, salve o conteúdo da mídia
if novo_sms:
    print(novo_sms.body)
    sms.download_media_file(novo_sms, download_folder_path="downloads/media")

Os tipos de conteúdo de mídia atualmente suportados usados para salvar os arquivos são definidos na tabela abaixo:

Tipo MIME suportado Extensão usada para salvar o arquivo
image/jpg .jpg
image/jpeg .jpeg
image/png .png
image/gif .gif
audio/mp4 .mp4
audio/mpeg .mpeg
video/mp4 .mp4
video/mpeg .mpeg
video/3gpp .3gpp
application/pdf .pdf