9 min de lectureIntégrations

Bot raccourcisseur d'URL Slack : raccourcir des liens et router des alertes

Installez l'app Elido pour Slack, utilisez la commande slash /shorten et routez les alertes de seuil vers n'importe quel canal sans écrire de gestionnaires webhook.

Marius Voß
DevRel · edge infra
Schéma du bot raccourcisseur d'URL Slack : commande slash à gauche, edge Elido au centre, messages d'alerte de canal à droite avec badges de sévérité.

Slack occupe déjà toute la surface de messagerie de votre équipe - autant qu'il raccourcisse aussi vos liens. L'app Elido pour Slack fait deux choses : elle donne à chaque membre une commande slash /shorten, et elle route les alertes d'événements de lien vers les canaux de votre choix. L'installation prend environ 90 secondes. Pas de code de gestionnaire webhook, pas de Bolt SDK, pas de tunnel ngrok.

Cet article détaille les trois composantes : le chemin de la commande slash, la matrice de routage des alertes et le mécanisme de signature HMAC qui empêche des requêtes POST aléatoires d'usurper l'identité de Slack. Si vous souhaitez comprendre la surface webhook plus large qui alimente ces alertes, l'article webhooks pour les événements de liens documente chaque payload qu'Elido émet. L'app Slack est l'une des intégrations préconstruites qui consomme ces événements pour vous.

La commande slash /shorten

Un utilisateur tape ceci dans n'importe quel canal :

/shorten https://blog.elido.app/post/launch-2026?utm_source=announce

Slack envoie un POST signé à https://api.elido.app/integrations/slack/commands. Le corps est en application/x-www-form-urlencoded (Slack utilise encore l'encodage de formulaire pour les commandes slash, pas JSON - ce qui surprend tout le monde la première fois). Les champs pertinents sont :

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 récupère la ligne OAuth par team_id, trouve l'ID de l'espace de travail contre lequel il a été installé, crée un shortlink dans le domaine par défaut de l'espace de travail et renvoie un message éphémère en moins de 200ms au p95. La réponse est éphémère par défaut pour éviter de spammer le canal chaque fois que quelqu'un raccourcit une URL pendant une réunion.

Si l'expéditeur veut un message public, il passe --public comme dernier token :

/shorten --public https://launch.elido.app

Trois scopes OAuth sont requis à l'installation : commands (pour que la commande slash puisse être invoquée), chat:write (pour qu'Elido puisse poster des messages de suivi avec des boutons de copie) et incoming-webhook (pour que les alertes arrivent dans un canal choisi par l'installateur). La référence des Slash Commands de Slack liste l'ensemble complet, mais ces trois couvrent tout ce qu'Elido fait. Les domaines personnalisés sont pris en compte : si votre espace de travail a go.acme.com configuré via les domaines personnalisés, /shorten crée des shortlinks sur cet hôte.

Schéma en trois étapes de la commande slash /shorten d'Elido : l'utilisateur tape la commande, Slack envoie une requête signée à api.elido.app, Elido répond avec un message éphémère contenant le lien court en 200ms p95.

Une note sur les budgets de latence. Slack donne aux commandes slash 3000ms de temps réel pour répondre. Elido répond en 180-220ms p95 sur les POPs edge de l'UE et des États-Unis parce que le gestionnaire de commande slash utilise le même cache de chemin rapide que le redirect edge. Si votre équipe est en APAC et que vous observez plus de 350ms, vérifiez le routage régional des POPs dans /docs/guides/observability.

Alertes de canal pilotées par des déclencheurs d'événements

L'autre moitié de l'app Slack est le routage des alertes. Vous choisissez un type d'événement, vous choisissez un canal, vous êtes notifié. Les quatre types d'événements disponibles aujourd'hui :

  • broken-link : la cible a renvoyé 4xx ou 5xx lors du dernier crawl du scanner de liens
  • click-threshold : les clics ont franchi un seuil enregistré (par défaut : 100 sur une fenêtre glissante de 5 minutes)
  • scan-failure : le scanner d'URL a signalé la cible comme phishing, malware ou figurant sur une liste de blocage publique
  • new-conversion : une conversion suivie a été déclenchée (requiert le suivi des conversions)

Le payload d'alerte qu'Elido transmet à Slack utilise Block Kit, car le texte brut dans un canal actif passe inaperçu. Voici à quoi ressemble une alerte click-threshold sur le fil lorsqu'Elido fait un POST à l'URL d'incoming-webhook de 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"
        }
      ]
    }
  ]
}

Une alerte scan-failure est similaire mais utilise :rotating_light: et inclut la catégorie de menace du scanner : phishing, malware, spam ou blocklist. Une alerte broken-link inclut le code de statut HTTP et l'horodatage du dernier état fonctionnel connu, ce qui est la première question que pose la personne d'astreinte.

