Saltar a contenido

Enviar Mensajes Masivos de WhatsApp Usando la API de WhatsApp Business y Google Sheets

Este artículo explica cómo usar la API de WhatsApp Business y Google Apps Script para enviar mensajes masivos a contactos programados en una hoja de cálculo de Google Sheets.

¿Qué Aprenderás?

  • Configurar la API de WhatsApp Business.
  • Crear un archivo de Google Sheets para gestionar contactos, mensajes y fechas.
  • Usar Google Apps Script para automatizar el envío de mensajes programados.

Requisitos Previos

  1. Cuenta de WhatsApp Business API: Debes tener acceso al número de teléfono y token proporcionados por WhatsApp Business API.
  2. Google Sheets: Crea una hoja de cálculo que incluya los contactos, mensajes y fechas programadas.
  3. Conocimientos básicos de JavaScript y Google Apps Script.

Paso 1: Crear la Hoja de Cálculo

Crea un archivo en Google Sheets con las siguientes columnas:

Nombre Número de Teléfono Mensaje Fecha y Hora Estado
Emanuel +1234567890 ¡Hola, Matias! Te enviamos un saludo. 2024-12-20 10:00:00 Pendiente
Emanuel +1987654321 ¡Hola, Emanuel! Tu pedido está listo. 2024-12-20 11:00:00 Pendiente
  • Número de Teléfono: En formato internacional (+código de país).
  • Mensaje: El mensaje personalizado para cada contacto.
  • Fecha y Hora: Indica cuándo enviar el mensaje.
  • Estado: Automáticamente se actualizará con "Enviado" o un mensaje de error.

Paso 2: Configurar el Script en Google Apps Script

  1. Abre tu archivo de Google Sheets.
  2. Ve a Extensiones > Apps Script.
  3. Copia y pega el siguiente código en el editor de Apps Script:
// ===  ENVIO DE MENSAJES AUTOMATIZADO - MATIAS ORELLANA ===
// === Configuración Global ===
const WHATSAPP_API_URL = "https://graph.facebook.com/v15.0/YOUR_PHONE_NUMBER_ID/messages"; // Número de teléfono
const WHATSAPP_TOKEN = "YOUR_ACCESS_TOKEN"; // Token de WhatsApp Business
const ID_ARCHIVO = "YOUR_SPREADSHEET_ID"; // ID del archivo de Google Sheets
const NOMBRE_HOJA = "Contactos"; // Nombre de la hoja en el archivo

/**
 * Validar configuración inicial
 */
function validarConfiguracion() {
  if (!WHATSAPP_API_URL || WHATSAPP_API_URL.includes("YOUR_PHONE_NUMBER_ID")) {
    throw new Error("No se ha configurado correctamente el número de teléfono en WHATSAPP_API_URL.");
  }
  if (!WHATSAPP_TOKEN || WHATSAPP_TOKEN === "YOUR_ACCESS_TOKEN") {
    throw new Error("No se ha configurado correctamente el token en WHATSAPP_TOKEN.");
  }
  if (!ID_ARCHIVO || ID_ARCHIVO === "YOUR_SPREADSHEET_ID") {
    throw new Error("No se ha configurado correctamente el ID del archivo en ID_ARCHIVO.");
  }

  const archivo = SpreadsheetApp.openById(ID_ARCHIVO);
  const hoja = archivo.getSheetByName(NOMBRE_HOJA);
  if (!hoja) {
    throw new Error(`La hoja con el nombre '${NOMBRE_HOJA}' no existe en el archivo que especificaste.`);
  }
  return hoja;
}

// === Funciones Principales ===

/**
 * Función principal: Enviar mensajes programados
 */
function enviarMensajesProgramados() {
  try {
    // Validar configuraciones y obtener la hoja
    const hoja = validarConfiguracion();
    const datos = hoja.getDataRange().getValues();

    // Iterar sobre los contactos
    for (let i = 1; i < datos.length; i++) { // Saltar la primera fila (encabezados)
      const [nombre, numero, mensaje, fechaHora] = datos[i];
      const ahora = new Date();

      // Verificar si la fecha y hora ya pasó
      if (new Date(fechaHora) <= ahora) {
        const estado = enviarMensajeWhatsApp(numero, mensaje);

        // Registrar el estado en la hoja
        hoja.getRange(i + 1, 5).setValue(estado); // Columna "E" para el estado
      }
    }
  } catch (e) {
    Logger.log(`Error: ${e.message}`);
  }
}

/**
 * Función para enviar mensajes
 */
function enviarMensajeWhatsApp(numero, mensaje) {
  const options = {
    method: "post",
    contentType: "application/json",
    headers: {
      Authorization: `Bearer ${WHATSAPP_TOKEN}`
    },
    payload: JSON.stringify({
      messaging_product: "whatsapp",
      to: numero,
      type: "text",
      text: { body: mensaje }
    })
  };

  try {
    const response = UrlFetchApp.fetch(WHATSAPP_API_URL, options);
    if (response.getResponseCode() === 200) {
      return "Enviado";
    } else {
      return `Error: ${response.getContentText()}`;
    }
  } catch (e) {
    return `Error: ${e.message}`;
  }
}

/**
 * Configurar un trigger para ejecutar automáticamente
 */
function configurarTrigger() {
  ScriptApp.newTrigger("enviarMensajesProgramados")
    .timeBased()
    .everyMinutes(5) // Ejecutar cada 5 minutos
    .create();
}

Paso 3: Configurar el Script

Personaliza las constantes:

YOUR_PHONE_NUMBER_ID: Reemplaza con el número de teléfono de WhatsApp Business. YOUR_ACCESS_TOKEN: Ingresa tu token de acceso.
YOUR_SPREADSHEET_ID: Reemplaza con el ID del archivo de Google Sheets.
Contactos: Cambia si tu hoja tiene otro nombre.

Guarda el proyecto con un nombre descriptivo, como MensajesWhatsApp.

Paso 4: Crear un Trigger

Ve a Extensiones > Apps Script > Triggers. Crea un nuevo trigger para la función enviarMensajesProgramados y configúralo para que se ejecute cada 5 minutos.

Advertencias

Asegúrate de tener permisos en la API de WhatsApp Business para enviar mensajes. Los mensajes enviados deben cumplir con las políticas de WhatsApp para evitar bloqueos.