https://d226lax1qjow5r.cloudfront.net/blog/blogposts/what-can-i-do-with-mms/what-mms-can-do.png

¿Qué puedo hacer con MMS?

Publicado el August 30, 2022

Tiempo de lectura: 8 minutos

¿Qué puedo hacer con MMS?

Recientemente se publicó una pregunta en este sentido en uno de nuestros canales internos de Slack.

Slack screenshot showing the message "Hi team, what types of files can be sent over MMS?"Slack screenshot

El MMS como canal de comunicación es probablemente más conocido por el envío de imágenes, y en sus comienzos, el MMS era a menudo conocido como "mensajería de imágenes". En esta publicación del blog, veremos un ejemplo de envío de un archivo de imagen a través de MMS usando Messages API de Vonage. Sin embargo, antes de llegar a eso, quería proporcionar un poco más de información sobre MMS y algunas de sus otras capacidades.

Aunque se asocia sobre todo al envío de imágenes, el acrónimo MMS significa en realidad "Multi Media Service" (servicio multimedia). MMS no se limita al envío de archivos de imagen, sino que permite enviar muchos tipos de archivos diferentes a través de la red celular.

Actualmente, Messages API de Vonage admite cuatro tipos diferentes de mensajes MMS:

  • Imagen: Soporta el envío de .jpg, .jpeg, .png y .gif archivos

  • Audio: Admite el envío de .mp3 archivos

  • Video: Admite el envío de .mp4 archivos

  • vCard: Admite el envío de .vcf archivos

¿Por qué utilizar MMS?

La mensajería MMS tiene muchos usos diferentes. Se utiliza para mensajería promocionalel MMS puede añadir una dimensión extra a la mensajería SMS, promocionando un producto con imágenes, vídeos o incluso clips de sonido. También hay muchos casos de usos transaccionales Video como parte del flujo de trabajo de atención al cliente, o como comprobante de entrega de paquetes.

Cómo enviar un mensaje MMS con Messages API de Vonage

Si ya has estado usando Vonage para enviar mensajes SMS, o incluso si no lo has hecho, es súper fácil comenzar a enviar mensajes MMS usando Vonage, especialmente ahora que la Messages API de Vonage se ha agregado a nuestros SDK de servidor.

La API Messages expone un único punto final POST punto final: https://api.nexmo.com/v1/messagesy espera una cabecera Authorization (recomendamos utilizar la autenticación por token de portador) y una carga JSON similar a la siguiente:

{
  "message_type": "image",
  "image": {
    "url": "https://example.com/image.jpg"
  },
  "to": "447700900000",
  "from": "447700900001",
  "channel": "mms"
}

El ejemplo anterior es la estructura JSON que se utilizaría para enviar un mensaje de imagen a través de MMS.

Hay que tener en cuenta algunas cosas: la propiedad url de la imagen debe ser una URL de acceso público, y existen ciertos requisitos en relación con las propiedades to y from Numbers.

To Number

Actualmente, la Messages API admite el envío de MMS en EE.UU. a números de las siguientes redes:

  • AT&T

  • T-Mobile

  • Verizon

El número to número proporcionado a Vonage Messages API debe ser un número que pueda recibir MMS en una de estas redes.

A partir de Numbers

El número from debe ser un número USSC (US Short Codes), 10DLC (código largo de 10 dígitos) o TFN (número gratuito) habilitado para MMS y vinculado a una campaña registrada. Los distintos tipos de Numbers admiten diferentes capacidades MMS:

  • USSC: imágenes, vCard

  • 10DLC: imágenes, audio, Video, vCard

  • TFN: imágenes, audio, Video

Más información sobre los distintos tipos de números de teléfono.

Ejemplo de aplicación

La mejor manera de demostrar el uso de la API de mensajes de Vonage para enviar mensajes MMS es a través de una aplicación de ejemplo.

No tengo ningún producto que promocionar a través de MMS, pero me encantan cómics xkcdasí que utilicé el Vonage Ruby SDK para crear una pequeña aplicación Ruby que envía un mensaje MMS diario con un cómic aleatorio de xkcd. Sin embargo, si no eres un Rubyista, puedes utilizar uno de nuestros otros SDK de servidoro trabajar directamente con la Messages API para implementar algo similar.

Mi aplicación Ruby hace dos cosas:

A continuación, configuro una tarea Cron que ejecuta la aplicación una vez al día a una hora determinada.

