Enviar mensajes SMS y MMS en Ruby
En esta guía, te mostraremos cómo utilizar los SMS programables a fin de enviar mensajes SMS y MMS en tu aplicación web de Ruby.
Si bien es posible enviar mensajes SMS de solo texto en casi cualquier parte del mundo, el envío de contenido multimedia solo está disponible en EE. UU. y Canadá actualmente. Obtén más información en este artículo de soporte.
Los fragmentos de código de esta guía se han escrito con la versión 2.0.0 o una posterior del lenguaje Ruby y utilizan el SDK para Ruby de Twilio. ¡Empecemos!
Inicia sesión en tu cuenta de Twilio (o regístrate para obtener una)
Si tienes una cuenta y un número de teléfono de Twilio con funcionalidades de SMS, ya estás listo. Puedes pasar directamente al código.
Antes de poder recibir llamadas telefónicas y enviar mensajes, deberás registrarte para obtener una cuenta de Twilio y adquirir un número de teléfono de Twilio.
Si eres nuevo en Twilio, puedes registrarte para obtener una cuenta de prueba gratuita para comenzar. Una vez que te hayas registrado, dirígete a la consola, y obtén tu Account SID (SID de cuenta) y Auth Token (Token de autenticación). Necesitarás esos valores para los ejemplos de código siguientes.
Obtener un número de teléfono con funcionalidades de SMS (y MMS)
Para enviar mensajes, necesitas un número de teléfono de Twilio con funcionalidades de SMS. Si actualmente no posees un número de teléfono de Twilio con funcionalidades de SMS, deberás comprar uno. Después de explorar la página Buy a Number (Comprar un número), marca la casilla SMS y haz clic en Search (Buscar).
Si vives en EE. UU. o Canadá y deseas enviar mensajes MMS, puedes seleccionar la casilla MMS. En los resultados de búsqueda, aparecen los íconos de funcionalidad en la lista de números disponibles:
Busca un número que te guste y haz clic en "Buy" (Comprar) para agregarlo a tu cuenta.
Si estás utilizando una cuenta de prueba, deberás verificar tu número de teléfono personal a través de la consola para probar el envío de SMS a ti mismo.
Obtén más información sobre cómo usar tu cuenta de prueba gratuita.
Ahora que tienes un número de teléfono de Twilio, puedes empezar a enviar mensajes a dispositivos móviles.
Enviar un mensaje SMS en Ruby mediante la API REST
A fin de enviar un mensaje SMS saliente desde tu cuenta de Twilio, deberás crear una solicitud HTTP POST para el recurso de mensajes de Twilio.
La biblioteca para Ruby de Twilio te ayuda a crear una instancia nueva del recurso de mensajes mediante la especificación de los parámetros To, From y Body del mensaje.
Si aún no tienes instalada la biblioteca auxiliar de Ruby, puedes instalarla con RubyGems:
gem install twilio-ruby
También puedes instalar la biblioteca de forma manual. Las instrucciones se encuentran aquí.
Ahora, crea un archivo con el nombre send_sms.rb
e incluye el siguiente código:
Reemplaza los valores del marcador de posición para account_sid
y auth_token
con tus valores únicos. Puedes encontrarlos en tu consola de Twilio.
Ten en cuenta lo siguiente: está bien codificar de forma fija tus credenciales cuando comiences, pero debes utilizar variables de entorno para mantenerlas en secreto antes de implementarlas en producción. Para obtener más información, consulta el artículo sobre cómo establecer variables de entorno.
Para indicarle a Twilio qué número de teléfono utilizar para enviar este mensaje, reemplaza el número que aparece en from
con el número de teléfono de Twilio que adquiriste anteriormente.
A continuación, para especificar que tú eres el destinatario del mensaje, reemplaza el número que aparece en to
con tu número de teléfono celular. Tanto en el parámetro from
como to
, se debe utilizar el formato E.164 (+
y un código de país; por ejemplo, +16175551212
).
También incluimos el parámetro body
, que tiene el contenido del SMS que enviaremos.
Una vez que hayas actualizado el código de ejemplo, puedes probarlo al ejecutarlo desde la línea de comandos:
ruby send_sms.rb
En unos instantes, deberías recibir un SMS.
Si utilizas una cuenta de prueba, notarás que los mensajes que envíes siempre comenzarán con “Sent from a Twilio trial account” (Enviado desde una cuenta de prueba de Twilio). Una vez que actualices tu cuenta, dejarás de ver este mensaje. Obtén más información sobre el envío de mensajes SMS y MMS desde una cuenta de prueba.
Dediquemos un momento a entender lo que ocurre en segundo plano cuando se envía esta solicitud a Twilio.
Respuesta de Twilio
Cuando Twilio reciba tu solicitud para enviar un SMS mediante la API REST, verificará si se incluyó un número de teléfono válido en el campo from
. Twilio pondrá en cola el SMS o devolverá este error de HTTP en su respuesta a tu solicitud.
Si tu solicitud no genera ningún error, la respuesta de HTTP de Twilio incluirá el SID del mensaje nuevo. Este identificador único nos ayudará a hacer referencia a este mensaje más adelante: en el código anterior, el SID se imprimió en el terminal.
La respuesta JSON de Twilio incluye una gran cantidad de datos sobre el mensaje. La siguiente es una respuesta de ejemplo:
{"sid": "SMxxxxxxxxxxxxxxx",
"date_created": "Thu, 09 Aug 2018 17:26:08 +0000",
"date_updated": "Thu, 09 Aug 2018 17:26:08 +0000",
"date_sent": null,
"account_sid": "ACxxxxxxxxxxxxxxxx",
"to": "+15558675310",
"from": "+15017122661",
"messaging_service_sid": null,
"body": "This is the ship that made the Kessel Run in fourteen parsecs?",
"status": "queued",
"num_segments": "1",
"num_media": "0",
"direction": "outbound-api",
"api_version": "2010-04-01",
"price": null,
"price_unit": "USD",
"error_code": null,
"error_message": null,
"uri": "/2010-04-01/Accounts/ACxxxxxxxxx/Messages/SMxxxxxxxxxxxx.json",
"subresource_uris": {
"media": null
}
}
Puedes acceder a cualquiera de estos atributos desde el código de Ruby, como lo hicimos cuando imprimimos el message.sid
como cadena.
Intenta agregar una instrucción puts como puts message.status
. Guarda el archivo y, a continuación, vuelve a ejecutar el código con ruby send_sms.rb
una vez más. Deberías ver el estado del mensaje "queued
" impreso en el terminal.
Si recibes un error en la respuesta de Twilio o no recibes el mensaje, puedes consultar estos consejos para solucionar problemas con mensajes no entregados.
Si deseas realizar un seguimiento del estado de los mensajes en tiempo real, deberás configurar la URL StatusCallback. Obtén más información en nuestro tutorial sobre la confirmación de la entrega de mensajes en Ruby.
Enviar un mensaje a varios destinatarios
Si quieres enviar un mensaje a varios destinatarios, puedes crear un conjunto de destinatarios e iterar cada número de teléfono del conjunto:
numbers_to_message = ['+15558675310', '+14158141829', '+15017122661']
numbers_to_message.each do |number|
message = @client.messages.create(
body: 'Hello from my Twilio number!',
from: '+15017122661',
to: number
)
puts message.status
end
De esta manera, se creará una instancia de mensaje nueva para cada número de teléfono de la lista.
Nota sobre los límites de frecuencia de los mensajes
A medida que vayas enviando más mensajes a través de la API, Twilio los pondrá en cola para su entrega según el límite de frecuencia prescrito. Las solicitudes de API para mensajes que superen las frecuencias especificadas se pondrán en cola y se ejecutarán según la capacidad disponible.
Si la aplicación móvil intenta poner en cola más de 4 horas de tráfico saliente (p. ej., más de 14 400 mensajes a Canadá a través de un número de teléfono de código largo), la API empezará a devolver errores 429
.
Si necesitas poner en cola un gran volumen de mensajes, puede que te resulte útil aprovechar los servicios de mensajería de Twilio. Consulta nuestra guía sobre cómo configurar y enviar mensajes desde un servicio de mensajería para obtener más consejos.
Enviar un mensaje con contenido multimedia (MMS) en Ruby
Si bien es posible enviar mensajes SMS de solo texto en casi cualquier parte del mundo, el envío de contenido multimedia solo está disponible en EE. UU. y Canadá actualmente.
Para incluir contenido multimedia en un mensaje de texto impulsado por Twilio, es necesario agregar algo al código que escribimos anteriormente. Esta vez, debemos agregar el parámetro media_url
.
Crea un archivo con el nombre send_mms.rb
e incluye el siguiente código:
Vuelve a actualizar los parámetros from
y to
a fin de utilizar tu número de teléfono de Twilio y tu teléfono celular.
El parámetro media_url
nuevo de este código le indica a Twilio dónde ir para obtener el contenido multimedia que queremos incluir. Debe ser una URL de acceso público: Twilio no podrá acceder a ninguna URL que se encuentre oculta o que requiera autenticación.
Al igual que cuando envías un SMS simple, Twilio enviará datos sobre el mensaje en su respuesta a tu solicitud. La respuesta JSON contendrá el SID y URI únicos de tu recurso de contenido multimedia:
"subresource_uris": {"media": "/2010-04 01/Accounts/ACxxxxxxxx/Messages/SMxxxxxxxxxxxxx/Media.json"}
Cuando la API REST de Twilio cree el recurso de mensajes nuevo, guardará la imagen que se encuentra en el parámetro media_url
especificado como un recurso de contenido multimedia. Una vez creado, puedes acceder a este recurso en cualquier momento mediante la API.
Puedes imprimir este valor desde tu código de Ruby para ver dónde se almacena la imagen. Agrega la siguiente línea al final del archivo send_mms.rb
para ver el URI de contenido multimedia recién aprovisionado:
puts message.media.instance_variable_get :@uri
Guarda el archivo y ejecútalo desde la línea de comandos:
ruby send_mms.rb
En tan solo un instante, deberías recibir un mensaje de texto con una imagen.
¿Qué sigue?
Acabas de enviar correctamente algunos mensajes con la API de SMS programables de Twilio y la biblioteca auxiliar de Ruby.
Consulta estos recursos detallados para llevar tu mensajería programática al siguiente nivel:
- Obtén información sobre cómo enviar un SMS durante una llamada en curso con Ruby y Sinatra.
- Monitorea el estado del mensaje para confirmar su entrega.
- Aprende a responder un SMS enviado a tu número de teléfono de Twilio.
- Obtén información sobre cómo administrar el estado de los mensajes para convertir mensajes individuales en una verdadera conversación por SMS.
- Obtén más detalles con nuestra documentación de referencia de la API para mensajes.
- ¿Deseas enviar mensajes de gran volumen? Consulta nuestros servicios de mensajería.
¿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.