Hola amigos, en esta ocasión he elaborado un breve tutorial sobre cómo realizar el envió de mensajes de texto a través de una página web, para ello, usaremos el lenguaje de programación php para realizar nuestro entorno web combinado con HTML, además usaremos el motor de base de datos mysql y el mismo programa usado en mi anterior tutorial sobre “Montar un servidor de mensajes de texto con vb.net y comandos at”.
Muy bien para darles una idea de lo que trata el programa, lo que se hará es que cada persona que entre a la página web puede guardar un mensaje de texto en la base de datos, dicho mensaje que queda almacenado en la base de datos va a ser leído por nuestra aplicación de escritorio desarrollada en vb.net que va a estar conectada a la base de datos a través de la ip del servidor y cada cierto tiempo nuestro programa va a estar consultando la base de datos para saber si hay sms pendientes o nuevos, cada vez que el programa en vb.net detecte un nuevo mensaje, este automáticamente intentara realizar el envió del mensaje al destinatario que hayamos especificado.
Tal vez se preguntaran ¿por qué realizar un programa que funcione de esta manera?
Pues bueno sin dar más vueltas de esta manera es que las grandes empresas que ofrecen servicios de gateways para el envio de sms, si! todo lo que hemos visto o escuchado sobre api’s o componentes para el envío de dichos sms desde una página web desemboca en un gran servidor que por su puesto debe tener uno o varios dispositivos conectados para poder hacer el envío (viéndolo desde la capa más básica).
Por otra parte amigos aclaro algo, es posible interactuar con nuestro celular o dispositivo móvil a través de un lenguaje que se ejecute del lado del servidor como es PHP, JSP o ASP pero para hacerlo correctamente habría que utilizar funciones que pueden resultar un poco tediosas de implementarlas, algunas con Ajax ya que se requiere tener una respuesta inmediata acerca de lo que está procesando el dispositivo móvil; de tal manera para trabajar con mayor facilidad y sin muchas complicaciones usaremos vb.net como intermediario entre nuestra página web y la base de datos.
Listo, dejando claro los términos anteriores sobre el funcionamiento de nuestra aplicación comencemos a la elaboración y estructuración del mismo:
Inicialmente vamos a crear una simple pagina web en la que solicitemos como entrada el numero de celular de la persona a quien le enviaremos el sms y un campo de texto donde se redacte el mensaje a enviar.
Bueno el diseño HTML que he realizado es el siguiente:
pagina index.php
El código en html que he escrito es el siguiente (recomiendo que usen un editor para html-php, yo uso php designer).
<html>
<head>
<title>Ingrese su mensaje sms a enviar</title>
</head>
<body>
<form name="form1" method="post" action="guardar.php">
<br />
<center><h2>Plataforma web de envio de SMS</h2></center>
<table align="center" bgcolor="#FFFFFF" cellspacing="0">
<tr>
<td><img src="titulo.png" width="100%"/></td>
</tr>
</table>
<br />
<table border="1" align="center">
<tr bgcolor="#C8D1E0">
<td>Numero de celular a enviar:</td>
<td><input type="text" name="textnum"/></td>
</tr>
<tr>
<td>Mensaje:</td>
<td><textarea name="textmensaje" rows="5"></textarea></td>
</tr>
</table>
<br />
<table align="center">
<tr>
<td><input type="submit" value="Enviar"/></td>
<td><input type="reset" value="Borrar"/></td>
</tr>
</table>
</form>
</body>
</html>Luego les recomiendo que instalen el appserv o wamp para que creen la base de datos, la base de datos la llamaremos envio_sms, luego creamos una tabla, la que llamaremos mensajes y es la que almacenara los mensajes que vamos a enviar desde la web.
Bien los campos que usaremos en la tabla mensajes serán:
• Id: que va a ser un entero de tipo autoincremento.
• Numero: que corresponde al número de nuestro destinatario.
• Mensaje: que corresponde al mensaje de texto que deseamos enviar.
• Estado: indica si el mensaje ha sido enviado o no enviado.
Se puede ver la imagen de la estructura de la base de datos:
Bien ahora conectemos la base de datos con nuestra página web, eso será en la pagina guardar.php que se llamara cuando enviemos los datos escritos en el formulario.
Dentro de etiquetas php lo que hacemos es traer los datos que están en el text y en el textarea,
Incluimos el archivo llamado funciones .inc que contiene una simple función para realizar la conexión a la base de datos; por ultimo ejecutamos el insert de los datos a la base de datos.
archivo guardar.php
<?php
//aqui guardo los datos en la base de datos
$num=$_POST['textnum'];
$msj=$_POST['textmensaje'];
include ("funciones.inc"); // llama el archivo funciones.inc donde le hace la conexion con la BD
$link =conectar(); // Se llama la funcion conectar(); que establece la conexi?n
mysql_select_db("envio_sms", $link);//Fuci?nque seleciona la base de datos
$cad="insert into mensajes values ('0','$num','$msj','no enviado')";
$result= mysql_query ($cad, $link);//ejecut la consulta a la base de datos
print "Los Datos se han insertado en forma correcta...";
print "<p><a href='index.php'>Regresar a escribir un nuevo mensaje</a></p>";
print mysql_error();//Imprime un mensaje error en el caso de algun problema
?>archivo funciones.inc:
<?php
#Funciones relacionados con la base de datos
function conectar()
{
$db = "envio_sms";
$link = @mysql_pconnect ("localhost","root","12345");
if (!$link)
{
return (FALSE);
}
else
{
return($link);
}
}
?>
Aquí primero se especifica la base de datos y se escriben parámetros del servidor de la base de datos que puede ser localhost o 127.0.0.1 cuando la bd está en el equipo local o si la bd esta en red o en un servidor remoto en la web se escribe la dirección del servidor web que lo suministra nuestro proveedor del hosting; después se escribe el usuario de mysql que es root y nuestra contraseña que en mi caso es 12345.
Listo amigos, eso es todo ya esta lista nuestra aplicación web podemos ejecutarla para hacerle una prueba.
De esta manera queda guardado nuestro sms en la base de datos, podemos ver el registro en la base de datos entrando al appserv
Aquí se ve el sms que hemos guardado y nos hemos dado cuenta que el sms está en estado no enviado, eso porque la aplicación en vb.net aún no se encuentra en ejecución.
bien, despues de haber comprobado que nuestra pagina web esta interactuando correctamente con la base de datos, podemos proceder a conectar visual basic.net con mysql, para ello debemos instalar el driver que funciona como conector el cual subire para que lo descarguen:
luego, debemos ir a la siguiente ruta C:\Program Files\MySQL\MySQL Connector Net 5.2.2\Binaries\.NET 2.0 para que copiemos la dll que instala el programa y que servira como conector de mysql con vb.net.
dicha dll la pegamos en la carpeta debug de nuestro programa para que la aplicacion que desarrollamos sea portable a cada tipo de conexion en equipos que solo tengan el mysql instalado.
Bien amigos, después de ver los pasos para instalar el conector de mysql con vb.net vamos a agregar la referencia a nuestra dll de mysql, lo que hacemos es ir a la opción proyecto de la barra de menú de vb.net y en el menú desplegable seleccionamos la opción que dice “agregar referencia”, en el cuadro que aparece, selecccionamos la opción examinar y buscamos dentro de nuestro proyecto el conector de mysql con vb.net tal y como se ve en la imagen:
Listo, una vez agregada la referencia creamos un módulo en el cual declararemos variables públicas para usarlas en el programa y además crearemos la cadena de conexión del programa de escritorio con el servidor de la base de datos. Tal y como les había dicho, la base de datos puede estar en un equipo local, en un servidor dentro de una red lan o puede ser un servidor web que este remoto.
Imports MySql.Data.MySqlClient
Module Modulo_conexiones
Public cadena As String
Public conexion As New MySqlConnection
Public sql As String
Public mycommand As New MySqlCommand
Public mycommand2 As New MySqlCommand
Public myAdapter As New MySqlDataAdapter
Public tabla As New DataTable
Public indica_conexion As Boolean
#Region "Aqui me conecto"
Public Sub conectarme()
indica_conexion = False
'realizo la conexion'
Try
cadena = "server=localhost; user id=root; pwd=12345; database=envio_sms"
conexion.ConnectionString = cadena
conexion.Open()
'MsgBox("conexion establecida!!!")
indica_conexion = True
Catch ex As Exception
indica_conexion = False
MsgBox(ex.Message)
End Try
End Sub
#End Region
End Module
Luego a nuestro programa agregamos un botón y un timer tal y como se ve en la imagen:
Al timer le colocamos una pulsación de 1000 milisegundos, es decir, 1 segundo en el parámetro interval, luego, en nuestro botón enviar sms de web lo que hacemos es lo siguiente:
Private Sub Button_sms_web_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_sms_web.Click
contador = 0
conectarme()
If (indica_conexion = True) Then
'activo el timer que lee los sms de la base datos
Me.Timer1.Enabled = True
End If
End SubInicializamos la variable contador en o, nos conectamos a la base de datos y si la conexión fue exitosa activamos el timer que se encargara de realizar todo el proceso de consulta a la base de datos y envio del sms.
Ok, el código del timer es:
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
If (contador = 2) Then
contador = 0
Dim items As Integer
Try
sql = "SELECT * FROM mensajes where estado='no enviado'"
mycommand.Connection = conexion
mycommand.CommandText = sql
myAdapter.SelectCommand = mycommand
tabla.Rows.Clear()
myAdapter.Fill(tabla)
Refresh()
items = tabla.Rows.Count
'MsgBox(items)
' MsgBox(tabla_datos.Rows(0).Item(0))
'voy enviando cada mensaje
idmensaje = tabla.Rows(0).Item(0)
' MsgBox(idmensaje)
establecer_modo_sms_web()
establecer_numero_web(tabla.Rows(0).Item(1))
envio_sms_web(tabla.Rows(0).Item(2))
'----------------
Catch ex As Exception
' MsgBox(ex.Message)
End Try
End If
contador = contador + 1
End Sub
Lo que hace es que cada 2 segundos se estará preguntando a la base de datos si existe un nuevo sms guardado desde la pagina web, en caso tal de que haya un mensaje, guardara en una variable el id del mensaje, llamara a la función establecer_modo_sms_web() que corresponde a las definidas en cada botón para realizar el envio de cada sms(explicada en el post anterior), luego se llama a la función establecer_numero_web() pasándole como parámetro el numero de celular del destinatario establecer_numero_web(tabla.Rows(0).Item(1)) , y por ultimo se llama a la función envio_sms_web(tabla.Rows(0).Item(2)) a la cual se le pasa como parámetro el mensaje de texto.
Muy bien, ya explicado lo que hara nuestro timer, veamos lo que realiza cada función dentro del timer.
Sub establecer_modo_sms_web()
sib = 0
Try
SerialPort1.Write("AT+CMGF=1" & Chr(13))
Me.TextBox_resp.Clear()
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub Sub establecer_numero_web(ByVal numero_cell As String)
sib = 0
Try
SerialPort1.Write("AT+CMGS=" & Chr(34) & numero_cell & Chr(34) & Chr(13))
Me.TextBox_resp.Clear()
Catch ex As Exception
MsgBox(ex.Message)
End Try
End SubLa función envio_sms cumple un papel importante, ya que cada vez que se envía un sms, se le cambia el estado a dicho mensaje en la base de datos para determinar que este ha sido enviado, tal y como se plantea a continuación:
Sub envio_sms_web(ByVal mensaje_web As String)
sib = 0
Try
SerialPort1.Write(mensaje_web & Chr(26))
Me.TextBox_resp.Clear()
' MsgBox("Mensaje enviado con exito!")
Catch ex As Exception
MsgBox(ex.Message)
End Try
'despues que envio el mensaje voy modificando el estado del registro en la base de datos
sql = "SELECT *from FROM mensajes"
mycommand2.Connection = conexion
mycommand2.CommandText = sql
If conexion.State() = ConnectionState.Closed Then
conexion.Open()
End If
mycommand2.Parameters.Clear()
mycommand2.Parameters.AddWithValue("?estado", "enviado")
mycommand2.Parameters.AddWithValue("?idm", idmensaje)
mycommand2.CommandText = "Update mensajes set estado=?estado WHERE id=?idm"
Try
mycommand2.ExecuteNonQuery()
'MsgBox("La tabla info_inventariodb Se actualizo Correctamente!")
Refresh()
Catch ex As Exception
MsgBox("Imposible Actualizar porque...:" & ex.Message)
End Try
'cierro la conexion
conexion.Close()
End Sub
Por ultimo colocamos unas funciones de control dentro del botón conectar de la aplicación, lo que hacemos es detener el timer y asignar a nuestra variable contador el valor de 0 asi:
Private Sub BtnConectar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnConectar.Click
Try
If BtnConectar.Text = "Conectar" Then
BtnConectar.Text = "Desconectar"
Setup_Puerto_Serie()
Else
If SerialPort1.IsOpen Then
SerialPort1.Close()
Me.Timer1.Enabled = False
contador = 0
End If
BtnConectar.Text = "Conectar"
End If
Catch ex As Exception
End Try
End Sub
Muy bien amigos una vez terminada nuestra aplicación, podemos ejecutar nuestro programa centinela 8el de vb.net) y enviamos un sms desde la pagina web.
Ya corriendo el programa de escritorio, nos conectamos al puerto COM, y presionamos el botón enviar sms de web que inmediatamente se conecta a la base de datos y activa el timer que lee los mensajes guardados y que sean no enviados.
Luego, entramos a la pagina web y escribimos otro mensaje, en esta ocasion voy a enviar un sms por cobrar al celular de un amigo (porque no tengo saldo), aqui en colombia se le antepone el numero 485 al numero de celular a enviar por ese el destinatario posee 13 digitos, podemos ver en la imagen la prueba:
si estamos en el mismo equipo servidor o donde esta la aplicacion de escritorio, podemos ver la respuesta del movil cuando procesa el mensaje a enviar:
despues de que se haya enviado el sms con exito, tambien podemos ver los mensajes no leidos en el celular, alli veremos el mensaje que nos envia movistar para avisarnos que el sms fue entregado (cuando es por cobrar):
por ultimo podemos acceder al appserv(nuestro administrador de base de datos) para darnos cuenta de los registros que alli estan guardados y del estado de los mensajes, como se ve en la imagen:
bueno amigos, se ha llegado al final del tutorial, quiero dejarles algunas recomendaciones para que esta aplicacion les funcione correctamente:
1) les recomiendo que instalen el MySQL5 que lo pueden descargar desde la pagina de mysql ya que cuando lo vayan a instalar habiliten las conexiones remotas entrantes a la base de datos.
2) si van a instalar appserv o wamp deseleccionar el checkbox que dice instalar el motor de base de datos de mysql pues va a generar problemas ya que el proceso existira si ejecutaron correctamente el paso 1 y ademas el mysql que traen esos programas no tienen habilitada las conexiones entrantes al servidor de base de datos desde el conector de vb.net que estamos usando.
3) si la base de datos esta en dentro de un hosting, modificar el archivo funciones.inc especificando la direccion del servidor de mysql asi como el usuario y la contraseña con el que se conectaran, lo mismo deben hacer con el programa de escritorio en vb.net
4) si la base de datos y la pagina web se encuentran dentro de un servidor que esta en una red LAN solo deben modificar la cadena de conexion del programa en vb.net escribiendo la direccion ip del servidor en lugar de localhost y especificar los parametros de usuario y contraseña para realizar la conexion correctamente.
bueno amigos, espero y tengan en cuenta estas importantes recomendaciones, la aplicacion es muy sencilla e intuitiva, la pueden usar para prestar el servicio de envio de sms desde la web claro aqui esta a pequeña escala pero representa una de las muchas soluciones que se le puede dar a esta situacion, ademas si cuentan con un hosting pago (ya que en un gratuito no funciona), pueden montar alli su pagina, personalizarla con grupos de usuarios, que cada usuario pueda tener un cupo de envio de sms y el mismo pueda consultar el estado de sus mensajes, o si quieren los invito a que lo prueben creando un dns con el servicio que presta la pagina no-ip y hagan la prueba de convertir su pc en su propio servidor para el envio de mensajes de texto desde internet...
espero y el tutorial haya sido de su agrado, si tiene alguna duda o inquietud no duden en comentarme...