7 Min. LesezeitIntegrationen

Slack URL-Shortener-Bot: Links kürzen und Alerts routen

Installiere die Elido Slack-App, nutze den /shorten-Slash-Command und leite Schwellenwert-Alerts ohne eigene Webhook-Handler in beliebige Channels.

Marius Voß
DevRel · edge infra
Diagramm des Slack URL-Shortener-Bots: Slash-Command links, Elido-Edge in der Mitte, Channel-Alert-Nachrichten rechts mit Schweregrad-Badges.

Slack hat ohnehin schon die Chat-Oberfläche deines Teams übernommen - da kann er auch gleich deine Links kürzen. Die Elido Slack-App macht zwei Dinge: Sie gibt jedem Mitglied einen /shorten-Slash-Command, und sie leitet Link-Event-Alerts in selbst gewählte Channels. Die Installation dauert etwa 90 Sekunden. Kein Webhook-Handler-Code, kein Bolt SDK, kein ngrok-Tunnel.

Dieser Beitrag erklärt die drei Bestandteile: den Slash-Command-Pfad, die Alert-Routing-Matrix und den HMAC-Signatur-Mechanismus, der verhindert, dass beliebige POST-Requests Slack vortäuschen. Wenn du die übergeordnete Webhook-Oberfläche verstehen möchtest, die diese Alerts antreibt, dokumentiert der Beitrag Webhooks für Link-Events jeden Payload, den Elido aussendet. Die Slack-App ist eine der vorgefertigten Integrationen, die diese Events für dich verarbeitet.

Der /shorten Slash-Command

Ein Nutzer tippt das in einen beliebigen Channel:

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

Slack sendet einen signierten POST an https://api.elido.app/integrations/slack/commands. Der Body ist application/x-www-form-urlencoded (Slack verwendet für Slash-Commands noch immer Form-Encoding, kein JSON - das überrascht jeden beim ersten Mal). Die relevanten Felder:

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 sucht die OAuth-Zeile anhand der team_id, findet die Workspace-ID, gegen die installiert wurde, erstellt einen Shortlink in der Standard-Domain des Workspaces und antwortet mit einer ephemeren Nachricht in unter 200ms am p95. Die Antwort ist standardmäßig ephemer, damit der Channel nicht jedes Mal zugespammt wird, wenn jemand während eines Meetings eine URL kürzt.

Wenn der Aufrufer eine öffentliche Nachricht möchte, übergibt er --public als letztes Token:

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

Bei der Installation sind drei OAuth-Scopes erforderlich: commands (damit der Slash-Command aufgerufen werden kann), chat:write (damit Elido Follow-up-Nachrichten mit Kopier-Buttons posten kann) und incoming-webhook (damit Alerts in einem vom Installer gewählten Channel landen können). Slacks Slash-Commands-Referenz listet alle Scopes auf, aber diese drei decken alles ab, was Elido macht. Custom Domains werden berücksichtigt: Wenn dein Workspace go.acme.com über Custom Domains eingerichtet hat, erstellt /shorten Shortlinks auf diesem Host.

Drei-Stufen-Diagramm des Elido /shorten Slash-Commands: Nutzer tippt den Command, Slack sendet eine signierte Anfrage an api.elido.app, Elido antwortet mit einer ephemeren Nachricht mit dem Shortlink in 200ms p95.

Ein Hinweis zu Latenz-Budgets. Slack gibt Slash-Commands 3000ms Wanduhrzeit zur Antwort. Elido antwortet in 180-220ms p95 über EU- und US-Edge-POPs, weil der Slash-Command-Handler denselben Hot-Path-Cache nutzt wie der Edge-Redirect. Wenn dein Team in APAC ist und mehr als 350ms beobachtet, überprüfe das regionale POP-Routing unter /docs/guides/observability.

Channel-Alerts durch Event-Trigger

