Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. PHP

Cómo Enviar Mensajes de Texto con PHP

by
Difficulty:BeginnerLength:LongLanguages:

Spanish (Español) translation by Viviana Brito (you can also view the original English article)

La mensajería de texto se ha extendido en todo el mundo -- a tal punto que un número incremental de aplicaciones web han integrado SMS para notificar a los usuarios sobre eventos, ventas o cupones directamente a través de sus dispositivos móviles. 

En este tutorial, vamos a cubrir los fundamentos del envío de mensajes de texto con PHP.


Vista General

Enviar un mensaje de texto (SMS), es realmente muy fácil. 

Debajo, hay un diagrama simplificado de cómo un mensaje puede ser enviado desde una aplicación web a un dispositivo inalámbrico. 

Vamos a desmenuzarlo -- parte por parte:

  • El mensaje es compuesto usando una aplicación web que es almacenada y ejecutada en un servidor HTTP  luego enviada a través de internet ("la nube") como un mensaje email. 
  • El email es recibido por una Puerta de enlace de Servicio de Mensajes Cortos (SMS Gateway), la cual convierte el mensaje de un mensaje de email a un mensaje SMS. 
  • El mensaje SMS, es entregado al Centro de Servicios de Mensajes Cortos (SMSC), que es un servidor que enruta la información a un dispositivo móvil específico. 
  • El mensajes es finalmente transmitido por la red inalámbrica a el recipiente. 

La mayoría de las redes inalámbricas, tienen una puerta de enlace SMS a través de la cual los mensajes tipo email pueden ser enviados como mensajes de texto a un dispositivo móvil.  Esto es bueno, porque desde el punto de vista del desarrollador, es generalmente gratuito -- sin embargo, por supuesto no es un servicio gratuito para el usuario final.  Todavía se aplican tarifas a quien recibe el mensaje y los mensajes enviados vía correo electrónico serán facturados como un mensaje de texto fuera de la red. 


Email a SMS

Para enviar un SMS mediante email, por lo general necesitará de dos cosas:

  • El número de teléfono o un identificador único del dispositivo móvil al que pretende llegar. 
  • Y la nombre de dominio de la red inalámbrica (muchos pueden ser encontrados en esta lista de direcciones email a SMS)

La siguiente convención puede ser seguida por la mayoría de los portadores:

phoneNumber es el número de teléfono del dispositivo móbil al que se le envía el mensaje y domainName.com es la dirección de la Puerta de Enlace SMS de la red. 

Para enviar un texto al Sr. Ejemplo, usted simplemente añade 3855550168@vtext.com a cualquier cliente de correo electrónico, escriba un mensaje y presione enviar.  Esto enviará un mensaje de texto al número de teléfono +1 (385) 555-0168 de la Red Inalámbrica Verizon. 

Por ejemplo, me enviaré un mensaje a mi mismo usando Gmail.

Cuando mi teléfono reciba el mensaje, debería parecerse a esto:

Bastante genial!


Funcion mail de PHP

Vamos a dar un paso más allá. Usando la Puerta de Enlace SMS, podemos enviar un mensaje de texto por email aplicando la función mail de PHP. La función mail tiene la siguiente firma: 

Puede leer más sobre el tema, aquí.

  • $to define el receptor o los receptores del mensaje.  Incluye ejemplos válidos: 
    • user@example.com
    • user1@example.com, user2@example.com
    • User <user@example.com>
    • User1 <user1@example.com>, User2 <user2@example.com>
  • $subject es bastante explicativo; debería ser una cadena que contiene título del mensaje.  Si embargo, los SMS no necesitan un título de mensaje.
  • $message es el mensaje que será entregado. Como se mencionó en el manual PHP,  "cada línea debería estar separada con un salto de línea LF (\n). Las líneas no deberían superar los 70 caracteres".

Para replicar la funcionalidad anterior, vamos a escribir el siguiente código PHP:


Prueba de Funcionamiento

Vamos a correr una prueba con PHP para asegurarnos que todo está configurado correctamente y que la función mail, efectivamente, enviará un mensaje de texto.  Aplicando el siguiente código, podemos ejecutar:

Cuando mi teléfono recibe el mensaje, va a parecerse a esto:

Si salta un error, vea la sección solución de problemas.

