Programa el envío diferido de SMS con AcitiveX

1. Programar el envío de SMS

Esta DLL te ofrece una serie de objetos y métodos con los que podrás realizar los envíos de forma muy sencilla sin tener que implementar un código complicado.  En este documento explicamos como realizar un envío en diferido o programarlo a determinadas fechas.

2. Documentación

 

Creación del objeto e instancia:

Primero debemos iniciar una instancia de la DLL en nuestro programa, para posteriormente llamar a la clase

Dim oDMEnvio As Object
Set oDMEnvio = Nothing
Set oDMEnvio = CreateObject("dcXMLSend.XMLSendClass");

De esta forma, el objeto oDMEnvio, nos permitirá interactuar con la plataforma de Descom SMS.

 

Configuración de la autentificación

Definiremos la autentificación a la Plataforma de Descom Mensajes SMS, asignando los siguientes parámetros:

oDMEnvio.Usuario = “nombre_de_usuario”
oDMEnvio.Clave = “contraseña_de_acceso”

 

Configurar datos opcionales de envío:

Disponemos de varios parámetros para configurar el envío que queremos realizar, a continuación les exponemos los parámetros disponibles

Nombre
Parámetro
Descripción Posibles Valores Tipo de
Dato
Remitente

Remitente que vamos a utilizar en el envío.

 

String
idEnvioExt

Puede definir un id de envío, de está forma podrá agregar nuevos mensajes a una programación, siempre que tenga este mismo identificativo.

  String
MaxNumSMS Número máximo de SMS que enviará en un solo mensaje. Si este campo es Cero, no tendrá ninguna limitación, salvo las impuestas por el protocolo (actualmente 99) 0, 1, 2, ... Int

Ejemplo:

oDMEnvio.Remitente = “Info”
oDMEnvio.idEnvioExt = “34"
oDMEnvio.MaxNumSMS=5

Agregar mensajes en la programación

La DLL dispone de una sub-clase para configurar los mensajes a enviar, se denomina, XMLMensajes, que a su vez dispone de 2 subclases para gestionar cada tipo de mensajes:

 

  • XMLMensajes.MensajesSMS

Es una colección con todos los mensajes a enviar o enviados. Para agregar un mensaje a la colección, disponemos de la función ADD la cual acepta los siguientes argumentos:

Nombre
Argumentos
Descripción Posibles Valores Tipo de
Dato
Id

Identificador del mensaje que vamos a enviar

 1, 2, 3, ...

Int
Destino

Número de móvil del destinatario del mensaje.

  String
Mensaje Texto del mensaje a enviar   String
Remitente Opcional; remitente para este mensaje   String

ControlarMensajesRepetidos

Control para no enviar mensajes repetidos por error.

True (por defecto); realizará dicho control, False; para deshabilitar este control

Bool

Ejemplo:

oDMEnvio.XMLMensajes.MensajesSMS.Add "1", "0034xxxxxxxxx", "SMS pruebas", ""
oDMEnvio.XMLMensajes.MensajesSMS.Add "2", "0034xxxxxxxxx", "SMS pruebas 2", "DescomSMS"
oDMEnvio.XMLMensajes.MensajesSMS.Add "2", "0034xxxxxxxxx", "SMS pruebas 2", "DescomSMS", False

  • XMLMensajes.MensajesWAP

Es una colección con todos los mensajes WAP a enviar o enviados. Para agregar un mensaje a la colección, disponemos de la función ADD la cual acepta los siguientes argumentos:

Nombre
Argumentos
Descripción Posibles Valores Tipo de
Dato
Id

Identificador del mensaje que vamos a enviar

 1, 2, 3, ...

Int
Destino

Número de móvil del destinatario del mensaje.

  String
Asunto Asunto del mensaje WAP   String

URL

Dirección URL con el contenido multimedia

 

String
Remitente Opcional; remitente para este mensaje   String

Ejemplo:

oDMEnvio.XMLMensajes.MensajesWAP.Add "3", "0034xxxxxxxxx", "Mi Foto", "<a href="http://www.mipagina.com/mifoto.jpg">http://www.mipagina.com/mifoto.jpg</a>", ""
oDMEnvio.XMLMensajes.MensajesWAP.Add "4", "0034xxxxxxxxx", "Melodia", "<a href="http://www.mipagina.com/cancion.mp3">http://www.mipagina.com/cancion.mp3</a>", ""

 

Creación de la programación.

Para programar el envío, debemos crear una clase dcXMLSend.Programacion, tal como se muestra en este ejemplo:

Dim Prog As Object
Set Prog = Nothing
Set Prog = CreateObject("dcXMLSend.Programacion");

Para iniciar el objeto, y dependiendo del tipo de programación de los mensajes que deseemos, realizaremos una de estas llamadas:
 

  • Enviar SMS una sola vez (diferido):

Set Prog = sms.programadoUnaSolaVez(nombreProgramacion, fecha)

  • nombreProgramacion (string); el nombre que deseamos que tenga dicha programación
  • fecha (date); la fecha y hora en las que se enviará el mensaje.
  • Enviar SMS Diariamente:

