7 min czytaniaIntegracje

Bot do skracania URL w Slacku: skracaj linki i kieruj alerty

Zainstaluj aplikację Elido dla Slacka, użyj polecenia slash /shorten i kieruj alerty progowe do dowolnego kanału bez pisania handlerów webhook.

Marius Voß
DevRel · edge infra
Diagram bota do skracania URL w Slacku: polecenie slash po lewej, edge Elido pośrodku, komunikaty alertów kanału po prawej stronie z oznaczeniami poziomu ważności.

Slack i tak zajął już całą powierzchnię czatu Twojego zespołu - równie dobrze może też skracać linki. Aplikacja Elido dla Slacka robi dwie rzeczy: daje każdemu członkowi polecenie slash /shorten oraz kieruje alerty zdarzeń dotyczących linków do wybranych przez Ciebie kanałów. Instalacja zajmuje około 90 sekund. Żadnego kodu handlera webhook, żadnego Bolt SDK, żadnego tunelu ngrok.

Ten artykuł omawia trzy elementy: ścieżkę polecenia slash, macierz routingu alertów i mechanizm podpisu HMAC, który uniemożliwia losowym żądaniom POST podszywanie się pod Slacka. Jeśli chcesz poznać szerszą powierzchnię webhooków zasilającą te alerty, artykuł webhooki dla zdarzeń linków dokumentuje każdy payload, jaki Elido wysyła. Aplikacja Slacka jest jedną z gotowych integracji, która przetwarza te zdarzenia za Ciebie.

Polecenie slash /shorten

Użytkownik wpisuje to w dowolnym kanale:

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

Slack wysyła podpisany POST na https://api.elido.app/integrations/slack/commands. Ciało żądania ma format application/x-www-form-urlencoded (Slack nadal używa kodowania formularza dla poleceń slash, a nie JSON - co zaskakuje każdego za pierwszym razem). Istotne pola to:

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 wyszukuje wiersz OAuth po team_id, odnajduje ID przestrzeni roboczej, dla której został zainstalowany, tworzy shortlink w domyślnej domenie tej przestrzeni i zwraca efemeryczną wiadomość w czasie poniżej 200ms przy p95. Odpowiedź jest domyślnie efemeryczna, żeby kanał nie był zasypywany spamem za każdym razem, gdy ktoś skraca URL podczas spotkania.

Jeśli wywołujący chce publicznej wiadomości, przekazuje --public jako ostatni token:

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

Podczas instalacji wymagane są trzy uprawnienia OAuth: commands (aby można było wywołać polecenie slash), chat:write (aby Elido mógł publikować dalsze wiadomości z przyciskami kopiowania) i incoming-webhook (aby alerty mogły trafiać do kanału wybranego przez instalatora). Referencja poleceń slash Slacka zawiera pełną listę, ale te trzy pokrywają wszystko, co robi Elido. Domeny niestandardowe są honorowane: jeśli Twoja przestrzeń robocza ma skonfigurowaną domenę go.acme.com przez domeny niestandardowe, /shorten tworzy shortlinki na tym hoście.

Trzystopniowy diagram polecenia slash /shorten Elido: użytkownik wpisuje polecenie, Slack wysyła podpisane żądanie do api.elido.app, Elido odpowiada efemeryczną wiadomością ze shortlinkiem w czasie 200ms p95.

Uwaga na temat budżetów czasu. Slack daje poleceniom slash 3000ms czasu rzeczywistego na odpowiedź. Elido odpowiada w 180-220ms p95 na europejskich i amerykańskich POPach edge, ponieważ handler polecenia slash korzysta z tego samego szybkiego cache co przekierowanie edge. Jeśli Twój zespół jest w regionie APAC i obserwujesz wartości powyżej 350ms, sprawdź routing regionalnych POPów w /docs/guides/observability.

Alerty kanałów napędzane przez wyzwalacze zdarzeń

Druga połowa aplikacji Slacka to routing alertów. Wybierasz typ zdarzenia, wybierasz kanał i dostajesz powiadomienie. Cztery dostępne dziś typy zdarzeń:

  • broken-link: cel zwrócił 4xx lub 5xx przy ostatnim przeszukaniu przez skaner linków
  • click-threshold: kliknięcia przekroczyły zapisany próg (domyślnie: 100 w ruchomym oknie 5 minut)
  • scan-failure: skaner URL oznaczył cel jako phishing, malware lub zawarty na publicznej liście blokowania
  • new-conversion: uruchomiła się śledzona konwersja (wymaga śledzenia konwersji)

Payload alertu, który Elido przesyła do Slacka, używa Block Kit, ponieważ zwykły tekst w ruchliwym kanale jest ignorowany. Tak wygląda alert click-threshold w transmisji, gdy Elido wysyła POST na URL incoming-webhook Slacka:

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

Alert scan-failure wygląda podobnie, ale używa :rotating_light: i zawiera kategorię zagrożenia ze skanera: phishing, malware, spam lub blocklist. Alert broken-link zawiera kod statusu HTTP i znacznik czasu ostatniego poprawnego działania - to pierwsze pytanie, jakie zadaje osoba dyżurna.

