· 4 min di lettura
Invia gli annunci su Discord, Slack e Telegram con una sola chiamata API
Invia note di rilascio e annunci su un canale Discord, un canale Slack e un canale Telegram dalla tua app, con una sola richiesta REST e senza app sviluppatore da registrare.
La tua community sta in tre posti: un server Discord, un workspace Slack e un canale Telegram. A ogni release qualcuno copia lo stesso annuncio in tutti e tre, a mano. Di solito arriva in ritardo, a volte manca da uno dei tre, e la formattazione non è mai proprio quella giusta.
Automatizzarlo da solo significa tre integrazioni diverse:
- Discord vuole un payload JSON verso il webhook del canale, con le immagini come embed e un limite di 2.000 caratteri.
- Slack vuole un payload di forma diversa, verso l’URL di un incoming webhook.
- Telegram vuole un token del bot, un chat ID e un metodo diverso per testo, foto, video e album.
Questa guida mostra come inviare lo stesso annuncio a tutti e tre con una sola richiesta, usando Hapi. Nessuno dei tre richiede un’app sviluppatore o una revisione della piattaforma: puoi essere online in una decina di minuti.
Passo 1: Ottieni una credenziale da ogni piattaforma
Discord: apri il server, vai su Server Settings → Integrations → Webhooks → New Webhook, scegli il canale (per esempio #announcements) e clicca Copy Webhook URL.
Slack: crea un incoming webhook per il workspace e scegli il canale su cui pubblica (per esempio #launches). Copia l’URL che inizia con https://hooks.slack.com/services/.
Telegram: scrivi a @BotFather, invia /newbot e copia il token del bot. Aggiungi il bot al canale come admin. Il chat ID è lo @username del canale, oppure l’ID numerico se il canale è privato.
Passo 2: Collega tutto in Hapi
Crea un account Hapi gratuito, apri Accounts → Connect e incolla ogni credenziale. Hapi verifica che ogni URL sia davvero un webhook Discord o Slack prima di salvarlo. Gli URL dei webhook e i token dei bot vengono cifrati a riposo (AES-256-GCM) e non vengono mai rimandati al browser, così nessuno del team può copiarli dalla dashboard.
Poi crea una chiave API sotto API keys e mettila nell’ambiente:
export HAPI_API_KEY="hapi_live_..."Passo 3: Invia un annuncio ovunque
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 out 🎉 Dark mode, CSV export and 3x faster search. Full notes: https://example.com/changelog",
"platforms": ["discord", "slack", "telegram"],
"mediaUrls": ["https://example.com/v2.4-banner.png"]
}'Ricevi un 201 con un risultato per ogni canale, così vedi subito che il post è arrivato su Discord, Slack e Telegram.
Dalla pipeline di release (Node.js)
Il posto più utile per questa chiamata è la fine dello script di deploy: l’annuncio esce nel momento in cui la release è online.
await fetch("https://hapi.tools/v1/posts", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.HAPI_API_KEY}`,
"Content-Type": "application/json",
// Same key on a retried deploy = no duplicate announcement.
"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"],
}),
});Qui l’Idempotency-Key conta. I job di CI vengono ritentati e, senza quella chiave, un deploy instabile può annunciare la stessa release tre volte.
Passo 4: Adatta il messaggio a ogni canale
Il workspace Slack può essere per i clienti, mentre il canale Telegram è per la community più ampia. Con platformOptions cambi il testo per canale, nella stessa richiesta:
{
"content": "v2.4 is out 🎉 Dark mode, CSV export and 3x faster search.",
"platforms": ["discord", "slack", "telegram"],
"platformOptions": {
"slack": { "content": "v2.4 is live for all workspaces. Dark mode, CSV export and faster search. Questions? Reply in this thread." },
"telegram": { "content": "v2.4 is out 🎉 Dark mode, CSV export, 3x faster search. Changelog: https://example.com/changelog" }
}
}Hapi valida ogni versione rispetto ai limiti di quella piattaforma prima di accettare la richiesta. Se il testo per Discord supera i 2.000 caratteri, lo scopri subito, non dopo la release.
Passo 5: Programmalo per il momento giusto
Vuoi lanciare alle 9:00 nel fuso dei tuoi utenti, e non quando capita che finisca il deploy? Aggiungi un orario:
{
"content": "Launch day 🚀 v3.0 is here.",
"platforms": ["discord", "slack", "telegram"],
"scheduledAt": "2026-11-20T09:00:00-05:00",
"timezone": "America/New_York"
}Nessuna di queste tre piattaforme permette a un webhook o a un bot di programmare un messaggio per dopo. Hapi tiene il post e lo invia all’ora giusta, poi manda alla tua app un webhook firmato post.published o post.failed, con l’esito di ogni canale.
Buono a sapersi
- Immagini: Discord mostra fino a 10 immagini come embed. Telegram invia una sola foto o un solo video, oppure un album fino a 10 elementi se ne alleghi diversi. Con un media allegato, Telegram limita la didascalia a 1.024 caratteri: tieni corti gli annunci con immagine.
- Risposte su Telegram: aggiungi
firstCommente Hapi lo pubblica come risposta al tuo annuncio. È comodo per un seguito del tipo “se ne parla qui” o “changelog completo”. - Cancellare: puoi eliminare i post su Discord e Telegram con
DELETE /v1/posts/{id}. Gli incoming webhook di Slack non possono cancellare i messaggi, quindi ricontrolla il testo per Slack prima che esca. - Altri network, stessa chiamata: aggiungi
"x","linkedin"o"bluesky"aplatformsper annunciare anche in pubblico, nello stesso momento.
Cosa ti sei risparmiato
- Tre formati di payload e tre serie di limiti
- Cifrare e conservare in modo sicuro URL dei webhook e token dei bot
- Uno scheduler, perché nessuna di queste piattaforme programma al posto tuo
- Retry senza duplicati, e il dettaglio degli errori per ogni canale
Inizia la prova di 15 giorni → La prova a 5 $ copre 5 canali collegati e 300 post in 15 giorni: abbastanza per Discord, Slack e Telegram fin dal primo giorno.