Configuración de las dependencias

Para la primera tarea de la aplicación -- obtener los datos de la API de xkcd -- me topé con una aplicación RubyGem que proporcionaba esta funcionalidad. Desafortunadamente, no hacía exactamente lo que yo quería para mi aplicación en términos de cómo devolvía los datos, así que decidí escribir mi propio RubyGem, get_xkcdque sí lo hacía. Si quieres profundizar en la implementación, puedes consultar el código fuente en GitHub.

Mi Gemfile se parece a esto:

source "https://rubygems.org"

ruby "3.0"

gem "dotenv"
gem "vonage"
gem "rake"
gem "whenever", require: false
gem "get_xkcd"

La dependencia más importante es vonage gemaque utilizo para enviar los MMS a través de la API Messages API de Vonage.

Estoy usando mi get_xkcd para interactuar con la API de xkcd. El dotenv gema sirve para gestionar las variables de entorno de mi aplicación. La gema rake gema y whenever gema sirven para configurar una tarea que se ejecutará a través de Cron.

El expediente de solicitud

He creado un archivo app.rb que contiene la lógica para obtener los datos del cómic xkcd y luego enviar un mensaje MMS utilizando algunos de esos datos.

Mi archivo de aplicación principal tiene este aspecto:

# app.rb

require 'dotenv'
require 'vonage'
require 'get_xkcd'

Dotenv.load

random_issue_data = GetXkcd::Comic.fetch_random_issue_data

client = Vonage::Client.new(
  application_id: ENV['APP_ID'],
  private_key: File.read(ENV['PATH_TO_PRIVATE_KEY_PATH'])
)

message = Vonage::Messaging::Message.mms(
  type: 'image',
  message: {
    url: random_issue_data['img'],
    caption: random_issue_data['title']
  }
)

client.messaging.send(from: ENV['FROM_NUMBER'], to: ENV['TO_NUMBER'], **message)

La aplicación comienza requiriendo el dotenv, vonagey get_xkcd gemas.

require 'dotenv'
require 'vonage'
require 'get_xkcd'

Todas las variables de entorno necesarias se definen en un archivo .env en el directorio raíz de mi proyecto y luego se cargan en un archivo ENV usando el método Dotenv.load método.

Dotenv.load

Lo primero que debe hacer mi aplicación es obtener los datos de un cómic xkcd aleatorio. Mi biblioteca GetXkcd biblioteca define una clase Comic que proporciona varios métodos. Uno de estos métodos es fetch_random_issue_data que, como su nombre indica, obtiene los datos de un número aleatorio del cómic xkcd.

random_issue_data = GetXkcd::Comic.fetch_random_issue_data

La aplicación almacena el resultado en una random_issue_data variable. El valor de retorno del método es un Hash Ruby de datos para un cómic xkcd aleatorio, incluyendo una URL para la imagen del cómic como valor de la clave img y el título del cómic como valor de la clave title como valor de la clave. Estos valores se utilizarán más tarde al crear el mensaje MMS.

El resto del app.rb se ocupa de la creación y el envío del mensaje MMS.

Instanciación del objeto cliente

El primer paso para enviar un mensaje mediante la API Messages API de Vonage es instanciar un objeto Vonage Client de Vonage. Aquí pasamos dos argumentos de palabra clave application_id y private_key.

client = Vonage::Client.new(
  application_id: ENV['APP_ID'],
  private_key: File.read(ENV['PATH_TO_PRIVATE_KEY_PATH'])
)

Quizá se pregunte qué representan estos dos argumentos.

Para utilizar la Messages API, debes crear una Aplicación de Vonagea través del Panel para desarrolladores o la API de aplicacionesy habilítala para Mensajes.

Screenshot of the Messages toggle in the Dashboard Application Capabilities, with the toggle set to "on"Screenshot of the Messages toggle in the Dashboard

Una vez creada, la aplicación tendrá un ID de aplicación único. También podrás generar, y descargar, una clave privada para esta aplicación.

Screenshot of the Generate Private Key button in the Dashboard Application pageScreenshot of the Generate Private Key button in the Dashboard

Mi clave privada se almacena en el directorio raíz de mi archivo de proyecto. El ID de mi aplicación y la ruta a mi clave privada están definidos en mi archivo .env archivo.