Macierz routingu alertów: wiersze pokazują typy zdarzeń broken-link, click-threshold, scan-failure, new-conversion; kolumny pokazują docelowy kanał Slacka, emoji, cel pingu, kolor ważności.

Routing jest per przestrzeń robocza i per zdarzenie. Typowa konfiguracja dla 30-osobowego zespołu growth:

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

Konfiguruje się to w panelu ustawień integracji Slacka. Każda reguła to jeden wiersz w Postgresie - bez YAML, bez pliku JSON, bez ponownego wdrożenia. Ten sam silnik routingu obsługuje integracje Linear i Pipedrive, więc model mentalny przenosi się, jeśli używasz obu.

Jeśli chcesz, żeby alerty trafiały do wielu miejsc docelowych, zdubluj to samo zdarzenie do ogólnej subskrypcji webhook i kieruj JSON tam, gdzie go potrzebujesz. Ten wzorzec jest opisany w automatyzacji skracania URL z Zapierem dla środowiska no-code.

Weryfikacja HMAC i pułapka reinstalacji

Slack podpisuje każde przychodzące żądanie do Twojego endpointu polecenia slash. Podpis to HMAC SHA256 obliczony na ciągu, który Slack konstruuje z wersji, znacznika czasu i surowego ciała żądania. Procedura jest opisana w przewodniku weryfikacji żądań Slacka. Weryfikator Elido w Go wygląda mniej więcej tak:

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
}

Trzy rzeczy idą tu nie tak, w kolejności według częstotliwości:

1. Ciało jest parsowane przed podpisaniem. Jeśli Twój framework HTTP wywoła r.ParseForm() zanim odczytasz surowe ciało, ciało znika i podpis nigdy nie będzie pasował. Najpierw odczytaj r.Body, potem parsuj. Handler polecenia slash Elido odczytuje ciało do bufora i ponownie je parsuje - kosztuje to jedną alokację i oszczędza tydzień debugowania.

2. Przesunięcie zegara znacznika czasu. Zalecane przez Slacka okno powtórzeń to 5 minut. Jeśli zegar Twojego serwera dryfuje o więcej (częste na bare-metal bez chrony), każde podpisane żądanie wygląda jak replay. Uruchom chronyc tracking na serwerze i potwierdź Leap status: Normal.

3. Reinstalacja z zarotowanym signing secretem. To ten, który budzi w nocy. Jeśli zrotujesz signing secret w panelu aplikacji Slacka (Basic Information > Signing Secret > Regenerate), wszystkie istniejące instalacje OAuth we wszystkich przestrzeniach roboczych natychmiast zaczną zawodzić przy weryfikacji podpisu. Administrator przestrzeni roboczej musi ponownie zainstalować aplikację, aby uzyskać nowy handshake. Nie ma cichej rotacji - Slack nie propaguje nowego sekretu do istniejących instalacji.

Zasięg awarii zależy od modelu dystrybucji. Jeśli Twoja aplikacja Slacka obsługuje jedną przestrzeń roboczą (wewnętrzna aplikacja firmy), rotacja to 90-sekundowa reinstalacja przez jednego administratora. Jeśli Twoja aplikacja jest w publicznym katalogu Slacka i zainstalowało ją 4000 przestrzeni roboczych, właśnie je wszystkie zepsułeś. Dobierz okna rotacji odpowiednio i ogłoś je w changelogu co najmniej 48 godzin wcześniej.

Pokrewny tryb awarii: instalowanie tej samej aplikacji Slacka w innej przestrzeni roboczej przy użyciu tej samej sesji przeglądarki. Slack czasami zwraca token powiązany z nieprawidłowym teamem, gdy ciasteczka są trwałe. Rozwiązaniem jest okno prywatne lub ?ignore_session=1 w URL instalacji. Przepływ instalacji Elido pod /dashboard/integrations/slack już przekazuje tę flagę, bo natknęliśmy się na ten problem we wczesnej Becie.

Kiedy bot Slacka jest złym wyborem

Slack świetnie sprawdza się przy alertach wymagających interwencji człowieka. Jest złym miejscem docelowym dla zdarzeń programistycznych o dużym wolumenie. Jeśli generujesz ponad ~20 zdarzeń na minutę, Slack ogranicza endpoint incoming-webhook do około 1 wiadomości na sekundę na kanał i będziesz tracić alerty. Kieruj je do metryki Datadog lub surowego konsumenta webhook, a do Slacka przesyłaj tylko podsumowanie przekroczenia progu.

Inny przypadek, gdy Slack jest złym wyborem: ślady audytowe zgodności. Wiadomości Slacka są mutowalne (można je edytować i usuwać), a polityka przechowywania jest kontrolowana przez przestrzeń roboczą. Jeśli Twój audytor potrzebuje niezmiennego dziennika, kto skrócił który link i kiedy, prześlij zdarzenia polecenia slash do swojego magazynu danych przez eksport ClickHouse i traktuj Slacka wyłącznie jako warstwę powiadomień.

