Enviar Mensagens do WhatsApp a Partir do Google Sheets Usando Python

4 de julho de 2024

Quer tornar a comunicação do seu negócio no WhatsApp mais eficaz? Este tutorial mostrará como enviar mensagens para números de telefone armazenados em um arquivo CSV do Google Sheets usando Python, a biblioteca requests e a Wassenger API. Você aprenderá a baixar o arquivo CSV do Google Sheets, ler os números de telefone e mensagens, e enviá-los automaticamente com o Wassenger.

🫣 Não quer usar programação? Sem problema! Explore nosso novo recurso de Campanhas sem código para WhatsApp. Importe seus contatos, defina uma mensagem, escolha a data de entrega e relaxe! 🥳 🥳

Este artigo é apenas um pequeno aperitivo de todos os recursos da API. Explore dezenas de casos de uso e exemplos de código prontos para usar aqui.

Pré-requisitos

🤩 🤖 Wassenger é uma plataforma completa de comunicação e solução de API para WhatsApp. Explore mais de 100+ casos de uso da API e automatize tudo no WhatsApp se inscrevendo para um teste gratuito e comece em minutos**!**

Instale os pacotes necessários

Primeiro, crie um novo diretório para seu projeto e navegue até ele no terminal. Em seguida, execute os seguintes comandos para instalar as bibliotecas necessárias:

pip install requests pandas

Prepare o arquivo CSV do Google Sheets

Crie um novo documento no Google Sheets e preencha-o com duas colunas:

  • Primeira coluna: número de telefone no formato E.164 com o prefixo do país.
  • Segunda coluna: mensagem de texto a ser enviada para o número alvo.

O documento do Google Sheets deve ter pelo menos duas colunas e ficar parecido com:

O documento equivalente do Sheets exportado como CSV deve ficar assim:

(+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! 🤗");

Obtenha a URL de download do seu documento do Google Sheets

  1. Clique em “File” no canto superior esquerdo.
  2. Vá para “Share” > “Publish to the web”.
  3. Na aba “Link”, selecione “Comma-separated values (.csv)” no menu suspenso.
  4. Selecione a página da planilha desejada com os dados relevantes: por padrão a primeira.
  5. Clique em “Publish” e copie a URL.

🤩 🤖 Wassenger é uma solução completa de API para WhatsApp. Inscreva-se para um teste gratuito de 7 dias e comece em minutos!

Enviar mensagens de texto

Crie um novo arquivo chamado send_messages.py no diretório do seu projeto e adicione o seguinte 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")

Execute e rode código na nuvem sem instalar nenhum software no seu computador. Crie uma conta gratuita no Replit e comece em minutos.

Enviar mensagens com mídia

Neste exemplo, criaremos um programa diferente chamado send_media.py para enviar várias mensagens de imagem para diferentes números carregados a partir de um documento do Google Sheets.

Para enviar uma mensagem com mídia, a maneira mais simples é fornecer uma URL de download do arquivo. Se seu arquivo ainda não estiver hospedado em algum lugar, você pode fazer o upload para o Google Drive e tornar o arquivo publicamente disponível para que a API faça o download e o envie depois.

Exemplo de URL de download de um arquivo público no Google Drive:

https://drive.google.com/uc?id=1RG3CAPiwiFlFATUlIIwhk0RrbEU4PgVP&export=download

Importante: a URL de download fornecida deve retornar o conteúdo binário do arquivo, caso contrário falhará.

Crie um novo arquivo chamado send_media.py no diretório do seu projeto e adicione o seguinte 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()

Execute e rode código na nuvem sem instalar nenhum software no seu computador. Crie uma conta gratuita no Replit e comece em minutos.

Substitua a URL do Google Sheets para exportar como CSV

Nos arquivos send_messages.py e send_media.py, certifique-se de ter substituído a URL do CSV do Google Sheets e o token da sua conta Wassenger:

# Replace this with the URL of your published Google Sheets CSV file
google_sheets_csv_url = 'ENTER_GOOGLE_SHEETS_CSV_URL_HERE'

Veja as indicações acima para obter a URL de download do Google Sheets para inserir aqui.

🤩 🤖 Wassenger é uma plataforma completa de comunicação e solução de API para WhatsApp. Explore mais de 100+ casos de uso da API e automatize tudo no WhatsApp se inscrevendo para um teste gratuito e comece em minutos**!**

Substitua o token da API

No arquivo send_messages.py, certifique-se de ter definido o token da API da sua conta Wassenger:

# Replace this with your Wassenger API token
token = 'API_TOKEN_GOES_HERE'

Opcionalmente, se você tiver vários números do WhatsApp conectados à sua conta Wassenger, pode especificar qual número do WhatsApp deseja usar para envio definindo o ID único do dispositivo Wassenger (valor hexadecimal de 24 caracteres) na linha a seguir:

# Optionally specify the target WhatsApp device ID connected to Wassenger
# you want to use for messages delivery(24 characters hexadecimal value)
device = 'DEVICE_ID'

Execute o programa

Antes de executar o programa, se você planeja enviar centenas de mensagens em sequência, recomendamos definir uma velocidade de entrega menor, não mais do que 2–3 mensagens por minuto, para evitar problemas de bloqueio devido às políticas anti-spam do WhatsApp. Saiba mais sobre boas práticas e como reduzir riscos aqui.

Execute o programa na nuvem

Você pode executar o programa gratuitamente na nuvem no Replit.com sem instalar nenhum software no seu computador.

Basta criar um novo projeto e copiar & colar o código fornecido, depois clique em “Run” para enviar as mensagens. É simples assim 😀

Execute o programa no seu computador

Abra um terminal no diretório do seu projeto e execute o seguinte comando para executar o script send_messages.py ou send_media.py:

python send_messages.py

Da mesma forma, você pode executar o script send_media.py para enviar mensagens com mídia:

python send_media.py

Se tudo estiver configurado corretamente, você deverá ver uma saída indicando que as mensagens foram criadas com sucesso:

=> Message created: +123456789009
=> Message created: +123456789009
=> Message created: +123456789009

Observação: as mensagens serão adicionadas à fila de entrega de mensagens do seu número e entregues assincronamente em segundo plano ao longo do tempo, de acordo com o limite de velocidade de entrega por minuto da assinatura do seu número ou a velocidade de entrega configurada manualmente nas configurações do seu número.

As mensagens podem levar vários minutos ou horas, dependendo da quantidade criada, para serem efetivamente entregues aos números de telefone alvo via WhatsApp. Você pode monitorar o progresso da entrega das mensagens no painel web ou automaticamente usando eventos de webhook.

Conclusão

Neste tutorial, você aprendeu como enviar mensagens para números de telefone armazenados em um arquivo CSV do Google Sheets usando Python e a Wassenger API.

Você pode atualizar o documento do Google Sheets e executar o programa novamente sempre que quiser enviar novas mensagens através do seu número do WhatsApp conectado ao Wassenger.

Você pode personalizar ainda mais o script para lidar com colunas adicionais, criar diferentes tipos de mensagens ou integrá-lo ao seu software conforme necessário.

🤩 🤖 Wassenger é uma plataforma completa de comunicação e solução de API para WhatsApp. Explore mais de 100+ casos de uso da API e automatize tudo no WhatsApp se inscrevendo para um teste gratuito e comece em minutos**!**

Ready to transform your WhatsApp communication?

Start automating your customer interactions today with Wassenger

Get Started Free