Webhooks aktualisieren via API

Falls wir bei einer bestehenden API neue Webhook-Endpunkte erstellen müssen (z. B. Tests auf localhost oder Domain-Wechsel), kann man das über die API machen.

Es sind maximal 10 Webhooks möglich. Das bedeutet, wenn wir zwei Domains haben (also insgesamt 10 Webhooks), muss man zuerst 5 Webhooks löschen, bevor man die bestehenden Webhooks duplizieren kann.


Beispiel (Tinkerwell), Webhook duplizieren:

use Illuminate\Support\Facades\Http;

$token = "{MESSAGEBIRD_ACCESS_KEY}"; // IN .env-FILE
$newBaseUrl = "https://neue-domain.ch/webhooks";

$response = Http::withHeaders([
  "Authorization" => "AccessKey $token"
])->get("https://conversations.messagebird.com/v1/webhooks");

if ($response->successful()) {
  $webhooks = $response->json()["items"];

  foreach ($webhooks as $webhook) {
    // Pfad aus der URL nach der Domain extrahieren
    $urlPath = parse_url($webhook["url"], PHP_URL_PATH);

    // Neue Webhook-URL zusammenbauen
    $newUrl = $newBaseUrl . $urlPath;

    // Payload zum Erstellen eines neuen Webhooks vorbereiten
    $payload = [
      "channelId" => $webhook["channelId"], // Gleiche channelId verwenden
      "url" => $newUrl,
      "events" => $webhook["events"],
      "status" => "enabled"
    ];

    // Neuen Webhook per POST anlegen
    $createResponse = Http::withHeaders([
      "Authorization" => "AccessKey $token"
    ])->post("https://conversations.messagebird.com/v1/webhooks", $payload);

    if ($createResponse->successful()) {
      echo "Webhook für Event {$webhook["events"][0]} erfolgreich erstellt: $newUrl\n";
    } else {
      echo "Fehler beim Erstellen des Webhooks für Event {$webhook["events"][0]}: " .
        $createResponse->body() .
        "\n";
    }
  }
} else {
  echo "Fehler beim Abrufen der bestehenden Webhooks: " . $response->body();
}

Beispiel (Tinkerwell) Webhook löschen:


use Illuminate\Support\Facades\Http;

$token = "{MESSAGEBIRD_ACCESS_KEY}"; // IN .env-FILE
$domainToDelete = "https://localhost"; // Domain, deren Webhooks gelöscht werden sollen

$response = Http::withHeaders([
"Authorization" => "AccessKey $token"
])->get("https://conversations.messagebird.com/v1/webhooks");

if ($response->successful()) {
$webhooks = $response->json()["items"];

foreach ($webhooks as $webhook) {
if (str_starts_with($webhook["url"], $domainToDelete)) {
  $webhookId = $webhook["id"];

  // DELETE Request, um den Webhook zu löschen
  $deleteResponse = Http::withHeaders([
    "Authorization" => "AccessKey $token"
  ])->delete("https://conversations.messagebird.com/v1/webhooks/$webhookId");

  if ($deleteResponse->successful()) {
    echo "Webhook {$webhookId} (URL: {$webhook['url']}) wurde gelöscht.\n";
  } else {
    echo "Fehler beim Löschen des Webhooks {$webhookId}: " . $deleteResponse->body() . "\n";
  }
}
}
} else {
echo "Fehler beim Abrufen der bestehenden Webhooks: " . $response->body();
}