Die andere Hälfte der Slack-App ist Alert-Routing. Du wählst einen Event-Typ, wählst einen Channel und wirst benachrichtigt. Die vier heutigen Event-Typen:

  • broken-link: Ziel hat beim letzten Crawl des Link-Scanners 4xx oder 5xx zurückgegeben
  • click-threshold: Klicks haben einen gespeicherten Schwellenwert überschritten (Standard: 100 in einem rollierenden 5-Minuten-Fenster)
  • scan-failure: Der URL-Scanner hat das Ziel als Phishing, Malware oder in einer öffentlichen Blocklist markiert
  • new-conversion: Ein getracktes Conversion-Event wurde ausgelöst (erfordert Conversion-Tracking)

Der Alert-Payload, den Elido an Slack weiterleitet, verwendet Block Kit, weil Klartext in einem belebten Channel ignoriert wird. So sieht ein click-threshold-Alert auf der Leitung aus, wenn Elido an die Slack-Incoming-Webhook-URL postet:

{
  "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"
        }
      ]
    }
  ]
}

Ein scan-failure-Alert sieht ähnlich aus, verwendet aber :rotating_light: und enthält die Bedrohungskategorie des Scanners: phishing, malware, spam oder blocklist. Ein broken-link-Alert enthält den HTTP-Statuscode und den Zeitstempel des letzten erfolgreichen Abrufs - genau die Frage, die der Bereitschaftsdienst als erstes stellt.

Alert-Routing-Matrix: Zeilen zeigen Event-Typen broken-link, click-threshold, scan-failure, new-conversion; Spalten zeigen Ziel-Slack-Channel, Emoji, Ping-Ziel, Schweregrad-Farbe.

Routing ist pro Workspace und pro Event. Eine typische Konfiguration für ein 30-köpfiges Growth-Team:

EventChannelEmojiPings
broken-link#ops-alerts:rotating_light:@oncall
click-threshold#growth:chart_with_upwards_trend:(keine)
scan-failure#security:rotating_light:@sec-oncall
new-conversion#wins:tada:(keine)

Du konfigurierst das im Einstellungsbereich der Slack-Integration. Jede Route ist eine Zeile in Postgres - kein YAML, keine JSON-Konfigurationsdatei, kein Redeploy. Dieselbe Routing-Engine treibt die Linear- und Pipedrive-Integrationen an, sodass das mentale Modell übertragbar ist, wenn du beides nutzt.

Wenn Alerts mehrere Ziele erreichen sollen, spiegel dasselbe Event in ein generisches Webhook-Abonnement und leite den JSON dorthin weiter, wo du ihn brauchst. Dieses Muster ist in Zapier URL-Shortener-Automatisierung für die No-Code-Community dokumentiert.

HMAC-Verifizierung und der Reinstall-Fallstrick

Slack signiert jede eingehende Anfrage an deinen Slash-Command-Endpunkt. Die Signatur ist HMAC SHA256 über einen String, den Slack aus Version, Zeitstempel und dem rohen Request-Body konstruiert. Das Verfahren steht in Slacks Guide zur Request-Verifizierung. Elidos Verifier sieht in Go ungefähr so aus:

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
}

Drei Dinge gehen dabei schief, in der Reihenfolge, wie häufig sie auftreten:

1. Body wird vor dem Signieren geparsed. Wenn dein HTTP-Framework r.ParseForm() aufruft, bevor du den rohen Body liest, ist der Body weg und die Signatur wird nie übereinstimmen. Lies zuerst r.Body, dann parse. Elidos Slash-Command-Handler liest den Body in einen Buffer und parst ihn neu - das kostet eine Allokation und spart eine Woche Debugging.

2. Zeitstempel-Uhrabweichung. Slacks empfohlenes Replay-Fenster beträgt 5 Minuten. Wenn deine Serveruhr mehr als das abweicht (häufig auf Bare-Metal ohne chrony), sieht jede signierte Anfrage wie ein Replay aus. Führe chronyc tracking auf dem Server aus und bestätige Leap status: Normal.