Uno de los detalles de los que se encargan nuestros SDK de servidor es la autenticación y la generación de cabeceras de solicitud HTTP. En application_id y private_key introducidos al instanciar el objeto Client se utilizan posteriormente para generar un JWT (Token Web JSON) que se establece como valor de la cabecera Authorization que se envía con la solicitud HTTP a la Messages API.

Instanciación del objeto de mensaje MMS

El SDK Ruby de Vonage define un objeto Messaging::Message que proporciona métodos para crear objetos de mensajes específicos para cada canal. Aquí, al llamar al método mms devuelve un objeto MMS con propiedades basadas en los argumentos pasados.

message = Vonage::Messaging::Message.mms(
  type: 'image',
  message: {
    url: random_issue_data['img'],
    caption: random_issue_data['title']
  }
)

Aquí establecemos type en image (otras opciones para MMS type son audio, videoo vcard). En el message establecemos url a la URL del img de los datos de xkcd, y un opcional caption a la URL title de esos datos.

Envío del mensaje MMS

Y llegamos a la parte importante de la aplicación: ¡el envío del mensaje MMS!

client.messaging.send(from: ENV['FROM_NUMBER'], to: ENV['TO_NUMBER'], **message)

Llamando al método messaging en el objeto Client que creamos anteriormente devuelve un objeto Messaging objeto. A continuación, encadenamos una send sobre este objeto devuelto que combina los métodos from y to con el objeto message pasado, lo convierte a JSON y lo envía como cuerpo de una solicitud HTTP al punto final de la API de Messages POST de la API de mensajes.

Tenga en cuenta las restricciones de from y to Numbers explicadas anteriormente en este artículo.

Configuración del Cron Job

La tarea final es configurar el trabajo Cron. Podría editar manualmente el crontab manualmente, pero hay un Rubygem realmente útil llamado whenever que simplifica el proceso. La gema whenever ofrece diferentes opciones para ejecutar tareas, como ejecutar un comando bash o ejecutar una tarea rake tarea.

Rake es un ejecutor de tareas para Ruby. Te permite definir ciertas tareas con sintaxis Ruby, que luego pueden ser ejecutadas pasándolas al comando rake . Las tareas se definen en un directorio Rakefilepor lo que necesitamos añadir una al directorio de nuestro proyecto.

# Rakefile

desc "Send a random XKCD comic via MMS"
task :send_xkcd_mms do
  ruby 'app.rb'
end

Aquí defino una única tarea con una descripción (desc), un nombre de tarea send_xkcd_mmsy la propia tarea (definida dentro de un bloque do..end bloque) que es simplemente ejecutar mi archivo app.rb archivo.

Para programar la tarea con la función whenever gema necesito crear un archivo schedule.rb dentro de un directorio config y definir allí la programación.

# schedule.rb

job_type :rake, "cd :path && bundle exec rake :task"

every 1.day, at: '9:00 am' do
  rake "send_xkcd_mms"
end

La línea job_type :rake, "cd :path && bundle exec rake :task" establece algunos valores predeterminados para la ejecución de la tarea. La tarea en sí utiliza la sintaxis Ruby para establecer un intervalo (every 1.day), una hora específica (at: '9:00 am'), y luego la tarea que queremos programar dentro de un bloque do..end bloque (rake "send_xkcd_mms").

Para actualizar mi sistema crontab con esta programación, tengo que ejecutar whenever --update-crontab desde la línea de comandos.

Y ¡voilá! Cómics diarios de xkcd vía MMS.

Screenshot of xkcd comic issue 974 'The General Problem' in an MMSScreenshot of xkcd comic in an MMS

Conclusión y próximos pasos

En esta publicación del blog aprendimos un poco más sobre MMS, lo que puedes hacer con él y cómo usar Messages API de Vonage para enviar un mensaje MMS.

La participación de la comunidad es siempre bienvenida. No dudes en unirte a nosotros en el Slack de la comunidad de Vonage o envíanos un mensaje en Twitter.

Compartir:

https://a.storyblok.com/f/270183/373x376/e8d3211236/karl-lingiah.png
Karl LingiahDefensor del desarrollador Ruby

Karl es un defensor de los desarrolladores para Vonage, centrado en el mantenimiento de nuestros SDK de servidor Ruby y la mejora de la experiencia de los desarrolladores para nuestra comunidad. Le encanta aprender, hacer cosas, compartir conocimientos y, en general, todo lo relacionado con la tecnología web.