Slack ha già conquistato la superficie di chat del tuo team, quindi tanto vale che accorci anche i tuoi link. L'app Elido per Slack fa due cose: dà a ogni membro un comando slash /shorten e instrada gli alert degli eventi sui link nei canali che scegli. L'installazione richiede circa 90 secondi. Nessun codice di handler webhook, nessun Bolt SDK, nessun tunnel ngrok.
Questo articolo percorre le tre parti in gioco: il percorso del comando slash, la matrice di instradamento degli alert e il meccanismo di firma HMAC che impedisce a richieste POST casuali di fingersi Slack. Se vuoi capire la superficie webhook più ampia che alimenta questi alert, l'articolo webhook per gli eventi sui link documenta ogni payload che Elido emette. L'app Slack è una delle integrazioni precostruite che consuma quegli eventi per te.
Il comando slash /shorten
Un utente digita questo in qualsiasi canale:
/shorten https://blog.elido.app/post/launch-2026?utm_source=announce
Slack invia un POST firmato a https://api.elido.app/integrations/slack/commands. Il body è application/x-www-form-urlencoded (Slack usa ancora l'encoding dei form per i comandi slash, non JSON, il che sorprende tutti la prima volta). I campi rilevanti sono:
team_id=T01ABCD2EF
channel_id=C01234ABCDE
user_id=U01HJKLMNOP
command=/shorten
text=https://blog.elido.app/post/launch-2026?utm_source=announce
response_url=https://hooks.slack.com/commands/T01ABCD2EF/...
Elido cerca la riga OAuth tramite team_id, trova l'ID del workspace contro cui era installato, crea un shortlink nel dominio predefinito del workspace e restituisce un messaggio effimero in meno di 200ms al p95. La risposta è effimera per impostazione predefinita, così il canale non viene inondato ogni volta che qualcuno accorcia un URL durante una riunione.
Se chi invoca il comando vuole un messaggio pubblico, passa --public come ultimo token:
/shorten --public https://launch.elido.app
All'installazione sono richiesti tre scope OAuth: commands (perché il comando slash possa essere invocato), chat:write (perché Elido possa pubblicare messaggi di follow-up con pulsanti di copia) e incoming-webhook (perché gli alert arrivino nel canale scelto dall'installatore). La guida ai Slash Commands di Slack elenca l'insieme completo, ma questi tre coprono tutto quello che fa Elido. I domini personalizzati vengono rispettati: se il tuo workspace ha go.acme.com configurato tramite i domini personalizzati, /shorten crea shortlink su quell'host.
Una nota sui budget di latenza. Slack concede ai comandi slash 3000ms di tempo reale per rispondere. Elido risponde in 180-220ms p95 sui POP edge UE e USA perché l'handler del comando slash utilizza la stessa cache del percorso veloce del redirect edge. Se il tuo team è in APAC e osservi valori superiori ai 350ms, controlla il routing regionale dei POP in /docs/guides/observability.
Alert di canale guidati da trigger di eventi
L'altra metà dell'app Slack è l'instradamento degli alert. Scegli un tipo di evento, scegli un canale, ricevi la notifica. I quattro tipi di evento disponibili oggi:
- broken-link: la destinazione ha restituito 4xx o 5xx nell'ultimo crawl dello scanner di link
- click-threshold: i click hanno superato una soglia salvata (default: 100 in una finestra mobile di 5 minuti)
- scan-failure: lo scanner URL ha segnalato la destinazione come phishing, malware o presente in una blocklist pubblica
- new-conversion: si è attivata una conversione tracciata (richiede il tracciamento delle conversioni)
Il payload di alert che Elido inoltro a Slack usa Block Kit, perché il testo semplice in un canale affollato viene ignorato. Ecco come appare un alert click-threshold sul filo quando Elido fa POST all'URL dell'incoming-webhook di Slack:
{
"text": "click-threshold crossed on go.acme.com/launch",
"blocks": [
{
"type": "header",
"text": {
"type": "plain_text",
"text": ":chart_with_upwards_trend: Click threshold crossed"
}
},
{
"type": "section",
"fields": [
{
"type": "mrkdwn",
"text": "*Link:*\n<https://go.acme.com/launch|go.acme.com/launch>"
},
{ "type": "mrkdwn", "text": "*Window:*\n5m" },
{ "type": "mrkdwn", "text": "*Clicks:*\n412" },
{ "type": "mrkdwn", "text": "*Threshold:*\n100" }
]
},
{
"type": "actions",
"elements": [
{
"type": "button",
"text": { "type": "plain_text", "text": "Open dashboard" },
"url": "https://app.elido.app/links/abc123"
}
]
}
]
}
Un alert scan-failure è simile ma usa :rotating_light: e include la categoria di minaccia dallo scanner: phishing, malware, spam o blocklist. Un alert broken-link riporta il codice di stato HTTP e il timestamp dell'ultimo stato funzionante, che è la prima domanda che fa chi è di turno.
Il routing è per workspace e per evento. Una configurazione tipica per un team di crescita di 30 persone:
| Evento | Canale | Emoji | Ping |
|---|---|---|---|
| broken-link | #ops-alerts | :rotating_light: | @oncall |
| click-threshold | #growth | :chart_with_upwards_trend: | (nessuno) |
| scan-failure | #security | :rotating_light: | @sec-oncall |
| new-conversion | #wins | :tada: | (nessuno) |
Configuri tutto questo nel pannello delle impostazioni dell'integrazione Slack. Ogni route è una riga in Postgres - nessun YAML, nessun file di configurazione JSON, nessun redeploy. Lo stesso motore di routing alimenta le integrazioni Linear e Pipedrive, quindi il modello mentale si trasferisce se usi entrambe.
Se vuoi che gli alert raggiungano più destinazioni, specchia lo stesso evento su un abbonamento webhook generico e instrada il JSON dove ne hai bisogno. Questo schema è documentato in automatizzazione dell'accorciatore URL con Zapier per il pubblico no-code.
Verifica HMAC e l'insidia della reinstallazione
Slack firma ogni richiesta in entrata al tuo endpoint del comando slash. La firma è HMAC SHA256 su una stringa che Slack costruisce dalla versione, dal timestamp e dal body grezzo della richiesta. Il procedimento si trova nella guida alla verifica delle richieste di Slack. Il verificatore di Elido in Go assomiglia a questo:
func verifySlackSignature(secret, ts, body, sig string) error {
// Reject anything older than 5 minutes to block replays.
age := time.Since(parseTs(ts))
if age > 5*time.Minute || age < -1*time.Minute {
return errReplay
}
base := fmt.Sprintf("v0:%s:%s", ts, body)
mac := hmac.New(sha256.New, []byte(secret))
mac.Write([]byte(base))
expected := "v0=" + hex.EncodeToString(mac.Sum(nil))
if !hmac.Equal([]byte(expected), []byte(sig)) {
return errBadSig
}
return nil
}
Tre cose vanno storte qui, in ordine di frequenza:
1. Il body viene parsato prima della firma. Se il tuo framework HTTP chiama r.ParseForm() prima che tu legga il body grezzo, il body svanisce e la firma non corrisponderà mai. Leggi r.Body prima, poi parsalo. L'handler del comando slash di Elido legge il body in un buffer e lo riparsifica, con il costo di un'allocazione e un risparmio di una settimana di debug.
2. Deriva dell'orologio nel timestamp. La finestra di replay raccomandata da Slack è di 5 minuti. Se l'orologio del tuo server deriva di più (frequente su bare-metal senza chrony), ogni richiesta firmata sembra un replay. Esegui chronyc tracking sulla macchina e conferma Leap status: Normal.
3. Reinstallazione con signing secret ruotato. Questo è quello che ti sveglia di notte. Se ruoti il signing secret nel pannello dell'app Slack (Basic Information > Signing Secret > Regenerate), tutte le installazioni OAuth esistenti in tutti i workspace iniziano immediatamente a fallire la verifica della firma. L'amministratore del workspace deve reinstallare l'app per ottenere un nuovo handshake. Non esiste una rotazione silenziosa - Slack non propaga il nuovo segreto alle installazioni esistenti.
Il raggio d'azione dipende dal tuo modello di distribuzione. Se la tua app Slack è mono-workspace (l'app interna della tua azienda), la rotazione è una reinstallazione di 90 secondi da parte di un solo amministratore. Se la tua app è nella directory pubblica di Slack e 4000 workspace l'hanno installata, li hai appena bloccati tutti. Scegli le finestre di rotazione di conseguenza e annunciale nel changelog con almeno 48 ore di anticipo.
Una modalità di errore correlata: installare la stessa app Slack in un workspace diverso usando la stessa sessione browser. Slack a volte restituisce un token legato al team sbagliato se i cookie sono persistenti. La soluzione è una finestra privata o ?ignore_session=1 nell'URL di installazione. Il flusso di installazione di Elido su /dashboard/integrations/slack già passa quel flag perché ci siamo scottati nella Beta iniziale.
Quando il bot Slack è la risposta sbagliata
Slack è eccellente per gli alert che richiedono intervento umano. È la destinazione sbagliata per eventi programmatici ad alto volume. Se generi più di ~20 eventi al minuto, Slack limita l'endpoint dell'incoming-webhook a circa 1 messaggio al secondo per canale e perderai alert. Instrada quelli verso una metrica Datadog o un consumatore webhook grezzo, e invia a Slack solo il riepilogo del superamento della soglia.
L'altro caso in cui Slack è sbagliato: le tracce di audit di conformità. I messaggi Slack sono mutabili (puoi modificarli ed eliminarli) e la politica di conservazione è controllata dal workspace. Se il tuo auditor ha bisogno di un registro immutabile di chi ha accorciato quale link e quando, spinge gli eventi del comando slash nel tuo data warehouse tramite l'export ClickHouse e tratta Slack solo come livello di notifica.
Per i team di crescita che instradano alert di click sulle campagne, il bot Slack copre il 95% di ciò che le persone chiedono in /solutions/marketers. Per i team di piattaforma che usano la nostra API + SDK, è uno dei diversi output verso cui fare fan-out.
Prezzi e limiti
L'integrazione Slack è disponibile su ogni piano, incluso il livello gratuito. Non c'è alcun costo per messaggio - il limite riguarda shortlink e click in sé, che puoi consultare sulla pagina dei prezzi. Ogni workspace può configurare fino a 32 regole di routing (combinazioni tipo di evento x canale), più di quante qualsiasi team con cui abbia parlato abbia mai utilizzato.
Le installazioni self-hosted di Elido funzionano anch'esse. Punti l'URL di richiesta dell'app Slack al tuo dominio, imposti il signing secret nell'ambiente di api-core e il resto è identico. I docs self-host coprono le variabili d'ambiente; la guida all'osservabilità copre i nomi delle metriche in modo che tu possa visualizzare la latenza dei comandi slash e il tasso di successo nella consegna degli alert in Grafana o Datadog.
Cosa fare adesso
Se stai già usando Elido, apri /dashboard/integrations/slack, clicca su Connetti, scegli un canale predefinito per ogni tipo di evento e parti. L'installazione richiede davvero 90 secondi. Se stai valutando la soluzione, il catalogo delle integrazioni elenca ogni connettore e il tier su cui è disponibile, e il confronto con Bitly mostra come la superficie Slack si confronta con gli incumbent (spoiler: Bitly non ha un comando slash).
Se stai costruendo il tuo bot, copia il pattern HMAC qui sopra e rispetta i 3000ms di tempo reale. L'UX dei comandi slash di Slack penalizza tutto ciò che è lento, e un bot che sembra veloce è metà del motivo per cui le persone ne installano uno.
Domande frequenti
Come installo il bot accorciatore di URL Elido per Slack?
Apri /dashboard/integrations/slack in Elido e clicca su Connetti. Verrai reindirizzato alla schermata OAuth di Slack, scegli il workspace, approva gli scope (commands, chat:write, incoming-webhook) e in circa 90 secondi sei di nuovo in Elido. L'installazione scrive una riga di token indicizzata per team_id, così ogni workspace ha le proprie credenziali.
Funziona /shorten nei canali privati e nei DM?
Sì. I comandi slash vengono eseguiti nel canale in cui l'utente li digita, compresi i canali privati e i DM, perché Slack trasmette il channel_id nel payload firmato. Elido risponde con un messaggio effimero visibile solo a chi lo ha invocato, mantenendo il canale silenzioso per le abbreviazioni occasionali.
Come vengono firmati i payload degli alert di Slack?
Gli alert in uscita da Elido verso Slack usano l'URL dell'incoming-webhook di Slack, che è di per sé un segreto di tipo bearer legato a un canale. I comandi slash in entrata da Slack verso Elido vengono verificati con HMAC SHA256 sul body grezzo della richiesta e l'header X-Slack-Request-Timestamp, seguendo il meccanismo di signing-secret di Slack.
Cosa succede al bot Slack se reinstallo l'app OAuth?
La reinstallazione genera un nuovo bot token e invalida quello vecchio. Il signing secret ruota solo se lo rigeneri nel pannello dell'app Slack; in tal caso ogni workspace che usa la tua distribuzione deve reinstallare. Pianifica le rotazioni nelle finestre a basso traffico e annunciale in #ops.
Quali tipi di alert posso instradare verso i canali Slack?
Oggi sono disponibili quattro tipi di evento: broken-link (4xx o 5xx rilevato sulla destinazione del shortlink), click-threshold (una soglia salvata è stata superata in una finestra di 5 minuti), scan-failure (lo scanner URL ha segnalato la destinazione come phishing o malware) e new-conversion (una conversione tracciata si è attivata). Ogni alert può puntare a un canale diverso.
Prova Elido
Incolla un URL, ottieni un link breve
Senza registrazione. Il link vive 30 giorni. Iscriviti per conservarlo.
Gratis, nessuna registrazione richiesta · 2 al giorno