Saltar a contenido

Twilio - SMS

Los mensajes de SMS y MMS bidireccionales de Twilio te permiten mantener una conversación enviando y recibiendo mensajes de texto y multimedia.

Warning

Este complemento asume que ya tienes una cuenta de Twilio creada y configurada para usar las funciones de números de teléfono. Si aún no tienes una cuenta configurada, por favor sigue los pasos en la documentación de Twilio.

Instalación

pip install botcity-twilio-sms-plugin

Importando el complemento

Después de instalar este paquete y configurar tu cuenta de Twilio, el siguiente paso es importar el paquete en tu código y comenzar a usar las funciones.

from botcity.plugins.twilio.sms import BotTwilioSMSPlugin

Instanciando el complemento

Primero, vamos a instanciar el complemento pasando alguna información de tu cuenta de Twilio. Todo lo que necesitamos es el ACCOUNT SID y el AUTH TOKEN de la cuenta, puedes obtener esta información en la sección Account Info de tu panel de control de Twilio.

account_sid = "<YOUR_ACCOUNT_SID>"
auth_token = "<YOUR_AUTH_TOKEN>"
phone_number = "+19403534611"

# Instantiate the plugin for SMS messages
twilio_sms = BotTwilioSMSPlugin(account_sid, auth_token, phone_number)

Enviando mensajes de SMS

Con un número de teléfono obtenido a través de tu cuenta de Twilio, podemos enviar fácilmente mensajes de SMS. Los números de teléfono proporcionados deben seguir algunos formatos específicos, como se muestra a continuación.

Tip

Si tienes más de un número de teléfono configurado en tu cuenta de Twilio, puedes cambiar la propiedad phone number en cualquier momento durante el proceso para definir qué número se utilizará.

sms = BotTwilioSMSPlugin(account_sid, auth_token, phone)
print("Número actual a utilizar: ", sms.phone_number)
sms.phone_number = "<TU_SEGUNDO_NÚMERO>"
from botcity.plugins.twilio.sms import BotTwilioSMSPlugin

account_sid = "<YOUR_ACCOUNT_SID>"
auth_token = "<YOUR_AUTH_TOKEN>"

# Phone numbers must be used in E.164 format
# [+][country code][phone number including area code]
my_phone = "+19403534611"
to_phone = "+5519987654321"

# Sending a simple message
sms = BotTwilioSMSPlugin(account_sid, auth_token, my_phone)
sms.send_sms(
    to_number=to_phone,
    msg_content="Hey! Sending to you a simple SMS"
)

Si tu número de Twilio admite MMS, podemos enviar contenido multimedia en los mensajes. El contenido multimedia debe ser una URL de acceso público, de esta manera podemos pasar esa URL como una lista al parámetro media urls.

# List containing the URL of the images
images = ["https://i.imgur.com/70fV8e4.png", "https://i.imgur.com/7qqUvQR.jpg"]

sms.send_sms(
    to_number=to_phone,
    msg_content="Sending 2 images!",
    media_urls=images
)

Recuperando mensajes

Con este complemento también podemos obtener mensajes asociados a un número de teléfono configurado. Podemos devolver mensajes que han sido enviados y recibidos por este número.

Puedes usar filtros para buscar mensajes específicos, como la fecha en que se envió el mensaje o el número que lo envió. Se devolverá una lista de mensajes y para cada mensaje es posible acceder a algunas propiedades y realizar algunas acciones más tarde.

sms = BotTwilioSMSPlugin(account_sid, auth_token, my_phone)

# Collects all messages that were received from this specific number
received_sms = sms.get_received_messages(from_number="+5519987654321")

# For each sms found, prints:
# The sending date
# The message content
for msg in received_sms:
    print(msg.date_sent)
    print(msg.body)

Respondiendo mensajes

Es posible responder a los mensajes que se devolvieron con el método get received messages, podemos responder a un solo mensaje o recorrer la lista y responder a cada mensaje recuperado.

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

account_sid = "<YOUR_ACCOUNT_SID>"
auth_token = "<YOUR_AUTH_TOKEN>"
my_phone = "+19403534611"

sms = BotTwilioSMSPlugin(account_sid, auth_token, my_phone)

# Get all messages received before 05/31/2022
messages = sms.get_received_messages(before_date=datetime(2022, 5, 31))

# Reply to all returned messages
for msg in messages:
    sms.reply_sms(msg, "Received!")

Esperando nuevos mensajes

En casos en los que tenemos que esperar a que llegue un nuevo mensaje y no sabemos cuánto tiempo llevará, podemos usar el método wait for new sms. De esta manera, es posible definir un tiempo máximo de espera y el número que enviará el mensaje, cuando sea necesario.

account_sid = "<YOUR_ACCOUNT_SID>"
auth_token = "<YOUR_AUTH_TOKEN>"
my_phone = "+19403534611"

sms = BotTwilioSMSPlugin(account_sid, auth_token, my_phone)

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

print(new_sms.body)

Descargando contenido multimedia recibido

Para los mensajes que se han recibido y tienen contenido multimedia, podemos guardar estos archivos en el disco.

# Wait for a new message
new_sms = sms.wait_for_new_sms(from_number="+5519987654321", timeout=60)

# If the message was received, save the media content
if new_sms:
    print(new_sms.body)
    sms.download_media_file(new_sms, download_folder_path="downloads/media")

Los tipos de contenido multimedia actualmente admitidos para guardar los archivos se definen en la siguiente tabla:

Tipo MIME admitido Extensión utilizada para guardar el archivo
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