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 Java

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 Java.

Crear un proyecto de procesamiento de MMS

Cuando Twilio recibe un mensaje para tu número de teléfono, puede realizar una llamada HTTP a un webhook que crees. La manera más fácil de gestionar las solicitudes HTTP en Java es usar el marco web de Spark.

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 la biblioteca auxiliar “twilio”, que puede hacer que la generación del TwiML y el resto del sistema interno del webhook sea algo sencillo.

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 parámetro de solicitud a las vistas de Spark.

Obtener la cantidad de archivos adjuntos

Es posible que recibamos más de un archivo multimedia por mensaje, este parámetro nos informa cuántos hemos recibido. Usamos una clase personalizada parseBody para obtener el valor y convertirlo en un valor entero para su uso en el siguiente bucle.

Map<String, String> parameters = parseBody(req.body());
String numMediaStr = parameters.get("NumMedia");
int numMedia = Integer.parseInt(numMediaStr);

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, aplicamos el bucle en todas las URL disponibles:

while (numMedia > 0) {
    numMedia = numMedia - 1;
    String mediaUrl = parameters.get(String.format("MediaUrl%d", numMedia));
}

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 de image/jpeg.

while (numMedia > 0) {
    numMedia = numMedia - 1;
    String mediaUrl = parameters.get(String.format("MediaUrl%d", numMedia));
    String contentType = parameters.get(String.format("MediaContentType%d", numMedia));
}

Procesar imágenes de MMS

Guardar las direcciones URL de los archivos multimedia

Según tu caso de uso, almacenar las direcciones URL de las imágenes (o videos u otro documento) puede ser todo lo que necesitas hacer. Existen 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 para facilitar el uso compartido.
  2. Son permanentes (a menos que elimines explícitamente los archivos multimedia; lo explicaremos más adelante).

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. Determinar una buena extensión para utilizar es algo complicado. Si solo esperas imágenes, puedes suponer que tienen una extensión “.jpg”. Para lograr un poco más de flexibilidad, puedes buscar el tipo MIME y basarte en eso a fin de determinar una buena extensión para utilizar.

Este es el código completo de nuestro controlador que guarda cada archivo adjunto de MMS en la carpeta App_Data:

Loading Code Sample...
        
        

        Saves MMS attachment with Java

        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. Haz lo que desees.

        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.

        Loading Code Sample...
              
              

              Eliminar un archivo multimedia

              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.

              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