Matrice de routage des alertes : les lignes montrent les types d'événements broken-link, click-threshold, scan-failure, new-conversion ; les colonnes montrent le canal Slack cible, l'emoji, la cible de ping, la couleur de sévérité.

Le routage est par espace de travail et par événement. Une configuration typique pour une équipe de croissance de 30 personnes :

ÉvénementCanalEmojiPings
broken-link#ops-alerts:rotating_light:@oncall
click-threshold#growth:chart_with_upwards_trend:(aucun)
scan-failure#security:rotating_light:@sec-oncall
new-conversion#wins:tada:(aucun)

Vous configurez cela dans le panneau de paramètres de l'intégration Slack. Chaque route est une ligne dans Postgres - pas de YAML, pas de fichier de configuration JSON, pas de redéploiement. Le même moteur de routage alimente les intégrations Linear et Pipedrive, donc le modèle mental se transpose si vous utilisez les deux.

Si vous voulez que les alertes atteignent plusieurs destinations, mirrorez le même événement vers un abonnement webhook générique et routez le JSON où vous en avez besoin. Ce modèle est documenté dans automatisation du raccourcisseur d'URL avec Zapier pour les utilisateurs sans code.

Vérification HMAC et le piège de la réinstallation

Slack signe chaque requête entrante vers votre endpoint de commande slash. La signature est un HMAC SHA256 sur une chaîne que Slack construit à partir de la version, l'horodatage et le corps brut de la requête. La procédure se trouve dans le guide de vérification des requêtes de Slack. Le vérificateur d'Elido ressemble à peu près à ceci en Go :

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
}

Trois choses tournent mal ici, dans l'ordre de leur fréquence :

1. Le corps est parsé avant la signature. Si votre framework HTTP appelle r.ParseForm() avant que vous lisiez le corps brut, le corps disparaît et la signature ne correspondra jamais. Lisez r.Body d'abord, puis parsez. Le gestionnaire de commande slash d'Elido lit le corps dans un buffer et le reparsé, ce qui coûte une allocation mémoire et économise une semaine de débogage.

2. Dérive d'horloge du timestamp. La fenêtre de replay recommandée par Slack est de 5 minutes. Si l'horloge de votre serveur dérive de plus (fréquent sur bare-metal sans chrony), chaque requête signée ressemble à un replay. Exécutez chronyc tracking sur la machine et confirmez Leap status: Normal.

3. Réinstallation avec signing secret tourné. C'est celui qui vous réveille la nuit. Si vous faites tourner le signing secret dans le tableau de bord de l'app Slack (Basic Information > Signing Secret > Regenerate), toutes les installations OAuth existantes dans tous les espaces de travail commencent immédiatement à échouer à la vérification de signature. L'administrateur de l'espace de travail doit réinstaller l'app pour obtenir un nouveau handshake. Il n'y a pas de rotation silencieuse - Slack ne propage pas le nouveau secret aux installations existantes.

Le rayon d'explosion dépend de votre modèle de distribution. Si votre app Slack est mono-espace de travail (l'app interne de votre entreprise), la rotation est une réinstallation de 90 secondes par un seul administrateur. Si votre app est dans le répertoire public Slack et que 4000 espaces de travail l'ont installée, vous venez de les bloquer tous. Choisissez les fenêtres de rotation en conséquence et annoncez-les dans le changelog au moins 48 heures à l'avance.

Un mode d'échec connexe : installer la même app Slack dans un espace de travail différent en utilisant la même session navigateur. Slack renvoie parfois un token lié à la mauvaise équipe si les cookies sont persistants. La solution est une fenêtre privée ou ?ignore_session=1 dans l'URL d'installation. Le flux d'installation d'Elido sur /dashboard/integrations/slack passe déjà ce flag car nous avons été piégés lors de la Beta initiale.

Quand le bot Slack n'est pas la bonne réponse

Slack est excellent pour les alertes nécessitant une intervention humaine. C'est la mauvaise destination pour les événements programmatiques à fort volume. Si vous générez plus de ~20 événements par minute, Slack limite l'endpoint d'incoming-webhook à environ 1 message par seconde par canal, et vous perdrez des alertes. Routez-les vers une métrique Datadog ou un consommateur webhook brut, et ne transmettez à Slack que le résumé du franchissement de seuil.

L'autre cas où Slack n'est pas adapté : les pistes d'audit de conformité. Les messages Slack sont mutables (vous pouvez les éditer et les supprimer) et la politique de rétention est contrôlée par l'espace de travail. Si votre auditeur a besoin d'un journal immuable de qui a raccourci quel lien et quand, poussez les événements de commande slash dans votre entrepôt de données via l'export ClickHouse et traitez Slack uniquement comme une couche de notification.