Set Prog = sms.programadoUnaSolaVez(nombreProgramacion, fecha)

  • nombreProgramacion (string); el nombre que deseamos que tenga dicha programación
  • fecha (date); la fecha y hora en las que se comenzará a enviar los mensajes. La hora determina la hora de cada envío.
  • Enviar SMS Semanalmente:

Set Prog = sms.programadoUnaSolaVez(nombreProgramacion, fecha, diaSemana)

  • nombreProgramacion (string); el nombre que deseamos que tenga dicha programación
  • fecha (date); la fecha y hora en las que se comenzará a enviar los mensajes. La hora determina la hora de cada envío.
  • diaSemana (integer); día de la semana en la que se enviaran el mensaje (0=Lunes ... 6=Domingo)
  • Enviar SMS Mensualmente:

Set Prog = sms.programadoUnaSolaVez(nombreProgramacion, fecha, diaMes)

  • nombreProgramacion (string); el nombre que deseamos que tenga dicha programación
  • fecha (date); la fecha y hora en las que se comenzará a enviar los mensajes. La hora determina la hora de cada envío.
  • diaMes (integer); día del mes en la que se enviarán el mensaje (1 .. 31)
  • Enviar SMS Anualmente:

Set Prog = sms.programadoUnaSolaVez(nombreProgramacion, fecha, diaMes, Mes)

  • nombreProgramacion (string); el nombre que deseamos que tenga dicha programación
  • fecha (date); la fecha y hora en las que se comenzará a enviar los mensajes. La hora determina la hora de cada envío.
  • diaMes (integer); día del mes en la que se enviarán el mensaje (1 .. 31)
  • Mes (integer); mes en el que se envía los mensajes (1 .. 12)




Una vez inciada el objecto Prog, podemos definir sobre él, los siguientes parametros:

  • Prog.ProgAvisar (boolean); avisar por correo cada vez que se produzca el envío de un mensaje programado.
  • Prog.ProgFechaFinal (date); especifique aquí cuando desea que se finalice la programación de los mensajes.

Es posible que una vez creemos una programación, queramos agregar más mensajes a la misma programación, para ello debemos enviar el mismo campo IdEnvioext, esto hará que en una previa programación con dicho ID, agreguemos nuevos mensajes.
 
IMPORTANTE: en este caso solo se agregan los nuevos mensajes en la programación, no se modifican las propiedades.

 

Enviar la petición

Una vez formalizada la autentificación y definido los mensajes, enviaremos los mismos con el siguiente comando:

DMSMS.SendXML "", "",,Prog


Con esta función se establece la comunicación con nuestra plataforma y se procede a realizar la autenticación y posterior programación de los mensajes.

 

Analizar la Respuesta

Respuesta de Autentificación y saldo

Para analizar el resultado de la programación, debemos analizar la clase RXAutentificacion que nos ofrece las siguientes propiedades:

Nombre
Parámetro
Descripción Posibles Valores Tipo de
Dato
Resultado

Resultado de la autentificación en la plataforma

  • 1; si es correcto
  • 0; si no se a llevado acabo a autentificación.
String
Comentario

Texto descriptivo del error al conectar con la plataforma

  String
Saldo Saldo actual de la cuenta, si ha autentificado correctamente en la plataforma Descom SMS 0, 1, 2, ... Int

Respuesta de la programación

La clase dcXMLSend.XMLSendClass, contiene los siguientes parámetros globales para determirar si los mensajes han sido programados correctamente:

Nombre
Parámetro
Descripción Posibles Valores Tipo de
Dato
ResultProgramacion

Devuelve si la programación se ha creado correctamente

  • true, si se creo
  • false; en caso de error
Bool

ResultProgramacionId

Identificativo único de la porgramación

0, 1, 2, ... long

ResultProgramacionMsgOk

Número de mensajes programados correctamente. 0, 1, 2, ... Int

ResultProgramacionMsgErr

Número de mensajes que no se han agregado en la programación.

0, 1, 2, ... Int

 

3. Ejemplos y Descargas

Pulsa aquí para descargar la DLL de Descom Mensajes SMS, documentación y ejemplos de uso.

 

