https://a.storyblok.com/f/270183/37690/fc66b3d59e/sms-excel.png

Enviar un SMS desde una hoja de cálculo Excel

Publicado el February 2, 2023

Tiempo de lectura: 6 minutos

Actualización (junio de 2026): Esta entrada se ha actualizado para reflejar el punto final actual de la SMS API de Vonage, las directrices de autenticación actualizadas y las mejores prácticas de seguridad.

Introducción

Microsoft ofrece una forma de añadir nuevas funcionalidades a las aplicaciones de Office, como Microsoft Excel, para solicitar información al usuario e interactuar con él de manera específica según las necesidades de tu empresa. Puede realizar estas tareas de forma más eficiente utilizando Visual Basic para Applications (VBA). Se trata de un lenguaje de programación sencillo pero potente que puede utilizar para realizar acciones como importar sus contactos de Microsoft Outlook a una hoja de cálculo de Microsoft Excel.

En esta entrada del blog, utilizaremos VBA en Microsoft Excel para enviar un mensaje SMS. Solo tienes que introducir el número de móvil y el texto que quieras enviar, y luego pulsar un botón para enviarlo. Puedes modificar el código para añadir funciones adicionales que tu empresa pueda necesitar, como la programación de envíos. ¡Empecemos!

Requisitos previos

Antes de empezar, necesitarás:

  • A account de la API de Vonage : una vez que la hayas creado, encontrarás tu clave API y el secreto de la API en el panel de control de la API de Vonage en la sección «Configuración de la API»

  • Un número virtual de Vonage desde el que enviar mensajes; puedes adquirir uno en Numbers > Comprar números en el panel de control

  • Microsoft Excel (cualquier versión reciente que admita VBA)

Nota de seguridad: Tu clave API y tu secreto API son datos confidenciales. Nunca compartas tu hoja de cálculo con estos valores rellenados, y nunca los subas al control de código fuente. Trátalos igual que tratarías una contraseña.

SMS API de Vonage frente a la Messages API

Vonage dispone de dos API para enviar SMS: la API dedicada SMS API y la API multicanal Messages API. La SMS API es sencilla y se adapta perfectamente a este caso de uso, ya que estamos llamando a un punto final REST directamente desde VBA. Si más adelante quieres ampliar la integración a WhatsApp, MMS o RCS desde la misma integración, merece la pena explorar la Messages API.

Para este tutorial, utilizaremos la SMS API.

Configuración de tu hoja de cálculo de Excel

Como se ha señalado anteriormente, Microsoft Excel puede utilizar VBA para interactuar con los datos mediante programación. Empecemos creando una hoja de cálculo con un par de filas de datos, que contengan los números a los que queremos enviar mensajes de texto y los mensajes que queremos enviar.

Estructura tu hoja de Excel de la siguiente manera:

  • A1 y A2 — los números de teléfono móvil a los que enviar los mensajes (en formato E.164, p. ej., 14255551234)

  • B1 y B2 — los mensajes de texto que quieres enviar

  • I1 — tu clave API de Vonage

  • I2 — tu clave secreta de la API de Vonage

  • I3 — tu número virtual de Vonage (el número que has adquirido en el panel de control, p. ej., 18335550100)

  • I4 — será el botón «Enviar SMS» (del que hablaremos en breve)

Ponle un nombre a tu hoja de cálculo, por ejemplo Numbers.

Consejo: Considera la posibilidad de proteger las celdas I1–I3 con una contraseña de hoja para que las credenciales no se modifiquen accidentalmente ni sean visibles para otras personas que abran el archivo.

Ahora deberías tener una pantalla parecida a la siguiente.

Excel with sample dataExcelStart.png

Activación y configuración del modo de desarrollador en Microsoft Excel

Necesitamos añadir una opción para ver el Desarrollador para utilizar VBA. Puede activar esta opción yendo a Archivo -> Opciones -> Personalizar cinta y marcando la opción Desarrollador como se muestra a continuación.

Excel Dev ModeExcelDevMode.png
La opción de menú «Desarrollador» debería aparecer ahora en la barra de menús. Selecciónala y, a continuación, elige Visual Basic para abrir el editor de código.

Visual Basic OptionVisualBasic.png

Aparecerá una nueva ventana con Microsoft Visual Basic for Applications en ejecución. Selecciona Insertar en las opciones del menú y elige Módulo para introducir el código de Visual Basic que interactúa con la hoja de Excel.

Excel New ModuleNewModule.png

Incorporación de la referencia de Microsoft XML 6.0

Tenemos que añadir una referencia al biblioteca Microsoft XML 6.0 , que nos permite llamar a un punto final REST desde VBA. En el editor de Visual Basic, ve a Herramientas → Referencias, desplázate hacia abajo hasta encontrar Microsoft XML, v6.0, marca la casilla y haz clic en Aceptar.

Add Reference DialogAddReference.png

El código VBA

Copia y pega el siguiente bloque de código en tu aplicación y fíjate en los comentarios que he dejado que describen lo que hace cada sección.

