WhatsApp-Nachrichten von Google Sheets mit PHP senden

11. Dezember 2024

In diesem Tutorial lernst du, wie du Nachrichten an Telefonnummern sendest, die in einer Google Sheets CSV-Datei gespeichert sind, mithilfe von PHP und der Wassenger API. Wir werden die CSV-Datei von Google Sheets herunterladen, die Telefonnummern und Nachrichten auslesen und sie dann über die Wassenger API senden.

Voraussetzungen

Benötigte Pakete installieren

Erstelle zunächst ein neues Verzeichnis für dein Projekt und navigiere im Terminal dorthin. Führe dann die folgenden Befehle aus, um die notwendigen Bibliotheken zu installieren:

pecl install pecl_http

Google Sheets CSV-Datei vorbereiten

Erstelle ein neues Google Sheets-Dokument und fülle es mit zwei Spalten:

  • Erste Spalte: Telefonnummer im E164 format mit der Länder-Vorwahl.
  • Zweite Spalte: Textnachricht, die an die Zieltelefonnummer gesendet werden soll.

Das Google Sheets-Dokument sollte mindestens zwei Spalten haben und so aussehen:

Das äquivalente Sheets-Dokument, als CSV exportiert, sollte so aussehen:

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

Lade-URL deines Google Sheets-Dokuments erhalten

  1. Klicke oben links auf „Datei“.
  2. Gehe zu „Freigeben“ > „Im Web veröffentlichen“.
  3. Wähle im Reiter „Link“ „Kommagetrennte Werte (.csv)“ aus dem Dropdown-Menü.
  4. Wähle die gewünschte Tabellenblattseite mit den relevanten Daten aus: standardmäßig das erste Blatt.
  5. Klicke auf „Veröffentlichen“ und kopiere die URL.

Textnachrichten senden

Erstelle eine neue Datei namens send_messages.php in deinem Projektverzeichnis und füge den folgenden Code hinzu:

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

Code in der Cloud ausführen und testen, ohne Software auf deinem Computer installieren zu müssen. Erstelle ein kostenloses Konto bei Replit und leg in wenigen Minuten los

Mediendateien senden

In diesem Beispiel erstellen wir ein separates Programm send_media.php, um mehrere Bild-Mediennachrichten an verschiedene Telefonnummern zu senden, die aus einem Google Sheets-Dokument geladen werden.

Um eine Mediennachricht zu senden, ist die einfachste Methode die Angabe einer Datei-Download-URL. Wenn deine Datei noch nicht irgendwo hochgeladen ist, kannst du die Datei in Google Drive hochladen und die Datei öffentlich zum Herunterladen freigeben, damit die API sie später abrufen und senden kann.

Beispiel für eine Download-URL aus einer öffentlichen Datei in Google Drive:

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

Wichtig: Die angegebene Download-URL muss den binären Datei-Inhalt zurückgeben, andernfalls schlägt der Vorgang fehl.

Erstelle eine neue Datei namens send_media.php in deinem Projektverzeichnis und füge den folgenden Code hinzu:

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

Code in der Cloud ausführen und testen, ohne Software auf deinem Computer installieren zu müssen. Erstelle ein kostenloses Konto bei Replit und leg in wenigen Minuten los

Google Sheets-URL zum Exportieren als CSV ersetzen

Stelle in den Dateien send_messages.php und send_media.php sicher, dass du die Google Sheets-CSV-URL und dein tatsächliches Wassenger API-Token ersetzt hast:

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

Siehe die oben stehenden Hinweise, um die Google Sheets-Download-URL zu erhalten und hier einzufügen.

API-Token ersetzen

Stelle in der Datei send_messages.php sicher, dass du das API-Token deines tatsächlichen Wassenger-Kontos definiert hast:

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

Optional kannst du, wenn du mehrere WhatsApp-Nummern in deinem Wassenger-Konto verbunden hast, angeben, welche WhatsApp-Nummer du für die Nachrichtenübermittlung verwenden möchtest, indem du die eindeutige Gerätes-ID von Wassenger (24-stelliger hexadezimaler Wert) in der folgenden Zeile angibst:

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

Programm ausführen

Bevor du das Programm ausführst: Wenn du vorhast, Hunderte von Nachrichten hintereinander zu senden, empfehlen wir, eine niedrigere Zustellgeschwindigkeit pro Minute zu definieren (nicht mehr als 2–3 Nachrichten), um Sperrprobleme aufgrund von Anti-Spam-Richtlinien von WhatsApp zu vermeiden. Erfahre mehr über Best Practices und wie du das Risiko reduzierst.

Programm in der Cloud ausführen

Du kannst das Programm kostenfrei in der Cloud auf Replit.com ausführen, ohne Software auf deinem Computer zu installieren.

Erstelle einfach ein neues Projekt, kopiere den bereitgestellten Code hinein und klicke auf „Run“, um die Nachrichten zu senden. So einfach ist das 😀

Programm auf deinem Computer ausführen

Öffne ein Terminal in deinem Projektverzeichnis und führe den folgenden Befehl aus, um das Skript send_messages.php oder send_media.php auszuführen:

php send_messages.php

Ähnlich kannst du das Skript send_media.php ausführen, um Mediennachrichten zu senden:

php send_media.php

Wenn alles korrekt eingerichtet ist, solltest du Ausgaben sehen, die anzeigen, dass die Nachrichten erfolgreich erstellt wurden:

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

Hinweis: Die Nachrichten werden der Versandwarteschlange deiner Nummer hinzugefügt und asynchron im Hintergrund über einen längeren Zeitraum zugestellt, basierend auf dem Nachrichten-Versandlimit pro Minute deines Abonnements oder der manuell konfigurierten Zustellgeschwindigkeit, die du in den Einstellungen deiner Nummer festgelegt hast.

Die Zustellung der Nachrichten an die Zieltelefonnummern via WhatsApp kann mehrere Minuten oder Stunden dauern, abhängig davon, wie viele Nachrichten erstellt wurden. Du kannst den Fortschritt der Nachrichten-Zustellung im Web-Panel überwachen oder automatisch über Webhook-Ereignisse.

FAQ

Wie erhalte ich die Google Sheets CSV-Download-URL für die Verwendung mit dem PHP-Skript?

Detaillierte Schritte zum Veröffentlichen eines Google Sheets-Dokuments als CSV werden erklärt, einschließlich wie du die Datei öffentlich freigeben kannst.

Welche Voraussetzungen sind erforderlich, um WhatsApp-Nachrichten aus Google Sheets mit PHP zu senden?

Behandelt die PHP-Installation, die benötigten Bibliotheken wie pecl_http und das Beschaffen des Wassenger API-Tokens.

Wie kann ich sicherstellen, dass Nachrichten zugestellt werden, ohne Anti-Spam-Richtlinien von WhatsApp auszulösen?

Hebt Best Practices für die Nachrichten-Zustellgeschwindigkeit und die Anti-Spam-Konformität hervor.

Ready to transform your WhatsApp communication?

Start automating your customer interactions today with Wassenger

Get Started Free