Blog

· 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:

bash
export HAPI_API_KEY="hapi_live_..."

Passo 3: Invia un annuncio ovunque

bash
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.

js
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:

json
{
  "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:

json
{
  "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 firstComment e 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" a platforms per 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.