Te mostraremos los pasos para configurar un servidor de envío de SMS en eFactory ERP en la Nube.
A continuación se resumen los pasos:
Primero debemos ingresar al sistema de eFactory colocando nuestro usuario y contraseña en la pantalla inicial de eFactory, luego presionaremos el botón de Iniciar Sesión y seleccionaremos el sistema de Administrativo, la Empresa y la Sucursal de la Empresa y hacemos clic en el botón .
a. Al ingresar en el sistema debemos seleccionar el módulo Sistema y al desplegar la sección de Actualizaciones seleccionaremos la opción de Complementos Locales.
a. Luego de haber seleccionado la opción de Complementos Locales se muestra la pantalla donde debemos presionar el botón .
b. Despues de presionar el botón el formulario de Complementos Locales cambiará a modo registro y en este debemos llenar los campos escenciales para crear el complemento:
Luego de haber creado el nuevo Complemento Local debemos registrar el nombre del nuevo complemento en la opción SERSMS - Servicio de SMS.
a. Para esto debemos seleccionar el módulo Sistema y al desplegar la sección de Operaciones seleccionaremos la opción de Opciones.
b. Al seleccionar la opción de Opciones se muestra la pantalla donde debemos presionar el botón .
c. Luego de presionar el botón se abrirá la pantalla de Busqueda: Opciones, en esta debemos buscar y seleccionar la opción SERSMS - Servicio de SMS y despues debemos hacer clic en el botón para seleccionar la opción.
d. Al seleccionar la opción SERSMS - Servicio de SMS debemos hacer clic en el botón .
e. Despues de presionar el botón el formulario de Opciones cambiará a modo edición y en este debemos asignar el nombre del archivo aspx del nuevo complemento en el campo Valor.
Por último debemos presionar el botón para guardar la actualización de la opción.
Despues de crear el nuevo Complemento Local en eFactory, debemos crear los archivos fuentes de este complemento.
a. Para esto debemos crear un archivo Nombre_del_Complemento.aspx y un archivo Nombre_del_Complemento.aspx.vb.
Nota: Podemos duplicar los archivos fuentes de otro complemento y editarlo con lo que se explicará mas adelante.
Despues de crear los archivos fuentes del complemento, debe abrir los archivos en Microsoft Visual Studio para editarlos.
b. En el archivo Nombre_del_Complemento.aspx debemos crear una estructura básica HTML sin contenido; y en la etiqueta Page debemos asignar el mismo nombre del complemento en los parámetros Codefile (Nombre_del_Complemento.aspx.vb) e Inherits (Nombre_del_Complemento).
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Nombre_del_Complemento.aspx.vb" Inherits="Nombre_del_Complemento" %>
c. En el archivo Nombre_del_Complemento.aspx.vb debemos:
Imports System.Net
'---------------------------------------------------'
' Inicio de clase "Nombre_del_Complemento"
'---------------------------------------------------'
Partial Class Nombre_del_Complemento
Inherits vis2formularios.frmFormularioGenerico
Implements cusAplicacion.iServicioMensajeria
Private Shared loRegLimpiarNumero As New Regex("[^0-9]", RegexOptions.Compiled)
End Class
d. La función mEnviarMensaje recibirá en los parámetros:
Adicionalmente esta función deberá retornar un valor Booleano e implementar la interfaz iServicioMensajeria.mEnviarMensaje.
Public Function mEnviarMensaje(lnTipo As iServicioMensajeria.enuTipoMensaje, laDestinatarios() As String, lcMensaje As String, laParametrosAdicionales As ArrayList, ByRef lnMensajesEnviados As Integer, ByRef lcDescripcionError As String) As Boolean _
Implements iServicioMensajeria.mEnviarMensaje
Dentro de la función mEnviarMensaje debemos programar la conexión al API del servicio de SMS que hayamos contratado.
Primero debemos definir las variables donde definiremos los datos de acceso para el API de envío de SMS, en el caso del API de MassivaMovil estos datos serían la URL, el usuario (Correo) y la clave.
Dim lcUrl As String = "https://www.sistema.massivamovil.com/webservices/SendSms"
Dim lcUsuarioFactory As String = "correo@ejemplo.com"
Dim lcClaveFactory As String = "###############"
Segundo debemos recorrer el Array de destinatarios, para limpiar los números de teléfono utilizando la función loRegLimpiarNúmero y luego los guardamos en la variable lcDestinatarios de tipo String separados por punto y coma (;).
Dim lcDestinatarios As String = ""
'Preparación de destinatarios
For i As Integer = 0 To laDestinatarios.Length - 1
laDestinatarios(i) = loRegLimpiarNumero.Replace(laDestinatarios(i), "")
Next
lcDestinatarios = String.Join(";", laDestinatarios)
Tercero debemos validar el texto del mensaje y dividirlo en fragmentos si la longitud del contenido supera el límite de carácteres del servicio de mensajería.
Cuarto debemos preparar los parámetros que asignaremos al URL para la petición GET al servicio de mensajería.
'Preparación de llamada
Dim lcParametros As String = ""
lcParametros &= "?usuario=" & System.Web.HttpUtility.UrlEncode(lcUsuarioFactory)
lcParametros &= "&clave=" & System.Web.HttpUtility.UrlEncode(lcClaveFactory)
lcParametros &= "&telefonos=" & System.Web.HttpUtility.UrlEncode(lcDestinatarios)
lcParametros &= "&texto=" & System.Web.HttpUtility.UrlEncode(lcMensaje)
Quinto debemos realizar la petición GET al API utilizando la URL y los Parámetros de esta; y recibir la respuesta de la petición al API.
'Llama al servicio web: Primer mensaje
Dim lcResultado As String = ""
Dim loPeticion As HttpWebRequest
Dim loRespuesta As IO.StreamReader
loPeticion = HttpWebRequest.Create(lcUrl & lcParametros)
loPeticion.Method = "GET"
Try
loRespuesta = New IO.StreamReader(loPeticion.GetResponse.GetResponseStream())
lcResultado = loRespuesta.ReadToEnd()
Catch ex As Exception
lcDescripcionError = ex.Message
Return False
End Try
Sexto debemos validar la respuesta de la petición al API utilizando la función mObtenerMensajeAPI para verificar que no haya ocurrido un error en el envío de mensajes. Si ocurre un error debemos almacenarlo en el parámetro lcDescripciónError.
'Si hubo un mensaje de error: salir
lnMensajesEnviados = 0
Dim lcMensajeAPI As String = frmEnvioSmsMIEMPRESAMassivaMovil.mObtenerMensajeAPI(lcResultado)
If (lcMensajeAPI <> "") Then
lcDescripcionError = lcMensajeAPI
Return False
End If
Septimo, en la respuesta de la petición al API debemos validar la cantidad de mensajes enviados y la almacenaremos en el parámetro lnMensajesEnviados.
Dim loDocumento As New System.Xml.XmlDocument()
Try
loDocumento.LoadXml(lcResultado)
Catch ex As Exception
Return ""
End Try
Dim loEstatus As System.Xml.XmlElement = loDocumento.SelectSingleNode("respuesta/status")
If loEstatus Is Nothing Then
Return ""
End If
Dim lnEstatus As Integer = 0
Integer.TryParse(loEstatus.InnerText, lnEstatus)
lnMensajesEnviados += lnEstatus
Octavo, si la longitud del mensaje supera el límite de carácteres del servicio de mensajería, podemos ejecutar nuevamente la petición GET con las partes adicionales del mensaje.
Por último, al final de la función mEnviarmensaje debemos limpiar el parámetro lcDescripcionError y debemos retornar TRUE al servicio de envío de SMS de eFactory.
e. La función mObtenerMensajeAPI recibirá el parámetro lcResultado (String) con la respuesta de la petición al API, y esta función deberá retornar un valor String con el contenido de la respuesta de la petición al API.
Dentro de la función mObtenerMensajeAPI leeremos la respuesta del servicio de mensajería para determinar si ocurrió un error en el envío.
Private Shared Function mObtenerMensajeAPI(lcResultado As String) As String
Dim loDocumento As New System.Xml.XmlDocument()
Try
loDocumento.LoadXml(lcResultado)
Catch ex As Exception
Return ""
End Try
Dim loEstatus As System.Xml.XmlElement = loDocumento.SelectSingleNode("respuesta/status")
If loEstatus Is Nothing Then
Return ""
End If
'Si el estatus es mayor a cero: se envió el mensaje
Dim lnEstatus As Integer = 0
Integer.TryParse(loEstatus.InnerText, lnEstatus)
If (lnEstatus > 0) Then
Return ""
End If
'Si el estatus es menor o igual a cero: hubo un error.
Dim loMensaje As System.Xml.XmlElement = loDocumento.SelectSingleNode("respuesta/mensaje")
If loMensaje Is Nothing Then
Return "No fue posible enviar los mensajes: error interno en la respuesta del proveedor de servicio de mensajería."
End If
Return loMensaje.InnerText
End Function
f. Por último en la sección de bitácora debemos indicar quien realizó el complemento, la fecha de creación y las tareas realizadas, para llevar control de los cambios realizados sobre el complemento.
a. Despues de terminar de modificar los archivos del nuevo complemento, debemos ingresar en el sistema, seleccionar el módulo Sistema y al desplegar la sección de Operaciones seleccionaremos la opción de Subir Archivos.
b. Luego de haber seleccionado la opción de Subir Archivos se muestra la pantalla donde debemos subir los archivos (aspx, vb) en la sección Complementos y por último hacer clic en el botón .