Enviar Mensagens do WhatsApp a Partir do Google Sheets Usando PHP

11 de dezembro de 2024

Neste tutorial, você aprenderá a enviar mensagens para números de telefone armazenados em um arquivo CSV do Google Sheets usando PHP e a Wassenger API. Vamos baixar o arquivo CSV do Google Sheets, ler os números de telefone e as mensagens e então enviá-los usando a Wassenger API.

Pré-requisitos

Instale os pacotes necessários

Primeiro, crie um novo diretório para o seu projeto e navegue até ele no terminal. Em seguida, execute o seguinte comando para instalar a biblioteca necessária:

pecl install pecl_http

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 E164 com o prefixo do país.
  • Segunda coluna: mensagem de texto a ser enviada para o número de destino.

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

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

(+1234567890,
  '👋 Welcome to {{your-business-name}}! Thanks for signing up.We are just a message away!' +
    1234567890,
  "💐 Your order has been shipped.Tracking number is {{tracking-number}}.Don't hesitate to reach out to if you need help! 🤗");

Obter a URL de download do documento do Google Sheets

  1. Clique em “Arquivo” no canto superior esquerdo.
  2. Vá em “Compartilhar” > “Publicar na web”.
  3. Na aba “Link”, selecione “Comma-separated values (.csv)” no menu suspenso.
  4. Selecione a aba desejada com os dados relevantes: por padrão, a primeira.
  5. Clique em “Publicar” e copie a URL.

Enviar mensagens de texto

Crie um novo arquivo chamado send_messages.php no diretório do projeto e adicione o seguinte código:

<?php
require_once 'vendor/autoload.php';
use http\Client;
use http\Client\Request;
use http\Client\Response;
use League\Csv\Reader;
// Replace this with the URL of your published Google Sheets CSV file
$google_sheets_csv_url = 'ENTER_GOOGLE_SHEETS_CSV_URL_HERE';
// Replace this with your Wassenger API token
$token = 'API_KEY_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';
$client = new Client();
// Read the Google Sheets CSV file and parse it as a CSV
$csv = Reader::createFromString(file_get_contents($google_sheets_csv_url));
$csv->setHeaderOffset(0);
// Iterate through the CSV rows
foreach ($csv->getRecords() as $record) {
  $phone = $record['phone'];
  $message = $record['message'];
  // Prepare the API request
  $request = new Request('POST', 'Wassenger_API_URL');
  $request->setHeaders([
    'Authorization' => 'Bearer ' . $token,
    'Content-Type' => 'application/json',
  ]);
  $request->setBody(
    json_encode([
      'phone' => $phone,
      'body' => $message,
      'device' => $device,
    ])
  );
  // Send the API request and get the response
  $client->enqueue($request)->send();
  $response = $client->getResponse();
  // Check if the message was sent successfully
  if ($response->getResponseCode() == 200) {
    $responseBody = json_decode($response->getBody(), true);
    echo "Message sent to {$phone}.Message ID: {$responseBody['message_id']}\n";
  } else {
    echo "Failed to send message to {$phone}.Error: {$response->getBody()}\n";
  }
}

Execute e rode código na nuvem sem instalar qualquer 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 send_media.php para enviar múltiplas mensagens de imagem para diferentes números de telefone carregados a partir de um documento do Google Sheets.

Para enviar uma mensagem com mídia, a maneira mais fácil é fornecer uma URL de download do arquivo. Se o seu arquivo ainda não estiver hospedado em algum lugar, você pode fazer upload do arquivo para o Google Drive e tornar o arquivo publicamente disponível para que a API possa baixá-lo e enviá-lo 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.php no diretório do projeto e adicione o seguinte código:

