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