3. Neuinstallation mit rotiertem Signing-Secret. Das ist das, was dich aufweckt. Wenn du das Signing-Secret im Slack-App-Dashboard rotierst (Basic Information > Signing Secret > Regenerate), beginnen alle bestehenden OAuth-Installs in allen Workspaces sofort, die Signaturverifizierung zu scheitern. Der Workspace-Admin muss die App neu installieren, um einen frischen Handshake zu erhalten. Es gibt keine stille Rotation - Slack überträgt das neue Secret nicht an bestehende Installs.

Der Blast-Radius hängt von deinem Distributionsmodell ab. Wenn deine Slack-App einen einzigen Workspace bedient (die interne App deines Unternehmens), ist die Rotation eine 90-sekündige Neuinstallation durch einen Admin. Wenn deine App im öffentlichen Slack-Verzeichnis steht und 4000 Workspaces sie installiert haben, hast du gerade alle davon lahmgelegt. Wähle Rotationsfenster entsprechend und kündige sie im Changelog mindestens 48 Stunden im Voraus an.

Ein verwandtes Fehlerbild: Die gleiche Slack-App in einen anderen Workspace installieren, während man dieselbe Browser-Sitzung verwendet. Slack gibt manchmal einen Token zurück, der an das falsche Team gebunden ist, wenn Cookies hartnäckig sind. Die Lösung ist ein privates Fenster oder ?ignore_session=1 in der Install-URL. Elidos Install-Flow unter /dashboard/integrations/slack übergibt dieses Flag bereits, weil wir in der frühen Beta damit auf die Nase gefallen sind.

Wann der Slack-Bot die falsche Antwort ist

Slack ist hervorragend für menschlich begleitete Alerts. Es ist das falsche Ziel für hochvolumige programmatische Events. Wenn du mehr als ca. 20 Events pro Minute erzeugst, limitiert Slack den Incoming-Webhook-Endpunkt auf ungefähr 1 Nachricht pro Sekunde pro Channel, und du verlierst Alerts. Leite diese stattdessen an eine Datadog-Metrik oder einen rohen Webhook-Consumer weiter und schicke nur die Zusammenfassung der Schwellenwertüberschreitung an Slack.

Der andere Fall, in dem Slack falsch ist: Compliance-Audit-Trails. Slack-Nachrichten sind veränderbar (du kannst sie bearbeiten und löschen) und die Aufbewahrungsrichtlinie ist workspace-gesteuert. Wenn dein Auditor ein unveränderliches Protokoll benötigt, wer wann welchen Link gekürzt hat, schreibe die Slash-Command-Events über den ClickHouse-Export in dein Warehouse und behandle Slack nur als Benachrichtigungsebene.

Für Growth-Teams, die Campaign-Click-Alerts routen, deckt der Slack-Bot 95% dessen ab, was Menschen in /solutions/marketers anfragen. Für Plattform-Teams, die unsere API + SDKs nutzen, ist er einer von mehreren Ausgängen, an die du fächern kannst.

Preise und Limits

Die Slack-Integration ist in jedem Plan verfügbar, einschließlich des kostenlosen Tiers. Es gibt keine Gebühr pro Nachricht - das Limit liegt bei Shortlinks und Klicks selbst, was du auf der Preisseite einsehen kannst. Jeder Workspace kann bis zu 32 Routing-Regeln einrichten (Kombinationen aus Event-Typ und Channel) - mehr als jedes Team, mit dem ich gesprochen habe, tatsächlich genutzt hat.

Selbst gehostete Elido-Installs funktionieren ebenfalls. Du zeigst die Request-URL der Slack-App auf deine eigene Domain, setzt das Signing-Secret in der api-core-Umgebung, und der Rest ist identisch. Die Self-Host-Docs decken die Umgebungsvariablen ab; der Observability-Guide deckt die Metriknamen ab, damit du die Slash-Command-Latenz und die Alert-Delivery-Erfolgsrate in Grafana oder Datadog darstellen kannst.