Pour les équipes de croissance qui routent les alertes de clics de campagne, le bot Slack couvre 95% de ce que les gens demandent sur /solutions/marketers. Pour les équipes de plateforme utilisant notre API + SDKs, c'est l'une des plusieurs sorties vers lesquelles vous pouvez fan-out.

Tarifs et limites

L'intégration Slack est disponible sur tous les plans, y compris le niveau gratuit. Il n'y a pas de facturation par message - la limite porte sur les shortlinks et les clics eux-mêmes, que vous pouvez consulter sur la page de tarification. Chaque espace de travail peut configurer jusqu'à 32 règles de routage (combinaisons type d'événement x canal), ce qui dépasse ce que n'importe quelle équipe à qui j'ai parlé a réellement utilisé.

Les installations Elido auto-hébergées fonctionnent également. Vous pointez l'URL de requête de l'app Slack vers votre propre domaine, définissez le signing secret dans l'environnement api-core, et le reste est identique. Les docs self-host couvrent les variables d'environnement ; le guide d'observabilité couvre les noms de métriques pour que vous puissiez tracer la latence des commandes slash et le taux de succès de livraison des alertes dans Grafana ou Datadog.

Que faire ensuite

Si vous utilisez déjà Elido, ouvrez /dashboard/integrations/slack, cliquez sur Connecter, choisissez un canal par défaut pour chaque type d'événement, et c'est parti. L'installation prend vraiment 90 secondes. Si vous évaluez la solution, le catalogue d'intégrations liste chaque connecteur et le tier sur lequel il est disponible, et la comparaison avec Bitly montre comment la surface Slack se mesure aux acteurs établis (spoiler : Bitly ne propose pas de commande slash).

Si vous construisez votre propre bot, copiez le modèle HMAC ci-dessus et respectez le temps de reloj de 3000ms. L'UX des commandes slash de Slack pénalise tout ce qui est lent, et un bot qui se sent rapide est la moitié de la raison pour laquelle les gens en installent un.

Questions fréquentes

Comment installer le bot raccourcisseur d'URL Elido pour Slack ?

Ouvrez /dashboard/integrations/slack dans Elido et cliquez sur Connecter. Vous serez redirigé vers l'écran OAuth de Slack, choisissez l'espace de travail, approuvez les scopes (commands, chat:write, incoming-webhook) et vous serez de retour dans Elido en environ 90 secondes. L'installation écrit une ligne de token indexée par team_id, de sorte que chaque espace de travail dispose de ses propres identifiants.

Est-ce que /shorten fonctionne dans les canaux privés et les DM ?

Oui. Les commandes slash s'exécutent dans le canal où l'utilisateur les tape, y compris les canaux privés et les DM, car Slack transmet le channel_id dans le payload signé. Elido répond avec un message éphémère visible uniquement par l'expéditeur, ce qui évite de polluer le canal pour un raccourcissement ponctuel.

Comment les payloads d'alerte Slack sont-ils signés ?

Les alertes sortantes d'Elido vers Slack utilisent l'URL d'incoming-webhook de Slack, qui est elle-même un secret de type bearer lié à un canal. Les commandes slash entrantes de Slack vers Elido sont vérifiées par HMAC SHA256 sur le corps brut de la requête et l'en-tête X-Slack-Request-Timestamp, conformément au mécanisme de signing-secret de Slack.

Que se passe-t-il avec le bot Slack si je réinstalle l'app OAuth ?

Réinstaller génère un nouveau token de bot et invalide l'ancien. Le signing secret ne tourne que si vous le régénérez dans le tableau de bord de l'app Slack ; dans ce cas, chaque espace de travail utilisant votre distribution doit réinstaller. Planifiez les rotations pendant les fenêtres de faible trafic et annoncez-les dans #ops.

Quels types d'alerte puis-je router vers des canaux Slack ?

Quatre types d'événements sont disponibles aujourd'hui : broken-link (4xx ou 5xx détecté sur la cible du shortlink), click-threshold (un seuil enregistré a été franchi sur une fenêtre de 5 minutes), scan-failure (le scanner d'URL a signalé la cible comme phishing ou malware) et new-conversion (une conversion suivie a été déclenchée). Chaque alerte peut cibler un canal différent.

Essayer Elido

Collez une URL, obtenez un lien court

Sans inscription. Lien actif 30 jours. Inscrivez-vous pour le garder pour toujours.

Gratuit, sans inscription · 2 par jour

Essayer Elido

Raccourcisseur d'URL hébergé en UE : domaines personnalisés, analyses approfondies et API ouverte. Forfait gratuit - sans carte bancaire.

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

Lire la suite