· 4 min leestijd
Aankondigingen naar Discord, Slack en Telegram met één API-call
Stuur releasenotes en aankondigingen vanuit je app naar een Discord-kanaal, een Slack-kanaal en een Telegram-kanaal, met één REST-request en zonder developer-apps te registreren.
Je community zit op drie plekken: een Discord-server, een Slack-workspace en een Telegram-kanaal. Bij elke release kopieert iemand dezelfde aankondiging met de hand naar alle drie. Meestal is het laat, soms ontbreekt het op één van de drie, en de opmaak klopt nooit helemaal.
Het zelf automatiseren betekent drie verschillende integraties:
- Discord wil een JSON-payload naar een kanaal-webhook, met afbeeldingen als embeds en een limiet van 2.000 tekens.
- Slack wil een andere payloadvorm naar een incoming-webhook-URL.
- Telegram wil een bottoken, een chat-ID en een andere methode voor tekst, foto's, video's en albums.
In deze handleiding stuur je dezelfde aankondiging naar alle drie met één request via Hapi. Geen van de drie heeft een developer-app of een platformreview nodig, dus je kunt in een minuut of tien live zijn.
Stap 1: Haal bij elk platform een credential op
Discord: open je server, ga naar Server Settings → Integrations → Webhooks → New Webhook, kies het kanaal (bijvoorbeeld #announcements) en klik op Copy Webhook URL.
Slack: maak een incoming webhook voor je workspace en kies het kanaal waar die in post (bijvoorbeeld #launches). Kopieer de URL die begint met https://hooks.slack.com/services/.
Telegram: stuur een bericht naar @BotFather, stuur /newbot en kopieer het bottoken. Voeg de bot aan je kanaal toe als beheerder. Je chat-ID is de @username van het kanaal, of de numerieke ID bij privékanalen.
Stap 2: Koppel ze in Hapi
Maak een gratis Hapi-account, open Accounts → Connect en plak elk credential. Hapi controleert of elke webhook-URL een echte Discord- of Slack-webhook is voordat die wordt opgeslagen. Webhook-URL's en bottokens worden in rust versleuteld (AES-256-GCM) en nooit teruggestuurd naar de browser, zodat niemand in je team ze uit het dashboard kan kopiëren.
Maak daarna een API-key aan onder API keys en zet hem in je omgeving:
export HAPI_API_KEY="hapi_live_..."Stap 3: Stuur één aankondiging overal heen
curl -X POST https://hapi.tools/v1/posts \
-H "Authorization: Bearer $HAPI_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: release-2-4-0" \
-d '{
"content": "v2.4 is er 🎉 Donkere modus, CSV-export en 3x sneller zoeken. Volledige notes: https://example.com/changelog",
"platforms": ["discord", "slack", "telegram"],
"mediaUrls": ["https://example.com/v2.4-banner.png"]
}'Je krijgt een 201 terug met één resultaat per kanaal, zodat je meteen ziet dat het bericht in Discord, Slack en Telegram is geland.
Vanuit je releasepipeline (Node.js)
De nuttigste plek voor deze call is het einde van je deployscript, zodat aankondigingen de deur uitgaan op het moment dat een release live gaat:
await fetch("https://hapi.tools/v1/posts", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.HAPI_API_KEY}`,
"Content-Type": "application/json",
// Dezelfde key bij een opnieuw geprobeerde deploy = geen dubbele aankondiging.
"Idempotency-Key": `release-${process.env.RELEASE_VERSION}`,
},
body: JSON.stringify({
content: `${process.env.RELEASE_VERSION} is live 🚀 ${process.env.RELEASE_NOTES_URL}`,
platforms: ["discord", "slack", "telegram"],
}),
});De Idempotency-Key doet hier het werk. CI-jobs worden opnieuw geprobeerd, en zonder die key kan een haperende deploy dezelfde release drie keer aankondigen.
Stap 4: Stem het bericht af per kanaal
Je Slack-workspace is misschien voor klanten, terwijl je Telegram-kanaal voor de bredere community is. Gebruik platformOptions om de tekst per kanaal in dezelfde request te wijzigen:
{
"content": "v2.4 is er 🎉 Donkere modus, CSV-export en 3x sneller zoeken.",
"platforms": ["discord", "slack", "telegram"],
"platformOptions": {
"slack": { "content": "v2.4 is live voor alle workspaces. Donkere modus, CSV-export en sneller zoeken. Vragen? Reageer in deze thread." },
"telegram": { "content": "v2.4 is er 🎉 Donkere modus, CSV-export, 3x sneller zoeken. Changelog: https://example.com/changelog" }
}
}Hapi toetst elke versie aan de limieten van dat platform voordat de request wordt geaccepteerd. Loopt je Discord-tekst over de 2.000 tekens, dan merk je dat nu, en niet pas na de release.
Stap 5: Plan het voor het juiste moment in
Lanceren om 9.00 uur in de tijdzone van je gebruikers, en niet wanneer de deploy toevallig klaar was? Voeg een tijdstip toe:
{
"content": "Lancering 🚀 v3.0 is er.",
"platforms": ["discord", "slack", "telegram"],
"scheduledAt": "2026-11-20T09:00:00-05:00",
"timezone": "America/New_York"
}Geen van deze drie platforms laat een webhook of bot een bericht voor later inplannen. Hapi houdt het bericht vast en verstuurt het op tijd, en stuurt daarna een ondertekende post.published- of post.failed-webhook naar je app met het resultaat per kanaal.
Goed om te weten
- Afbeeldingen: Discord toont tot 10 afbeeldingen als embeds. Telegram stuurt één foto of video, of een album van maximaal 10 als je er meerdere meestuurt. Met media erbij beperkt Telegram het bijschrift tot 1.024 tekens, dus houd aankondigingen met een afbeelding kort.
- Telegram-antwoorden: voeg
firstCommenttoe en Hapi plaatst dat als antwoord op je aankondiging. Handig voor een "bespreek het hier"- of "volledige changelog"-vervolg. - Verwijderen: Discord- en Telegram-berichten kun je verwijderen via
DELETE /v1/posts/{id}. Incoming webhooks van Slack kunnen berichten niet verwijderen, dus controleer Slack-tekst dubbel voordat die de deur uitgaat. - Meer netwerken, dezelfde call: voeg
"x","linkedin"of"bluesky"toe aanplatformsom tegelijk openbaar aan te kondigen.
Wat je overslaat
- Drie payloadformaten en drie sets limieten
- Webhook-URL's en bottokens veilig versleutelen en opslaan
- Een scheduler, want geen van deze platforms plant voor je in
- Retries zonder duplicaten, en foutrapportage per kanaal
Start je proefperiode van 15 dagen → De proefperiode van $5 dekt 5 gekoppelde kanalen en 300 berichten in 15 dagen: genoeg voor Discord, Slack en Telegram vanaf dag één.