Como puede ver en la imagen de arriba, el mensaje muestra que proviene de Gmail. Esto es porque enruté todos mis mensajes salientes desde mi servidor local a través de ese servicio.  Desafortunadamente, hasta este momento, no tuve éxito en modificar el encabezado From para reflejar una dirección alternativa.  Parece ser que los encabezados de los correos electrónicos son quitados y reemplazados con encabezados preparados por la Puerta de Enlace SMS.  Si alguien conoce una solución alternativa, por favor deje un comentario y deja que el resto de nosotros lo sepa!. 


Añadiendo Usabilidad. 

El Margen

Con los conceptos básicos fuera del camino, vamos a tomar esta idea y envolver una interfaz de usuario a su alrededor. Primero, vamos a armar un simple formulario:

El Estilo

Ahora vamos a esparcir un poco de CSS:

Esto nos da de resultado el siguiente formulario:


El Script

La parte más importante de esto, es el script PHP. Ahora vamos a escribir un poco de código:

  • El script primero revisa si el formulario fue enviado. 
  • Si es así, chequea para ver si las variables phoneNumber , carrier y smsMessage fueron enviadas.  Esto es útil en el caso que pueda haber más de una formulario en la página. 
  • Si phoneNumber, carrier y smsMessage son variables, y phoneNumer y carrier no están vacías, se puede intentar enviar el mensaje. 
  • El argumento del mensaje en la función mail debería ser de 70 caracteres por línea.  Podemos dividir el mensaje en bloques de 70 caracteres, usando la función wordwrap
  • phoneNumer y carrier son concatenados y luego el mensaje es enviado usando la función mail.
  • Si la información está perdida o no puede ser validada, el script simplemente devuelve No fue enviada toda la información. 
  • Por último, mail devuelve un booleano indicando si tuvo éxito o no.  El valor es almacenado en $result en caso de necesitarlo para verificar que el mensaje fue realmente enviado. 

Observación: el método mail sólo notifica si el mensaje fue enviado o no.  No provee de una manera para revisar si el mensaje fue exitosamente recibido por el servidor receptor o la casilla de correo.  


El Código Final


Solución de Problemas

Error de Servidor Local

Para poder aplicar la función mail, debe tener ejecutándose un servidor de correo. Si está ejecutando bajo un servidor web, probablemente no tendrá problemas.  Pero si no está seguro, le recomiendo hablar con un administrador.  Esto también sirve para equipos personales.  Por lo tanto, si recibe errores como...

...va a tener que instalar y configurar un servidor de correo.  Esto está fuera del alcance de este tutorial. Sin embargo, si está trabajando en su máquina local, cambiando a algo como XAMPP puede resolver este problema.  Alternativamente, intente instalar Mercury Mail junto con WAMP, MAMP o en un sistema LAMP (o SAMP o OAMP, etc) (esas son muchas 'AMPs')

PHPMailer

Otra opción (es el método que prefiero) es usar PHPMailer. A continuación hay un ejemplo de cómo usar PHPMailer para conectar el servidor SMTP de Gmail y enviar el mensaje.  

Usarlo es tan simple como incluir una clase en tu script.

Esto debería imprimir algo parecido a: 

Puede llevar un poco más de tiempo ajustar la conexión dependiendo de su situación.  Si está planificando usar Gmail, Google provee información sobre la conexión. 


Conclusión

Hay una miríada de métodos para realizar la tarea de enviar un SMS a través de una aplicación web.  Este método es realmente para mensajería de bajo volumen (probablemente menos de 1.000 mensajes de texto por mes) y los desarrolladores que buscan arriesgarse sin pagar en efectivo.  Otras opciones incluyen:

  • Usando un Proveedor de Puerta de Enlace de SMS
    • Haciendo una búsqueda en Google, nos devolverá varias opciones. 
    • La mayoría de los proveedores de puertas de enlace SMS, incluyen una API para el envío de mensajes por medio de aplicaciones web.
    • Normalmente puede inscribirse en un servicio a un precio razonable, asumiendo que usted planifica enviar al menos unos 1,000 SMS por mes. 
    • También puede alquilar un número de código corto.
  • Usando un modem GSM
    • Esto puede ser costoso y una manera lenta de hacerlo, ya que usted debe comprar un módem y tener un contrato con una red inalámbrica. 
    • Usted también deberá tener que usar un conjunto de comando AT (Hayes).
  • Utilice una conexión directa a una red inalámbrica, lo que requerirá de algunas negociaciones y mucho dinero.

Este tutorial no es de ningún modo una revisión comprehensiva del envío de mensajes de texto con PHP; pero debería ayudarlo a comenzar! Espero que este tutorial haya sido de su interés.  Muchas gracias por leer!

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.