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(); }