Ejemplo en VB .NET

    'Crear Clase 
    Dim DMSMS As New dcXMLSend.XMLSendClass 
 
    'Definición de programación 
    Dim Programacion As dcXMLSend.Programacion 
    If Me.chkProgramacion.Value = 1 Then 
        Dim fechaInicio As Date 
        On Error Resume Next 
        fechaInicio = CDate(frmCProgramacion.txtFechaInicio.Text & " " & frmCProgramacion.txtHora.Text) 
        If Err Then 
            MsgBox "Error: fecha de programación incorrecta.", vbCritical, "Error" 
            Exit Sub 
        End If 
        On Error GoTo 0 
        Select Case frmCProgramacion.cmbRepeticion.ListIndex 
            Case 0 
                Set Programacion = DMSMS.programadoUnaSolaVez(frmCProgramacion.txtNombre.Text, fechaInicio) 
            Case 1 
                Set Programacion = DMSMS.programadoDiariamente(frmCProgramacion.txtNombre.Text, fechaInicio) 
            Case 2 
                Set Programacion = DMSMS.programadoSemanalmente(frmCProgramacion.txtNombre.Text, fechaInicio, frmCProgramacion.cmbDiaSemana.ListIndex) 
            Case 3 
                Set Programacion = DMSMS.programadoMensualmente(frmCProgramacion.txtNombre.Text, fechaInicio, frmCProgramacion.txtDiaMes.Text) 
            Case 4 
                Set Programacion = DMSMS.programadoAnualmente(frmCProgramacion.txtNombre.Text, fechaInicio, frmCProgramacion.txtDiaMes.Text, frmCProgramacion.cmbMes.ListIndex + 1) 
        End Select 
        If Not Programacion Is Nothing Then 
            Programacion.ProgAvisar = frmCProgramacion.chkAvisar.Value = 1 
            If frmCProgramacion.txtFechaFin.Enabled And frmCProgramacion.txtFechaFin.Text <> "" Then 
                Dim fechaFin As Date 
                On Error Resume Next 
                fechaFin = CDate(frmCProgramacion.txtFechaFin.Text) 
                If Err Then 
                    MsgBox "Error: fecha fin de programación incorrecta.", vbCritical, "Error" 
                    Exit Sub 
                Else 
                    Programacion.ProgFechaFinal = fechaFin 
                End If 
                On Error GoTo 0 
            End If 
        End If 
    End If 
 
    'Asignar acceso a plataforma Descom Mensajes 
    DMSMS.Usuario = Me.txtUsuario.Text 
    DMSMS.Clave = Me.txtClave.Text 
 
    'Crear Mensaje 
    DMSMS.XMLMensajes.MensajesSMS.Add 1, Me.txtDestinatario.Text, Me.txtMensaje.Text, Me.txtRemitente.Text 
 
    'Id Envío 
    If Me.txtIdEnvio.Text <> "" Then DMSMS.IdEnvioext = Me.txtIdEnvio.Text 
 
    'Enviar 
    DMSMS.SendXML "", "", , Programacion 
 
    'Verificar acceso 
    If DMSMS.RXAutentificacion.resultado = "1" Then 
        If Me.chkProgramacion.Value = 1 Then 
            MsgBox "Saldo de la cuenta: " & DMSMS.RXAutentificacion.Saldo _ 
            & vbCrLf & "ID Envio Descom: " & DMSMS.IdEnviodm _ 
            & vbCrLf & "ID Envio DLL: " & DMSMS.IdEnvioext _ 
            & vbCrLf & "Mensajes Programado: " & IIf(DMSMS.ResultProgramacion, "Correctamente", "Error: revise que la programación es correcta.") _ 
            & vbCrLf & "Identificativo de la programación: " & DMSMS.ResultProgramacionId _ 
            & vbCrLf & "Mensajes programados correctamente: " & DMSMS.ResultProgramacionMsgOk _ 
            & vbCrLf & "Mensajes programados con errores: " & DMSMS.ResultProgramacionMsgErr _ 
            , vbInformation, "Informe" 
        Else 
            MsgBox "Saldo de la cuenta: " & DMSMS.RXAutentificacion.Saldo _ 
            & vbCrLf & "ID Envio Descom: " & DMSMS.IdEnviodm _ 
            & vbCrLf & "ID Envio DLL: " & DMSMS.IdEnvioext _ 
            & vbCrLf & "Total mensajes: " & DMSMS.TotalMensajesEnviados _ 
            & vbCrLf & "Total mensajes enviaros: " & DMSMS.TotalMensajesEnviadosOK _ 
            & vbCrLf & "Total errores: " & DMSMS.TotalMensajesEnviadosError _ 
            & vbCrLf & "Créditos gastados: " & DMSMS.TotalCreditosGastados _ 
            , vbInformation, "Informe" 
            Dim MSG As MensajeSMS 
            For Each MSG In DMSMS.XMLMensajes.MensajesSMS 
                If MSG.resultado Then 
                    MsgBox "Mensajes " & MSG.Key & ": " & MSG.Comentario & vbCrLf & "Id envio: " & MSG.Iddm, vbInformation 
                Else 
                    MsgBox "Mensajes " & MSG.Key & ": " & MSG.Comentario & vbCrLf & "Id envio: " & MSG.Iddm, vbExclamation 
                End If 
            Next 
        End If 
    Else 
        MsgBox DMSMS.RXAutentificacion.Comentario, vbCritical, "Error de Acceso" 
    End If 
    'Vaciamos la colección de mnesajes para no replicar envíos 
    DMSMS.XMLMensajes.MensajesSMS.Clean

 

 

4. Gráfico

Interfaz DLL para enviar SMS