<?php
require_once 'vendor/autoload.php';
use http\Client;
use http\Client\Request;
use http\Client\Response;
use League\Csv\Reader;
// Replace this with the URL of your published Google Sheets CSV file
$google_sheets_csv_url = 'ENTER_GOOGLE_SHEETS_CSV_URL_HERE';
// Set the download URL of the file to be sent
$file_url = 'https://picsum.photos/seed/picsum/600/500';
// Replace this with your API token
$token = 'API_KEY_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';
$base_url = 'https://api.wassenger.com/v1';
$url = $base_url . '/messages';
$files_url = $base_url . '/files';
function upload_file($url, $files_url, $token)
{
  $client = new Client();
  $request = new Request('POST', $files_url);
  $request->setHeaders([
    'Content-Type' => 'application/json',
    'Authorization' => $token,
  ]);
  $request->setBody(json_encode(['url' => $url]));
  $client->enqueue($request)->send();
  $response = $client->getResponse();
  if ($response->getResponseCode() == 200) {
    $responseBody = json_decode($response->getBody(), true);
    return $responseBody['id'];
  } else {
    echo 'Failed to upload file: ' . $response->getBody() . "\n";
    return null;
  }
}
function normalize_phone($phone)
{
  return '+' . preg_replace('/\D/', '', $phone);
}
function send_message($phone, $message, $file, $url, $device, $token)
{
  $client = new Client();
  $request = new Request('POST', $url);
  $request->setHeaders([
    'Content-Type' => 'application/json',
    'Authorization' => $token,
  ]);
  $request->setBody(
    json_encode([
      'phone' => $phone,
      'message' => trim($message),
      'device' => $device,
      'media' => ['file' => $file],
    ])
  );
  $client->enqueue($request)->send();
  $response = $client->getResponse();
  if ($response->getResponseCode() == 200) {
    echo 'Message created: ' . $phone . "\n";
  } else {
    echo "Failed to create message to {$phone}: " . $response->getBody() . "\n";
  }
}
function main(
  $google_sheets_csv_url,
  $file_url,
  $url,
  $files_url,
  $token,
  $device
) {
  // Download Google Sheets CSV file
  $csv_data = file_get_contents($google_sheets_csv_url);
  // Parse the CSV data
  $csv = Reader::createFromString($csv_data);
  $csv->setHeaderOffset(0);
  // Upload file
  $file_id = upload_file($file_url, $files_url, $token);
  if (!$file_id) {
    echo "Failed to upload file: check the error\n";
    return;
  }
  // Process messages
  foreach ($csv->getRecords() as $record) {
    $phone = $record['phone'];
    $message = $record['message'];
    if (!$phone || !$message) {
      continue;
    }
    $number = normalize_phone($phone);
    if ($number && strlen($number) >= 8 && $message) {
      send_message($number, $message, $file_id, $url, $device, $token);
    }
  }
}
main($google_sheets_csv_url, $file_url, $url, $files_url, $token, $device);

Execute e rode código na nuvem sem instalar qualquer 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.php e send_media.php, certifique-se de ter substituído a URL do Google Sheets CSV e o token de API real 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 a ser inserida aqui.

Substitua o token da API

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

# Replace this with your Wassenger API token
$token = 'ENTER API KEY HERE';

Opcionalmente, se você tiver múltiplos números de WhatsApp conectados à sua conta Wassenger, você pode especificar qual número deseja usar para a entrega das mensagens, especificando 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 GOES HERE';

Executar o programa

Antes de executar o programa, se você pretende enviar centenas de mensagens em sequência, recomendamos definir uma velocidade de entrega de mensagens por minuto mais baixa, não mais do que 2–3 mensagens por minuto, para evitar problemas de banimento 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 na nuvem gratuitamente em Replit.com sem instalar nenhum software no seu computador.

Basta criar um novo projeto e copiar & colar o código fornecido, depois clicar 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 rodar o script send_messages.php ou send_media.php:

php send_messages.php

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

php send_media.php

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

=> Message created: +1234567890
=> Message created: +1234567890
=> Message created: +1234567890

Observe que as mensagens serão adicionadas à fila de entrega de mensagens do seu número e entregues de forma assíncrona em segundo plano ao longo do tempo, com base no limite de velocidade de entrega de mensagens por minuto da assinatura do seu número ou na 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.

FAQ

Como posso obter a URL de download do CSV do Google Sheets para usar com o script PHP?

Etapas detalhadas sobre como publicar um documento do Google Sheets como CSV são abordadas, incluindo como compartilhar o arquivo publicamente.

Quais pré-requisitos são necessários para enviar mensagens do WhatsApp do Google Sheets usando PHP?

Cobre a instalação do PHP, as bibliotecas necessárias como pecl_http, e a obtenção do token da API da Wassenger.

Como posso garantir que as mensagens sejam entregues sem acionar políticas anti-spam do WhatsApp?

Destaca boas práticas para a velocidade de entrega de mensagens e conformidade com políticas anti-spam.

Ready to transform your WhatsApp communication?

Start automating your customer interactions today with Wassenger

Get Started Free