Sub SendSMS()

    ' Authentication - read credentials from the spreadsheet
    Dim ApiKey As String
    Dim ApiSecret As String
    Dim FromNumber As String
    
    ApiKey = ActiveSheet.Range("I1").Value
    ApiSecret = ActiveSheet.Range("I2").Value
    FromNumber = ActiveSheet.Range("I3").Value  ' Your Vonage virtual number

    ' Define our Worksheet so we can loop through the data
    Dim wb As Workbook
    Dim ws As Worksheet

    Set wb = ThisWorkbook
    Set ws = wb.Worksheets("Numbers")

    ' Dynamically determine the last row with data in column A
    Dim lastRow As Long
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row

    ' Loop through all rows with data
    Dim i As Long
    For i = 1 To lastRow
        Dim toNumber As String
        Dim bodyText As String
        
        toNumber = ws.Range("A" & i).Value  ' The number to text
        bodyText = ws.Range("B" & i).Value  ' The message to send

        ' Use Microsoft's XML Library to make a web request
        Dim Request As Object
        Set Request = CreateObject("MSXML2.ServerXMLHTTP.6.0")

        ' Vonage SMS API endpoint
        Dim Url As String
        Url = "https://rest.nexmo.com/sms/json"

        ' Open POST request
        Request.Open "POST", Url, False

        ' Set the request header for form-encoded data
        Request.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"

        ' Build the POST body with required fields
        ' Credentials are sent in the POST body, NOT in the URL
        Dim PostBody As String
        PostBody = "from=" & FromNumber & _
                   "&to=" & toNumber & _
                   "&text=" & bodyText & _
                   "&api_key=" & ApiKey & _
                   "&api_secret=" & ApiSecret

        ' Send the request
        Request.send PostBody

        ' OPTIONAL: Show the API response for each message sent
        ' MsgBox Request.responseText

    Next i

    MsgBox "Done! " & lastRow & " message(s) sent."

End Sub

Hay algunos aspectos que merece la pena destacar en esta versión actualizada:

  • Las credenciales se envían en el cuerpo de la solicitud POST, no se añaden a la URL. Este es el método correcto y más seguro, ya que las URL pueden acabar en los registros del servidor, el historial del navegador y las cachés de los proxies.

  • El de número ahora se lee de la celda I3 en lugar de estar fijado de forma estática. Introduce aquí tu propio número virtual de Vonage.

  • Ahora el bucle es dinámico — utiliza xlUp para encontrar la última fila con datos en la columna A, por lo que no estás limitado a dos filas. Añade tantos números y mensajes como necesites.

Añadir el botón «Enviar»

Por último, tenemos que añadir un botón para activar esta macro. Selecciona «Insertar» en el menú «Desarrollador», haz clic en «Botón» y colócalo en la celda I4.

En cuanto sueltes el ratón, se te pedirá que asignar una macro a ese botón. Selecciona la opción macro «SendSMS» que acabamos de pegar y pulsa Aceptar. Asigna al botón un nombre como «Enviar SMS».

Select VBA ButtonExcelButton.png

Probándolo

Asegúrate de tener:

  • Un número de teléfono válido en formato E.164 en A1 (y en A2 si se prueban dos filas), por ejemplo: 14255551234

  • Un mensaje en B1 (y B2)

  • Tu clave API en I1, tu secreto API en I2 y tu número virtual de Vonage en I3

A continuación, pulsa el botón «Enviar SMS» . Si todo está configurado correctamente, aparecerá un cuadro de diálogo de confirmación y, poco después, debería llegar un mensaje de texto al teléfono de destino.

Si quieres examinar la respuesta sin procesar de la API, descomenta el línea MsgBox Request.responseText . Una respuesta correcta tiene este aspecto:


{
  "mensajes": [
    {
 "para": "14259999999",
      "message-id": "3c153507-8ade-4bd1-ab6f-12cb6f7f9efe",
 "status": "0",
      "saldo-restante": "39,08381985",
 "precio-del-mensaje": "0,00869000",
 "red": "310260"
    }
  ],
  "message-count": "1"
}

Ten en cuenta que status: «0» significa que el mensaje se ha puesto en cola correctamente para su entrega.

Recapitulación

En esta entrada del blog, hemos utilizado VBA en Microsoft Excel para enviar mensajes SMS a través de la SMS API de Vonage. Con solo una hoja de cálculo y unas pocas líneas de código, puedes enviar mensajes personalizados a una lista de contactos con solo hacer clic en un botón, sin necesidad de un servidor específico.

A partir de aquí, podrías ampliarlo aún más de las siguientes maneras:

  • Añadir una columna de fecha y hora que registre cuándo se envió cada mensaje

  • Incorporación de el manejo de errores para detectar los envíos fallidos y resaltar esas filas en rojo

  • Descubre la Messages API de Vonage si quieres ampliar tu servicio a WhatsApp o RCS desde la misma configuración

¿Tiene alguna pregunta o quiere compartir lo que está construyendo?

Mantente conectado y entérate de las últimas noticias, consejos y eventos para desarrolladores.

Compartir:

https://a.storyblok.com/f/270183/400x400/7cdff37c0e/michael-crump.png
Michael CrumpDirector de Experiencias de los Desarrolladores

Michael Crump trabaja en Vonage en el equipo de experiencias para desarrolladores y es programador, YouTuber y conferenciante habitual sobre diversos temas de desarrollo de .NET, la nube y las comunicaciones. Le apasiona ayudar a los desarrolladores a comprender las ventajas de cada uno de ellos de una forma sencilla.