Was als nächstes zu tun ist

Wenn du Elido bereits verwendest, öffne /dashboard/integrations/slack, klicke auf Verbinden, wähle einen Standard-Channel für jeden Event-Typ und leg los. Die Installation dauert wirklich 90 Sekunden. Wenn du evaluierst, listet der Integrationskatalog jeden Connector und das Tier, in dem er verfügbar ist, und der vs. Bitly-Vergleich zeigt, wie die Slack-Oberfläche im Vergleich zu bestehenden Anbietern abschneidet (Spoiler: Bitly hat keinen Slash-Command).

Wenn du deinen eigenen Bot baust, kopiere das HMAC-Muster oben und respektiere die 3000ms-Wanduhrzeit. Slacks Slash-Command-UX bestraft alles Langsame, und ein schnell wirkender Bot ist die Hälfte des Grundes, warum Menschen einen installieren.

Häufig gestellte Fragen

Wie installiere ich den Elido Slack URL-Shortener-Bot?

Öffne /dashboard/integrations/slack in Elido und klicke auf Verbinden. Du wirst zum OAuth-Bildschirm von Slack weitergeleitet, wählst den Workspace, bestätigst die Scopes (commands, chat:write, incoming-webhook) - und bist nach etwa 90 Sekunden wieder in Elido. Die Installation schreibt eine Token-Zeile, die an die team_id gebunden ist, sodass jeder Workspace eigene Zugangsdaten erhält.

Funktioniert /shorten auch in privaten Channels und DMs?

Ja. Slash-Commands laufen in dem Channel, in dem der Nutzer sie eingibt - auch in privaten Channels und DMs, weil Slack die channel_id im signierten Payload übergibt. Elido antwortet mit einer ephemeren Nachricht, die nur für den Aufrufer sichtbar ist, damit der Channel bei einmaligen Kürzungen ruhig bleibt.

Wie werden Slack-Alert-Payloads signiert?

Ausgehende Alerts von Elido an Slack verwenden Slacks Incoming-Webhook-URL, die selbst ein Bearer-ähnliches Secret ist, das an einen Channel gebunden ist. Eingehende Slash-Commands von Slack an Elido werden per HMAC SHA256 über den rohen Request-Body und den X-Slack-Request-Timestamp-Header verifiziert, gemäß Slacks Signing-Secret-Verfahren.

Was passiert mit dem Slack-Bot, wenn ich die OAuth-App neu installiere?

Eine Neuinstallation erzeugt einen neuen Bot-Token und macht den alten ungültig. Das Signing-Secret rotiert nur, wenn du es im Slack-App-Dashboard neu generierst - in diesem Fall müssen alle Workspaces, die deine Distribution verwenden, die App neu installieren. Plane Rotationen in Zeiten mit geringem Traffic und kündige sie in #ops an.

Welche Alert-Typen kann ich in Slack-Channels routen?

Heute werden vier Event-Typen ausgeliefert: broken-link (4xx oder 5xx am Shortlink-Ziel erkannt), click-threshold (ein gespeicherter Schwellenwert wurde in einem 5-Minuten-Fenster überschritten), scan-failure (URL-Scanner hat Ziel als Phishing oder Malware markiert) und new-conversion (ein getracktes Conversion-Event wurde ausgelöst). Jeder Alert kann einen anderen Channel als Ziel haben.

Elido testen

URL einfügen, kurzer Link in Sekunden

Kein Konto nötig. Link bleibt 30 Tage aktiv. Konto erstellen, um ihn dauerhaft zu behalten.

Kostenlos, keine Anmeldung erforderlich · 2 pro Tag

Elido testen

URL-Shortener mit EU-Hosting: eigene Domains, tiefe Analytik und eine offene API. Kostenloser Tarif - keine Kreditkarte nötig.

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

Weiterlesen