You are viewing the Spanish (Mexico) site, but your language preference is set to English. Switch to English site →

Menu

Expand
Calificar esta página:

Recibir y descargar imágenes en mensajes MMS entrantes con Python y Django

Sabes cómo recibir y responder mensajes SMS entrantes. ¿Qué ocurre si recibes un mensaje MMS con una imagen que deseas descargar? Aprendamos cómo podemos obtener esa imagen y cualquier otro archivo multimedia de MMS entrante con Django.

Crear un proyecto de procesamiento de MMS

Crear una aplicación móvil de Django

Cuando Twilio recibe un mensaje para tu número de teléfono, puede realizar una llamada HTTP a un webhook que crees.

Twilio espera, como mínimo, que tu webhook devuelva una respuesta “200 OK” si todo está bien. Sin embargo, a menudo también devolverás algunos TwiML en tu respuesta. TwiML es solo un conjunto de comandos XML que le dicen a Twilio cómo te gustaría que respondiera a tu mensaje. En lugar de generar el XML de forma manual, usaremos el módulo twilio.twiml.messaging_response en la biblioteca auxiliar, que puede hacer que la generación del TwiML y el resto del sistema interno del webhook sea algo sencillo.

Para instalar la biblioteca, ejecuta lo siguiente:

pip install twilio

Crear el enrutador

Agrega una ruta nueva en el archivo urls.py que gestiona las solicitudes SMS entrantes.

Loading Code Sample...
        
        

        Handle Incoming SMS Routes - Django

        Recibir mensajes MMS e imágenes

        Obtener detalles del mensaje entrante

        Cuando Twilio llama a tu webhook, envía una serie de parámetros sobre el mensaje que acabas de recibir. La mayoría de estos, como el número de teléfono “To”, el número de teléfono “From” y el “Body” del mensaje, se encuentran disponibles como propiedades del cuerpo de la solicitud.

        Obtener direcciones URL para los archivos multimedia

        Dado que un mensaje MMS puede tener múltiples archivos adjuntos, Twilio nos enviará variables de forma denominadas MediaUrlX, en el que X es un índice basado en cero. Por ejemplo, la dirección URL del primer archivo multimedia adjunto estará en el parámetro MediaUrl0, el segundo en MediaUrl1 y así sucesivamente.

        Para gestionar una cantidad dinámica de archivos adjuntos, extraemos las URL del cuerpo de la solicitud de la siguiente manera:

        Loading Code Sample...
              
              

              Handle Incoming SMS Views - Django

              Determinar el tipo de contenido de los archivos multimedia

              Los archivos adjuntos en los mensajes MMS pueden ser de muchos tipos diferentes. Las imágenes JPG y GIF junto con los archivos MP4 y 3GP son elementos comunes. Twilio administra la determinación del tipo de archivo por ti y puedes obtener el tipo MIME estándar desde el parámetro MediaContentTypeX. Si esperas fotos, es probable que veas muchos archivos adjuntos con el tipo MIME image/jpeg.

              Loading Code Sample...
                    
                    

                    Asignar un tipo MIME a una extensión de archivo

                    Procesar imágenes de MMS

                    Guardar las direcciones URL de los archivos multimedia

                    En función de tu caso de uso, almacenar las direcciones URL de las imágenes (o videos u otro documento) puede ser todo lo que necesitas hacer. Hay dos funciones clave en estas direcciones URL que las hacen muy flexibles para su uso en tus apps:

                    1. Son accesibles públicamente sin necesidad de autenticación, lo que facilita el uso compartido.
                    2. Son permanentes (a menos que elimines explícitamente los archivos multimedia).

                    Por ejemplo, si creas una app basada en navegador que necesita mostrar las imágenes, lo que tienes que hacer es colocar una etiqueta <img src="twilio url to your image"> en la página. Si esto te resulta útil, quizás todo lo que necesitas es almacenar la URL en un campo de caracteres de base de datos.

                    Guardar archivos multimedia en un sistema de archivos local

                    Si deseas guardar los archivos multimedia adjuntos en un archivo, deberás realizar una solicitud HTTP en la URL del archivo multimedia y escribir el flujo de respuesta en un archivo. Si necesitas un nombre de archivo único, puedes utilizar la última parte de la URL del archivo multimedia. Por ejemplo, supongamos que lo siguiente es la dirección URL del archivo multimedia:

                    https://api.twilio.com/2010-04-01/Accounts/ACxxxx/Messages/MMxxxx/Media/ME27be8a708784242c0daee207ff73db67

                    Puedes utilizar esa última parte de la URL como un nombre de archivo único y buscar la extensión de archivo correspondiente para el tipo MIME.

                    Loading Code Sample...
                          
                          

                          Handle Incoming SMS Endpoints - Django

                          Otra idea para estos archivos de imagen podría ser cargarlos a un servicio de almacenamiento en la nube como Azure Blob Storage o Amazon S3. También puedes guardarlos en una base de datos, si es necesario. En este punto, son solo archivos normales, pon rienda suelta a tu creatividad en DevOps. En este caso, los guardamos en el directorio público a fin de proporcionarlos más tarde.

                          Eliminar archivos multimedia de Twilio

                          Si descargas los archivos adjuntos y ya no necesitas que Twilio los almacene, puedes eliminarlos fácilmente. Puedes enviar una solicitud HTTP DELETE a la URL del archivo multimedia, y este se eliminará, pero deberás autenticarte para hacerlo. Para hacerlo más fácil, puedes usar la biblioteca auxiliar para Python de Twilio. Aquí se muestra cómo:

                          Loading Code Sample...
                                
                                

                                Eliminar archivos multimedia de servidores de Twilio

                                Proteger los webhooks

                                Twilio es compatible con la autenticación HTTP básica y codificada. La autenticación te permite proteger tus URL de TwiML en tu servidor web con contraseña para que solo tú y Twilio puedan acceder a ellos. Obtén más información sobre la autenticación HTTP y la validación de solicitudes entrantes aquí.

                                ¿Qué sigue?

                                Todo el código, en un proyecto de trabajo completo, se encuentra disponible en GitHub. Si necesitas investigar más a fondo, puedes consultar nuestra Referencia de la API y obtener más información sobre la solicitud de webhook de Twilio y el recurso de archivos multimedia de la API REST. Además, deberás tener en cuenta los precios para el almacenamiento de todos los archivos multimedia que mantienes en los servidores de Twilio.

                                Nos encantaría conocer lo que crearás con esto.

                                Jose Oliveros Kevin Segovia Daniel Erazo
                                Calificar esta página:

                                ¿Necesitas ayuda?

                                Todos la necesitamos a veces; la programación es difícil. Obtén ayuda ahora de nuestro equipo de soporte, o recurre a la sabiduría de la multitud visitando Stack Overflow Collective de Twilio o navegando por la etiqueta de Twilio en Stack Overflow.

                                Loading Code Sample...
                                      
                                      
                                      

                                      Gracias por tus comentarios.

                                      Selecciona los motivos de tus comentarios. La información adicional que nos brindas nos ayuda a mejorar nuestra documentación:

                                      Enviando tus comentarios…
                                      🎉 Gracias por tus comentarios.
                                      Se produjo un error. Inténtalo de nuevo.

                                      Gracias por tus comentarios.

                                      thanks-feedback-gif