8 min di letturaIntegrazioni

Bot accorciatore di URL per Slack: accorci link e instrada alert

Installa l'app Elido per Slack, usa il comando slash /shorten e instrada gli alert di soglia su qualsiasi canale senza scrivere handler webhook.

Marius Voß
DevRel · edge infra
Diagramma del bot accorciatore di URL per Slack: comando slash a sinistra, edge di Elido al centro, messaggi di alert del canale a destra con badge di severità.

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.

Diagramma in tre fasi del comando slash /shorten di Elido: l'utente digita il comando, Slack invia una richiesta firmata ad api.elido.app, Elido risponde con un messaggio effimero contenente il link breve in 200ms p95.

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.

Matrice di instradamento degli alert: le righe mostrano i tipi di evento broken-link, click-threshold, scan-failure, new-conversion; le colonne mostrano il canale Slack di destinazione, l'emoji, il target del ping, il colore di severità.

Il routing è per workspace e per evento. Una configurazione tipica per un team di crescita di 30 persone:

EventoCanaleEmojiPing
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

Prova Elido

Accorciatore di URL ospitato nell'UE: domini personalizzati, analisi approfondite e API aperta. Piano gratuito - senza carta di credito.

Tag
slack url shortener
slack link shortening bot
slack short links
slack /shorten command
slack channel alerts

Continua a leggere