Envoyer des messages WhatsApp depuis Google Sheets avec PHP

11 décembre 2024

Dans ce tutoriel, vous apprendrez comment envoyer des messages vers des numéros de téléphone stockés dans un fichier CSV Google Sheets en utilisant PHP et l'API Wassenger. Nous téléchargerons le fichier CSV depuis Google Sheets, lirons les numéros de téléphone et les messages, puis les enverrons via l'API Wassenger.

Prérequis

Installer les paquets requis

Tout d’abord, créez un nouveau dossier pour votre projet et placez-vous dedans dans votre terminal. Ensuite, lancez la commande suivante pour installer la bibliothèque nécessaire :

pecl install pecl_http

Préparer le fichier CSV Google Sheets

Créez un nouveau document Google Sheets et remplissez-le avec deux colonnes :

  • Première colonne : numéro de téléphone au format E164 avec l’indicatif pays.
  • Deuxième colonne : message texte à envoyer au numéro cible.

Le document Google Sheets doit contenir au moins deux colonnes et ressembler à ceci :

Le document Sheets équivalent exporté en CSV devrait ressembler à ceci :

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

Obtenir l’URL de téléchargement de votre document Google Sheets

  1. Cliquez sur “Fichier” en haut à gauche.
  2. Allez dans “Partager” > “Publier sur le web”.
  3. Dans l’onglet “Lien”, sélectionnez “Valeurs séparées par des virgules (.csv)” dans le menu déroulant.
  4. Sélectionnez la feuille souhaitée contenant les données : par défaut la première.
  5. Cliquez sur “Publier” et copiez l’URL.

Envoyer des messages texte

Créez un nouveau fichier nommé send_messages.php dans le répertoire de votre projet et ajoutez le code suivant :

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

Exécutez et testez le code dans le cloud sans installer de logiciel sur votre ordinateur. Créez un compte gratuit sur Replit et commencez en quelques minutes

Envoyer des messages média

Dans cet exemple, nous allons créer un programme différent send_media.php pour envoyer plusieurs images en tant que médias à des numéros différents récupérés depuis un document Google Sheets.

Pour envoyer un message média, la façon la plus simple est de fournir une URL de téléchargement du fichier. Si votre fichier n’est pas déjà hébergé quelque part, vous pouvez le télécharger sur Google Drive et rendre le fichier publiquement téléchargeable par l’API pour l’envoyer ensuite.

Exemple d’URL de téléchargement depuis un fichier public sur Google Drive :

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

Important : l’URL de téléchargement fournie doit renvoyer le contenu binaire du fichier, sinon l’opération échouera.*

Créez un nouveau fichier nommé send_media.php dans le répertoire de votre projet et ajoutez le code suivant :

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

Exécutez et testez le code dans le cloud sans installer de logiciel sur votre ordinateur. Créez un compte gratuit sur Replit et commencez en quelques minutes

Remplacer l’URL Google Sheets exportée en CSV

Dans les fichiers send_messages.php et send_media.php, assurez-vous d’avoir remplacé l’URL CSV de Google Sheets et votre token API Wassenger réel :

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

Voir les indications ci‑dessus pour obtenir l’URL de téléchargement Google Sheets à renseigner ici.

Remplacer le token API

Dans le fichier send_messages.php, assurez-vous d’avoir défini le token API de votre compte Wassenger réel :

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

Optionnellement, si vous avez plusieurs numéros WhatsApp connectés à votre compte Wassenger, vous pouvez spécifier quel numéro WhatsApp utiliser pour la livraison des messages en indiquant l’identifiant unique du device Wassenger (valeur hexadécimale de 24 caractères) dans la ligne suivante :

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

Exécuter le programme

Avant d’exécuter le programme, si vous prévoyez d’envoyer des centaines de messages à la suite, nous recommandons de définir une vitesse de livraison par minute faible, pas plus de 2–3 messages par minute, afin d’éviter des problèmes de blocage liés aux politiques anti‑spam de WhatsApp. En savoir plus sur les bonnes pratiques et comment réduire les risques ici.

Exécuter le programme dans le cloud

Vous pouvez exécuter le programme gratuitement dans le cloud sur Replit.com sans installer de logiciel sur votre ordinateur.

Créez simplement un nouveau projet, copiez-collez le code fourni, puis cliquez sur “Run” pour envoyer les messages. C’est aussi simple que ça 😀

Exécuter le programme sur votre ordinateur

Ouvrez un terminal dans le répertoire de votre projet et lancez la commande suivante pour exécuter le script send_messages.php ou send_media.php :

php send_messages.php

De la même manière, vous pouvez lancer le script send_media.php pour envoyer des messages média :

php send_media.php

Si tout est correctement configuré, vous devriez voir une sortie indiquant que les messages ont été créés avec succès :

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

Remarque : les messages seront ajoutés à la file d’envoi de votre numéro et livrés de manière asynchrone en arrière‑plan au fil du temps, en fonction de la limite de vitesse de livraison par minute de votre abonnement ou de la vitesse de livraison configurée manuellement dans les paramètres de votre numéro.

Les messages peuvent prendre plusieurs minutes ou heures, selon le nombre de messages créés, pour être effectivement délivrés aux numéros cibles via WhatsApp. Vous pouvez suivre la progression de la livraison dans le panneau web ou automatiquement en utilisant les événements webhook.

FAQ

Comment obtenir l’URL de téléchargement CSV de Google Sheets pour l’utiliser avec le script PHP ?

Les étapes détaillées pour publier un document Google Sheets au format CSV sont expliquées, notamment comment partager le fichier publiquement.

Quels prérequis sont nécessaires pour envoyer des messages WhatsApp depuis Google Sheets avec PHP ?

Couvre l’installation de PHP, les bibliothèques requises comme pecl_http, et l’obtention du token API Wassenger.

Comment m’assurer que les messages sont livrés sans déclencher les politiques anti‑spam de WhatsApp ?

Mets en avant les bonnes pratiques concernant la vitesse d’envoi des messages et la conformité anti‑spam.

Ready to transform your WhatsApp communication?

Start automating your customer interactions today with Wassenger

Get Started Free