Dla zespołów growth kierujących alerty dotyczące kliknięć w kampanie, bot Slacka pokrywa 95% tego, o co ludzie pytają w /solutions/marketers. Dla zespołów platformowych korzystających z naszego API + SDK, jest jednym z kilku wyjść, do których można fanoutować.

Cennik i limity

Integracja ze Slackiem jest dostępna w każdym planie, włącznie z bezpłatnym. Nie ma opłat za wiadomość - limit dotyczy shortlinków i kliknięć, które możesz sprawdzić na stronie cenowej. Każda przestrzeń robocza może skonfigurować do 32 reguł routingu (kombinacje typ zdarzenia x kanał), co więcej niż jakikolwiek team, z którym rozmawiałem, faktycznie wykorzystał.

Działają też samodzielnie hostowane instalacje Elido. Wskazujesz URL żądań aplikacji Slacka na własną domenę, ustawiasz signing secret w środowisku api-core i reszta jest identyczna. Dokumentacja self-host opisuje zmienne środowiskowe; przewodnik po obserwowalności opisuje nazwy metryk, dzięki czemu możesz wykreślić opóźnienie poleceń slash i wskaźnik powodzenia dostarczania alertów w Grafanie lub Datadogu.

Co zrobić dalej

Jeśli już korzystasz z Elido, otwórz /dashboard/integrations/slack, kliknij Połącz, wybierz domyślny kanał dla każdego typu zdarzenia i działaj. Instalacja naprawdę trwa 90 sekund. Jeśli oceniasz rozwiązanie, katalog integracji zawiera listę każdego konektora i plan, w którym jest dostępny, a porównanie z Bitly pokazuje, jak powierzchnia Slacka wypada na tle obecnych graczy (spoiler: Bitly nie ma polecenia slash).

Jeśli budujesz własnego bota, skopiuj powyższy wzorzec HMAC i przestrzegaj limitu 3000ms czasu rzeczywistego. UX poleceń slash Slacka karze wszystko, co jest powolne, a bot, który działa szybko, to połowa powodu, dla którego ludzie go instalują.

Najczęściej zadawane pytania

Jak zainstalować bota Elido do skracania URL w Slacku?

Otwórz /dashboard/integrations/slack w Elido i kliknij Połącz. Zostaniesz przekierowany do ekranu OAuth Slacka - wybierz przestrzeń roboczą, zatwierdź uprawnienia (commands, chat:write, incoming-webhook) i w ciągu około 90 sekund wrócisz do Elido. Instalacja zapisuje wiersz tokenu powiązany z team_id, dzięki czemu każda przestrzeń robocza ma własne dane uwierzytelniające.

Czy /shorten działa w prywatnych kanałach i wiadomościach bezpośrednich?

Tak. Polecenia slash działają w kanale, w którym użytkownik je wpisuje, włącznie z prywatnymi kanałami i wiadomościami bezpośrednimi, ponieważ Slack przekazuje channel_id w podpisanym payloadzie. Elido odpowiada efemeryczną wiadomością widoczną tylko dla wywołującego, co nie zakłóca spokoju kanału przy jednorazowym skracaniu.

Jak są podpisywane payloady alertów Slacka?

Wychodzące alerty z Elido do Slacka używają URL incoming-webhook Slacka, który sam w sobie jest sekretem w stylu bearer powiązanym z jednym kanałem. Przychodzące polecenia slash ze Slacka do Elido są weryfikowane przy użyciu HMAC SHA256 na surowym ciele żądania i nagłówku X-Slack-Request-Timestamp, zgodnie z mechanizmem signing-secret Slacka.

Co stanie się z botem Slacka, jeśli przeinstoluję aplikację OAuth?

Reinstalacja tworzy nowy token bota i unieważnia stary. Signing secret rotuje tylko wtedy, gdy ponownie go wygenerujesz w panelu aplikacji Slacka - w takim przypadku każda przestrzeń robocza używająca Twojej dystrybucji musi przeprowadzić reinstalację. Planuj rotacje w oknach niskiego ruchu i ogłaszaj je w #ops.

Jakie typy alertów mogę kierować do kanałów Slacka?

Dziś dostępne są cztery typy zdarzeń: broken-link (wykryto 4xx lub 5xx na docelowym shortlinku), click-threshold (zapisany próg został przekroczony w oknie 5 minut), scan-failure (skaner URL oznaczył cel jako phishing lub malware) i new-conversion (uruchomiła się śledzona konwersja). Każdy alert może być kierowany do innego kanału.

Wypróbuj Elido

Wklej URL, otrzymaj krótki link

Bez rejestracji. Link działa 30 dni. Zarejestruj się, aby zachować go na zawsze.

Za darmo, bez rejestracji · 2 dziennie

Wypróbuj Elido

Skracarka URL hostowana w UE: własne domeny, głęboka analityka i otwarte API. Darmowy plan - bez karty kredytowej.

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

Czytaj dalej