¿Quieres hacer que la comunicación de tu negocio en WhatsApp sea más efectiva? Este tutorial te mostrará cómo enviar mensajes a números de teléfono guardados en un archivo CSV de Google Sheets usando Python, la librería requests y la Wassenger API. Aprenderás a descargar el archivo CSV desde Google Sheets, leer los números de teléfono y los mensajes, y enviarlos automáticamente con Wassenger.
🫣 ¿No quieres usar programación? ¡No hay problema! Explora nuestra nueva función de Campañas de WhatsApp sin código. ¡Importa tus contactos, define un mensaje, programa una fecha de entrega y relájate! 🥳 🥳
Este artículo es solo una pequeña muestra de todas las funciones de la API. Explora docenas de casos de uso y ejemplos de código listos para usar aquí.
Requisitos previos
- Conocimientos básicos de Python
- Python 3 instalado en tu equipo
- Un editor de texto para escribir código (por ejemplo: Visual Studio Code, Atom, Vim)
- Un token de API de Wassenger (API token) (puedes obtenerlo registrándote aquí)
🤩 🤖 Wassenger es una plataforma de comunicación completa y una solución de API para WhatsApp. Explora más de 100 casos de uso de la API y automatiza cualquier cosa en WhatsApp registrándote para una prueba gratuita y comienza en minutos**!**
Instalar los paquetes requeridos
Primero, crea un nuevo directorio para tu proyecto y navega a él en tu terminal. Luego, ejecuta los siguientes comandos para instalar las librerías necesarias:
pip install requests pandas
Preparar el archivo CSV de Google Sheets
Crea un nuevo documento de Google Sheets y complétalo con dos columnas:
- Primera columna: número de teléfono en formato E.164 con el prefijo del país.
- Segunda columna: mensaje de texto para enviar al número de teléfono objetivo.
El documento de Google Sheets debería tener al menos dos columnas y verse así:
El documento de Sheets equivalente exportado como CSV debería verse así:
(+447362053576,
'👋 Welcome to {{your-business-name}}! Thanks for signing up.We are just a message away!' +
447362053576,
"💐 Your order has been shipped.Tracking number is {{tracking-number}}.Don't hesitate to reach out to if you need help! 🤗");
Obtener la URL de descarga de tu documento de Google Sheets
- Haz clic en “Archivo” en la esquina superior izquierda.
- Ve a “Compartir” > “Publicar en la web”.
- En la pestaña “Enlace”, selecciona “Valores separados por comas (.csv)” en el menú desplegable.
- Selecciona la hoja deseada con los datos relevantes: por defecto la primera.
- Haz clic en “Publicar” y copia la URL.
🤩 🤖 Wassenger es una solución completa de API para WhatsApp. Regístrate para una prueba gratuita de 7 días y comienza en minutos!
Enviar mensajes de texto
Crea un archivo nuevo llamado send_messages.py en el directorio de tu proyecto y añade el siguiente código:
import requests
import pandas as pd
# Replace this with the URL of your published Google Sheets CSV file
# See the indications above to obtain the Google Sheets download URL to enter here
google_sheets_csv_url = 'ENTER_GOOGLE_SHEETS_CSV_URL_HERE'
# Replace this with your Wassenger API token
# Get your API token here: https://app.wassenger.com/apikeys
token = 'API_TOKEN_GOES_HERE'
# Optionally specify the target WhatsApp device ID connected to Wassenger
# you want to use for messages delivery(24 characters hexadecimal value)
device = 'DEVICE_ID'
# Define the headers for the API request
headers = {
'Content-Type': 'application/json',
'Authorization': f"{token}"
}
# Define the URL for the Wassenger API
api_url = 'https://api.wassenger.com/v1/messages'
# Read the Google Sheets CSV file and parse it as a CSV
data = pd.read_csv(google_sheets_csv_url)
# Iterate through the DataFrame rows
for index, row in data.iterrows():
phone_number = row[0]
message = row[1]
# Create the payload for the API request
payload = {
'phone': phone_number,
'body': message,
'device': device
}
# Send the message using the Wassenger API
response = requests.post(api_url, headers=headers, json=payload)
# Check if the API request was successful
if response.status_code == 200:
print(f"Message sent to {phone_number}: {message}")
else:
print(f"Failed to send message to {phone_number}: {response.text}")
print("Finished sending messages")
Ejecuta y prueba el código en la nube sin instalar nada en tu ordenador. Crea una cuenta gratuita en Replit y comienza en minutos.
Enviar mensajes con medios
En este ejemplo, crearemos un programa diferente llamado send_media.py para enviar múltiples mensajes con imágenes a diferentes números de teléfono cargados desde un documento de Google Sheets.
Para enviar un mensaje con medios, la forma más sencilla es proporcionar una URL de descarga del archivo. Si tu archivo aún no está subido, puedes subirlo a Google Drive y hacer que el archivo sea públicamente accesible para que la API lo descargue y lo envíe.
Ejemplo de URL de descarga desde un archivo público en Google Drive:
https://drive.google.com/uc?id=1RG3CAPiwiFlFATUlIIwhk0RrbEU4PgVP&export=download
Importante: la URL de descarga proporcionada debe devolver el contenido binario del archivo; de lo contrario fallará.
Crea un archivo nuevo llamado send_media.py en el directorio de tu proyecto y añade el siguiente código:
import requests
import csv
from io import StringIO
# Replace this with the URL of your published Google Sheets CSV file
# See the indications above to obtain the Google Sheets download URL to enter here
google_sheets_csv_url = 'ENTER_GOOGLE_SHEETS_CSV_URL_HERE'
# Set the download URL of the file to be sent.
# The file must be publicly accessible from the Internet and return the file binary content
# You can also upload a local file in Google Drive and make the file publicly available for download
# Accepted file formats are: images(JPEG, WEBP, PNG), video(MP4), audio(MP3, OGG) and documents(PDF, XLSX, DOCX, ZIP...)
file_url = 'https://picsum.photos/seed/picsum/600/500'
# Replace this with your API token
# Get your API token here: YOUR_CONSOLE_URL/apikeys
token = 'API_TOKEN_GOES_HERE'
# Optionally specify the target device ID connected to the API
# you want to use for messages delivery(24 characters hexadecimal value)
device = 'DEVICE_ID'
# Define headers for the API request
headers = {
'Content-Type': 'application/json',
'Authorization': f'{token}'
}
# Define URLs for the API
base_url = 'https://api.wassenger.com/v1'
url = f'{base_url}/messages'
files_url = f'{base_url}/files'
def upload_file(url):
body = {'url': url}
try:
response = requests.post(files_url, json=body, headers=headers)
response.raise_for_status()
return response.json()['id']
except requests.exceptions.HTTPError as error:
if error.response.status_code == 409 and error.response.json():
return error.response.json()['meta']['file']
print(f'Failed to upload file: {error.response.text}')
return None
def normalize_phone(phone):
return f"+{phone.replace('\\D', '')}"
def send_message(phone, message, file):
body = {
'phone': phone,
'message': message.strip(),
'device': device,
'media': {'file': file}
}
try:
response = requests.post(url, json=body, headers=headers)
response.raise_for_status()
print(f" == > Message created: {phone}")
except requests.exceptions.HTTPError as error:
print(f'Failed to create message to {phone}: {error.response.text}')
def main():
try:
if not file_url:
raise ValueError('Missing required fileUrl')
print('=> Downloading Google Sheets CSV file...')
response = requests.get(google_sheets_csv_url)
response.raise_for_status()
data = response.text
records = csv.reader(StringIO(data))
print('=> Uploading file...')
file_id = upload_file(file_url)
if not file_id:
raise ValueError('Failed to upload file: check the error')
print('=> Processing messages...')
for phone, message in records:
if not phone or not message:
continue
number = normalize_phone(phone)
if number and len(number) >= 8 and message:
send_message(number, message, file_id)
except ValueError as error:
print(f'Error: {error}')
except requests.exceptions.HTTPError as error:
print(f'Error: {error.response.text}')
if __name__ == "__main__":
main()
Ejecuta y prueba el código en la nube sin instalar nada en tu ordenador. Crea una cuenta gratuita en Replit y comienza en minutos.
Reemplaza la URL de Google Sheets para exportar como CSV
En los archivos send_messages.py y send_media.py, asegúrate de haber reemplazado la URL de Google Sheets CSV y tu token real de Wassenger:
# Replace this with the URL of your published Google Sheets CSV file
google_sheets_csv_url = 'ENTER_GOOGLE_SHEETS_CSV_URL_HERE'
Consulta las indicaciones más arriba para obtener la URL de descarga de Google Sheets que debes ingresar aquí.
🤩 🤖 Wassenger es una plataforma de comunicación completa y una solución de API para WhatsApp. Explora más de 100 casos de uso de la API y automatiza cualquier cosa en WhatsApp registrándote para una prueba gratuita y comienza en minutos**!**
Reemplaza el token de la API
En el archivo send_messages.py, asegúrate de haber definido el token de API de tu cuenta real de Wassenger:
# Replace this with your Wassenger API token
token = 'API_TOKEN_GOES_HERE'
Opcionalmente, si tienes múltiples números de WhatsApp conectados en tu cuenta de Wassenger, puedes especificar qué número de WhatsApp quieres usar para la entrega de mensajes indicando el ID único del dispositivo de Wassenger (valor hexadecimal de 24 caracteres) en la siguiente línea:
# Optionally specify the target WhatsApp device ID connected to Wassenger
# you want to use for messages delivery(24 characters hexadecimal value)
device = 'DEVICE_ID'
Ejecutar el programa
Antes de ejecutar el programa, si planeas enviar cientos de mensajes seguidos, recomendamos definir una velocidad de entrega de mensajes más baja, no más de 2–3 mensajes por minuto para evitar problemas de bloqueo debido a las políticas anti-spam de WhatsApp. Aprende más sobre buenas prácticas y cómo reducir riesgos aquí.
Ejecutar el programa en la nube
Puedes ejecutar el programa en la nube de forma gratuita en Replit.com sin instalar ningún software en tu computadora.
Simplemente crea un nuevo proyecto y copia y pega el código proporcionado, luego haz clic en “Run” para enviar los mensajes. Es así de simple 😀
Ejecutar el programa en tu equipo
Abre una terminal en el directorio de tu proyecto y ejecuta el siguiente comando para ejecutar el script send_messages.py o send_media.py:
python send_messages.py
De manera similar, puedes ejecutar el script send_media.py para enviar mensajes con medios:
python send_media.py
Si todo está configurado correctamente, deberías ver una salida indicando que los mensajes se han creado con éxito:
=> Message created: +123456789009
=> Message created: +123456789009
=> Message created: +123456789009
Ten en cuenta que los mensajes se añadirán a la cola de entrega de mensajes de tu número y se entregarán de forma asíncrona en segundo plano con el tiempo, según el límite de velocidad de entrega de mensajes por minuto de la suscripción de tu número o la velocidad de entrega configurada manualmente en la configuración de tu número.
Los mensajes pueden tardar varios minutos u horas, dependiendo de la cantidad creada, en ser efectivamente entregados a los números de teléfono objetivo vía WhatsApp. Puedes supervisar el progreso de la entrega de los mensajes en el panel web o automáticamente usando eventos webhook.
Conclusión
En este tutorial has aprendido cómo enviar mensajes a números de teléfono almacenados en un archivo CSV de Google Sheets usando Python y la Wassenger API.
Puedes actualizar el documento de Google Sheets y ejecutar el programa nuevamente en cualquier momento que quieras enviar nuevos mensajes a través de tu número de WhatsApp conectado a Wassenger.
Además, puedes personalizar el script para manejar columnas adicionales, crear distintos tipos de mensajes o integrarlo con tu software según lo necesites.
🤩 🤖 Wassenger es una plataforma de comunicación completa y una solución de API para WhatsApp. Explora más de 100 casos de uso de la API y automatiza cualquier cosa en WhatsApp registrándote para una prueba gratuita y comienza en minutos**!**






