Invia messaggi WhatsApp da Google Sheets usando PHP

11 dicembre 2024

In questo tutorial imparerai come inviare messaggi ai numeri di telefono memorizzati in un file CSV di Google Sheets usando PHP e Wassenger API. Scaricheremo il file CSV da Google Sheets, leggeremo i numeri di telefono e i messaggi, e poi li invieremo usando la Wassenger API.

Prerequisiti

  • Conoscenze di base di PHP
  • PHP installato sul tuo computer
  • Un editor di testo per scrivere il codice (es.: Visual Studio Code, Atom, Vim)
  • Un token API di Wassenger (API token) (puoi ottenerlo iscrivendoti qui)
  • Estensione pecl_http installata per le operazioni HTTP

Installa i pacchetti richiesti

Per prima cosa, crea una nuova directory per il tuo progetto e posizionati lì nel terminale. Poi esegui i seguenti comandi per installare le librerie necessarie:

pecl install pecl_http

Prepara il file CSV di Google Sheets

Crea un nuovo documento Google Sheets e compilalo con due colonne:

  • Prima colonna: numero di telefono in E164 format con il prefisso nazionale.
  • Seconda colonna: messaggio di testo da inviare al numero di destinazione.

Il documento Google Sheets dovrebbe avere almeno due colonne e apparire così:

Il documento Sheets equivalente esportato come CSV dovrebbe apparire così:

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

Ottieni l'URL di download del documento Google Sheets

  1. Clicca su “File” nell'angolo in alto a sinistra.
  2. Vai su “Condividi” > “Pubblica sul web”.
  3. Nella scheda “Link”, seleziona “Valori separati da virgola (.csv)” dal menu a discesa.
  4. Seleziona la pagina del foglio desiderata con i dati rilevanti: di default la prima.
  5. Clicca su “Pubblica” e copia l'URL.

Invia messaggi di testo

Crea un nuovo file chiamato send_messages.php nella directory del tuo progetto e aggiungi il seguente codice:

<?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";
  }
}

Esegui il codice nel cloud senza installare alcun software sul tuo computer. Crea un account gratuito su Replit e inizia in pochi minuti

Invia messaggi multimediali

In questo esempio creeremo un programma diverso send_media.php per inviare più messaggi multimediali (immagini) a diversi numeri di telefono caricati da un documento Google Sheets.

Per inviare un messaggio multimediale, il modo più semplice è fornire un URL di download del file. Se il tuo file non è già caricato da qualche parte, puoi caricarlo su Google Drive e rendere il file pubblicamente disponibile per essere scaricato dall'API e inviato successivamente.

Esempio di URL di download da un file pubblico su Google Drive:

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

Importante: l'URL di download fornito deve restituire il contenuto binario del file, altrimenti fallirà.

Crea un nuovo file chiamato send_media.php nella directory del tuo progetto e aggiungi il seguente codice:

<?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);

Esegui il codice nel cloud senza installare alcun software sul tuo computer. Crea un account gratuito su Replit e inizia in pochi minuti

Sostituisci l'URL di Google Sheets esportato come CSV

Nei file send_messages.php e send_media.php, assicurati di aver sostituito l'URL CSV di Google Sheets e il tuo effettivo token API di Wassenger:

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

Vedi le indicazioni sopra per ottenere l'URL di download di Google Sheets da inserire qui.

Sostituisci il token API

Nel file send_messages.php, assicurati di aver definito il token API del tuo account Wassenger:

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

Opzionalmente, se hai più numeri WhatsApp collegati al tuo account Wassenger, puoi specificare quale numero WhatsApp vuoi usare per la consegna dei messaggi indicando l'ID dispositivo univoco di Wassenger (valore esadecimale di 24 caratteri) nella seguente riga:

# 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';

Esegui il programma

Prima di eseguire il programma, se prevedi di inviare centinaia di messaggi in sequenza, consigliamo di impostare una velocità di consegna dei messaggi più bassa, non più di 2–3 messaggi al minuto, per prevenire problemi di ban dovuti alle politiche anti-spam di WhatsApp. Scopri di più sulle best practice e come ridurre il rischio qui.

Esegui il programma nel cloud

Puoi eseguire il programma nel cloud gratuitamente su Replit.com senza installare alcun software sul tuo computer.

Crea semplicemente un nuovo progetto e copia & incolla il codice fornito, poi clicca su “Run” per inviare i messaggi. È così semplice 😀

Esegui il programma sul tuo computer

Apri un terminale nella directory del tuo progetto ed esegui il seguente comando per eseguire lo script send_messages.php o send_media.php:

php send_messages.php

Allo stesso modo, puoi eseguire lo script send_media.php per inviare messaggi multimediali:

php send_media.php

Se tutto è stato configurato correttamente, dovresti vedere un output che indica che i messaggi sono stati creati con successo:

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

Nota che i messaggi saranno aggiunti alla coda di consegna del tuo numero e verranno inviati in background in modo asincrono nel tempo, in base al limite di velocità di consegna per minuto della sottoscrizione del tuo numero o alla velocità di consegna configurata manualmente nelle impostazioni del tuo numero.

I messaggi possono impiegare diversi minuti o ore, a seconda di quanti ne hai creati, per essere effettivamente consegnati ai numeri di telefono target tramite WhatsApp. Puoi monitorare l'avanzamento della consegna dei messaggi nel pannello web o automaticamente usando gli eventi webhook.

FAQ

Come posso ottenere l'URL di download CSV di Google Sheets da usare con lo script PHP?

I passaggi dettagliati per pubblicare un documento Google Sheets come CSV sono illustrati, inclusa la procedura per condividere il file pubblicamente.

Quali prerequisiti sono necessari per inviare messaggi WhatsApp da Google Sheets usando PHP?

Copre l'installazione di PHP, le librerie richieste come pecl_http, e l'ottenimento del token API di Wassenger.

Come posso assicurarmi che i messaggi vengano consegnati senza attivare le politiche anti-spam di WhatsApp?

Sottolinea le best practice per la velocità di invio dei messaggi e la conformità alle politiche anti-spam.

Ready to transform your WhatsApp communication?

Start automating your customer interactions today with Wassenger

Get Started Free