7 min czytaniaIntegracje

Integracja Linear ze skracaczem URL - automatyczne tworzenie zgloszen przy alertach

Podlacz wykrywanie uszkodzonych linkow Elido i skoki progu klikan do zespolu Linear. Konfiguracja, filtr zespolu, routing etykiet i rzeczywiste tryby awarii.

Marius Voß
DevRel · edge infra
Potok od wykrycia do zgloszenia pokazujacy integracje skracania URL Linear tworzaca issue ze zdarzenia uszkodzonego linku

Linear przeszedl do statusu Live w katalogu integracji Elido 22-05-2026. Pierwszym zdarzeniem, ktore wyslalismy, byl broken_link_hook - gdy nasz skaner znajdzie martwy krotki link, tworzy zgloszenie Linear w zespole wybranym podczas laczenia, z metryki klikan w tresci i etykietami kierowanymi wedlug tagu. Ten wpis to techniczny przewodnik inzyniera: jak dziala uwierzytelnianie, jak wyglada payload JSON i jak rozszerzyliSmy ten sam potok na skoki progu klikan, tak aby osluga awaryjna otrzymala zgloszenie zamiast powiadomienia o 3 w nocy.

Jesli utrzymujesz setki lub tysace krotkich linkow w produkcji, znasz juz ten tryb awarii. Marketing zmienia cel kampanii, nowy URL zwraca 404 i nikt tego nie zauwaZa, dopoki klient nie opublikuje zrzutu ekranu martwego linku na Bluesky. Linear to miejsce, gdzie Twoj zespol juz triaZuje bledy, wiec tam wlasnie trafia zgloszenie.

Laczenie Linear za pomoca Personal API Key

Integracja Linear uzywa Personal API Key, nie OAuth. Zdecydowalismy sie na to z trzech powodow: API Keys sa ograniczone do obszaru roboczego, lepiej przeZywaja zmiany administratorow niz tokeny OAuth powiazane z jednym uZytkownikiem, a dokumentacja API: Authentication Linear jawnie je zaleca dla zadan serwer-do-serwera.

Wygeneruj klucz w Linear: Ustawienia, API, Personal API keys, Utworz klucz. Nazwij go elido-integration, aby mozna go bylo pozniej odwolac bez zgadywania. Skopiuj klucz (zaczyna sie od lin_api_) i wklej go do karty integracji Linear w panelu Elido.

Co dzieje sie nastepnie: wyslemy zapytanie viewer, aby zweryfikowac klucz, nastepnie zapytanie teams, aby wypelnic selektor zespolu. Wybierasz domyslny zespol. Ten wybor zapisuje wiersz w integration_configs w Postgresie, w tym team ID przypisany przez Linear. Jesli masz wiele zespolow, mozesz dodac routing oparty na tagach na tym samym ekranie - wiecej o tym ponizej.

POST /v1/workspaces/:id/integrations/linear/connect
{
  "api_key": "lin_api_<redacted>",
  "default_team_id": "TEAM_a1b2c3",
  "default_priority": 2,
  "labels": ["short-link", "auto-filed"]
}

Za kulisami usluga api-core przechowuje klucz zaszyfrowany w spoczynku za pomoca schematu szyfrowania kopertowego z ADR-0036. Odszyfrowany klucz zYje w pamieci tylko podczas rzeczywistego wywolania GraphQL. Nigdy nie logujemy surowej wartosci, a interfejs logow integracji wyswietla tylko ostatnie 4 znaki.

Uwaga: Personal API Keys Linear sa powiazane z uZytkownikiem, ktory je utworzyl. Jesli ten uZytkownik odejdzie z firmy i usunieSz jego konto Linear, klucz umiera razem z nim. Najlepsza praktyka jest utworzenie w Linear uZytkownika typu serwisowego (uzywamy [email protected]) i wygenerowanie klucza z tego konta.

Schemat url-scannera wykrywajacego uszkodzony cel przekierowania i wysylajacego zdarzenie broken_link_hook do Issues API Linear

Nasza usluga url-scanner przeprowadza co tydzien przeszukiwanie wszystkich aktywnych krotkich linkow w Twoim obszarze roboczym. Dla kazdego linku wykonuje HEAD HTTP na miejscu docelowym, a nastepnie GET, jesli HEAD nie jest obslugiwany, i weryfikuje lancuch TLS. Cztery warunki wyzwalaja stan uszkodzonego linku:

  1. HTTP 4xx lub 5xx przez dwa kolejne sondy (podwojne sprawdzenie w celu wchlonienia przejsciowych bledow 500)
  2. TLS wygasl lub jest podpisany samodzielnie tam, gdzie byl wazny tydzien wczesniej
  3. DNS NXDOMAIN - host docelowy nie rozwiazuje sie juz
  4. Dopasowanie odcisku palca zaparkowanej domeny - miejsce docelowe rozwiazuje sie, ale tresc odpowiedzi pasuje do znanegoSzablonu squattera (utrzymujemy maly zestaw odciskow palcow)

Gdy ktorys z tych czterech warunkow sie pojawi, skaner publikuje zdarzenie link.broken do Redpanda. Webhook-dispatcher konsumuje je, wyszukuje Twoje aktywne integracje i dla Linear materializuje ponizszy payload.

Oto prawdziwy payload broken_link_hook przechwycony z naszego srodowiska stagingowego (niektorych pol brakuje):

{
  "event": "link.broken",
  "link_id": "01J9V7QXMZ8K2Y3N4P5R6T7W8Z",
  "short_url": "https://s.elido.me/spring-launch",
  "destination_url": "https://oldcampaign.example.com/landing",
  "failure_type": "http_5xx",
  "failure_detail": "502 Bad Gateway, 2 consecutive probes",
  "last_working_at": "2026-05-28T14:22:00Z",
  "detected_at": "2026-06-04T03:11:42Z",
  "clicks_last_7d": 2841,
  "clicks_last_24h": 412,
  "top_referrers": [
    { "host": "linkedin.com", "clicks": 1203 },
    { "host": "twitter.com", "clicks": 488 },
    { "host": "direct", "clicks": 612 }
  ],
  "tags": ["campaign-spring-2026", "paid"],
  "owner_email": "[email protected]"
}

Adapter Linear w services/api-core/internal/integrations/linear/broken_link_hook.go przyjmuje ten payload i buduje mutacje GraphQL na Issues API Linear. Tytul zgloszenia podaza stalym wzorcem, aby dyZurni mogli go znalezc za pomoca grep:

[Elido] Broken link: /spring-launch (502 Bad Gateway)

Tresc jest ustrukturyzowanym Markdown z piecoma sekcjami: szczegoly linku, ostatni dzialajacy znacznik czasu, delta klikan w stosunku do 7-dniowej wartosci bazowej, trzej glowni referrerzy i blok sugerowanej poprawki. Blok sugerowanej poprawki sprawdza failure_type i wybiera szsblonowa sugestie - dla http_5xx: "Sprawdz, czy miejsce docelowe stosuje ograniczenie szybkosci lub jest w trakcie wdrozenia"; dla parked_domain: "Domena mogla wygas lub zostac zajeta, zarchiwizuj ten link"; i tak dalej.

Etykiety sa przypisywane z dwoch zrodel: Twojego domyslnego zestawu etykiet (skonfigurowanego podczas laczenia) i dynamicznych etykiet wywiedzionych z listy tagow. Jesli tag pasuje do paid lub organic, dodajemy go jako etykiete, aby PM-y mogly filtrowac swoje widoki Linear.

Deduplikacja, limity szybkosci i kolejka dead-letter

Deduplikujemy zdarzenia broken_link_hook wedlug hosta docelowego przez 24 godziny. Jesli oldcampaign.example.com padl i 800 krotkich linkow wskazuje na niego, otrzymujesz jedno zgloszenie Linear ze wszystkimi 800 krotki mi adresami URL wymienionymi w tresci, a nie 800 oddzielnych zgloszen. Byl to trudna lekcja z wczesnej bety - pierwszy klient, ktory trafil na martwa domene, zostal zasypany.

Endpoint GraphQL Linear ma globalny limit szybkosci na obszar roboczy. Nasz webhook-dispatcher sledzi naglowek Retry-After i uzywa wykladniczego odstepcze z pelnym jitterem do pieciu prob. Po pieciu zdarzenie trafia do kolejki dead-letter. Wpisy DLQ mozesz zobaczyc w Ustawienia, Integracje, Linear, Nieudane zdarzenia i odtworzyc kazde z nich jednym kliknieciem. DLQ jest rowniez dostepne przez funkcje webhookow do programowego odtwarzania.

Prog klikan i niestandardowe wyzwalacze

Makieta tresci zgloszenia Linear utworzonego przez Elido, pokazujaca wzorzec tytulu, sekcje tresci i routing etykiet

Ten sam adapter Linear przetwarza zdarzenia click_threshold_hook. Definiujesz progi na link lub na kampanie w panelu Elido, a my tworzymy zgloszenie Linear, gdy link przekroczy zakres. Dzisiaj obslugiwane sa dwa typy zakresow:

  • Spike: klikniecia w ostatniej godzinie przekraczaja N-krotna wartosc bazowa godzinowa z ostatnich 7 dni (domyslne N wynosi 3). Przydatne do wykrywania wiral owosci lub, mniej przyjemnie, ruchu botow.
  • Cliff: klikniecia w ostatniej godzinie spadaja ponizej 10% wartosci bazowej. Przydatne do wykrywania martwych kampanii - jesli platna reklama zostala wstrzymana u zrodla, widzisz zgloszenie Linear przed standup em marketingowym.

Oto payload click_threshold_hook:

{
  "event": "link.click_threshold",
  "link_id": "01J9V7QXMZ8K2Y3N4P5R6T7W8Z",
  "short_url": "https://s.elido.me/spring-launch",
  "band": "spike",
  "current_hour_clicks": 8421,
  "baseline_hourly_clicks": 612,
  "multiplier": 13.76,
  "top_referrers": [
    { "host": "news.ycombinator.com", "clicks": 6203 },
    { "host": "direct", "clicks": 1488 }
  ],
  "tags": ["campaign-spring-2026"],
  "triggered_at": "2026-06-04T11:14:00Z"
}

W przypadku skoku blok sugerowanej poprawki mowi: "Sprawdz, czy to ruch organiczny, nie kampania spoofingu referrerow. Sprawd z podzial referrerow powyzej." W przypadku klifu: "Potwierdz, ze kampania jest nadal aktywna u zrodla. Jesli zostala wstrzymana, zarchiwizuj ten link."

Routing oparty na tagach w wielu zespolach

Domyslny selektor zespolu jest odpowiedni dla obszaru roboczego z 20 osobami. W wiekszych organizacjach chcesz, aby zgloszenie Linear dotyczace linku marketingowego trafialo do zespolu Marketing, a zgloszenie dotyczace linku dokumentacji trafialo do zespolu Documentation. Routing oparty na tagach to realizuje.

Reguly routingu zyja w integration_configs.routing_json i sa oceniane od gory do dolu. Regula wyglada tak:

[
  {
    "tag_glob": "campaign-*",
    "team_id": "TEAM_growth",
    "labels": ["growth", "urgent"]
  },
  { "tag_glob": "docs-*", "team_id": "TEAM_docs", "labels": ["docs"] },
  {
    "tag_glob": "internal-*",
    "team_id": "TEAM_internal",
    "labels": ["internal"]
  },
  { "default": true, "team_id": "TEAM_a1b2c3" }
]

Pierwsza regula, ktorej glob pasuje do co najmniej jednego tagu na linku, wygrywa. Jesli nic nie pasuje, zdarzenie przejmuje regula domyslna. Skladnia glob jest taka sama jak filtry zapisanych widokow Linear, wiec PM-y juz ja znaja.

Mozesz rowniez kierowac na podstawie failure_type. Niektorych zespoly chca, aby wszystkie awarie TLS trafialy do zespolu platformy, poniewaz zazwyczaj wskazuja na bledna konfiguracje certyfikatu w niestandardowej domenie dzierzawcy. Dodaj regule z kluczem failure_type: tls_expired i gotowe.

Niestandardowe wyzwalacze za pomoca webhookow

Nie kazdy zespol chce tworzyc zgloszenia Linear dla kazdego typu zdarzenia, ktory publikujemy. Pelny katalog zdarzen jest udokumentowany na stronie funkcji webhookow, ale typowe polaczenia, ktore zespoly konfiguruja obok Linear, to:

  • link.created do zespolu Linear do audytow nowych linkow (rzadko, zazwyczaj dla zespolow compliance)
  • domain.takeover_detected dla niespodzianek TLS w domenach niestandardowych
  • link.scan_complete dla tygodniowych biletow podsumowujacych (jedno zgloszenie na przebieg skanowania, zawierajace wszystkie oznaczone linki)

Jesli zdarzenia, ktore chcesz, nie ma w katalogu, mozesz zbudowac wlasne za pomoca ogolnego celu webhook i naszego przewodnika po obserwowalnosci. Albo po prostu zloZ prosbe o funkcje na naszej publicznej tablicy Linear - meta, ale rekurencyjne.

Cennik i co otrzymujesz w kazdym planie

Integracja Linear jest dolaczona do warstwy Pro i wyzszych. W wersji Free mozesz polaczyc Linear, ale otrzymujesz tylko broken_link_hook (bez progu klikan ani niestandardowych wyzwalaczy). Pelna macierz znajdziesz na stronie cennika. Jesli jestes wiekszym zespolem myslacym o tym z powodow compliance - powiedzmy, ze RODO Artykul 32 wymaga wykrywania wyciekow danych z uszkodzonych przekierowan wskazujacych na domeny squatterow - strona rozwiazar Enterprise opisuje to, co oferujemy w duzej skali.

Powiazane lektury

Pelny katalog integracji wyswietla 43 dostawcow w czerwcu 2026, z Linear wsrod 20 aktywnych. Jesli Twoj zespol uzywa zamiast tego Jira, ten adapter jest w wersji beta - napisz do nas, a wlaczymy Cie.

Najczęściej zadawane pytania

Jak Elido uwierzytelnia sie w Linear?

Uzywamy Personal API Key z zakresem do obszaru roboczego, nie OAuth. Klucz generujesz w Linear w sekcji Ustawienia, API, a nastepnie wklejasz go do karty integracji Elido. Klucz nigdy nie opuszcza naszego vault i jest maskowany w logach. Jesli go zrotuje, nastepne zdarzenie wyzwoli lagodny monit o ponowne uwierzytelnienie zamiast cichego bledu.

Co dokladnie jest uznawane za uszkodzony link w zdarzeniu broken_link_hook?

Nasz url-scanner przeszukuje co tydzien kazdy aktywny krotki link i oznacza cztery warunki: HTTP 4xx lub 5xx przez dwa kolejne sondy, wygasly lub niemozliwy do zweryfikowania certyfikat TLS, DNS NXDOMAIN oraz znane odciski palcow zaparkowanych domen. Kazdy z tych czterech warunkow tworzy pojedyncze zgloszenie Linear, deduplikowane wedlug hosta docelowego przez 24 godziny, tak aby jedna martwa domena nie generowala 800 biletow.

Czy moge wysylac zgloszenia do roznych zespolow Linear na podstawie tagow linku?

Tak. Na ekranie polaczenia wybierasz domyslny zespol, a nastepnie dodajesz reguly routingu - na przyklad tagi pasujace do campaign-* trafiaja do zespolu Growth, a tagi pasujace do docs-* trafiaja do Inzynierii. Reguly sa oceniane od gory do dolu z domyslnym fallbackiem. Zestaw regul jest przechowywany w Postgresie, wiec mozesz sprawdzac zmiany za posrednictwem sciezki audytu administratora.

Czy dziala to rowniez dla alertow progu klikan, nie tylko dla uszkodzonych linkow?

Tak, od Fazy 12. Ten sam adapter Linear przetwarza zdarzenia click_threshold_hook obok broken_link_hook. Definiujesz progi na link lub na kampanie w panelu Elido, a my tworzymy zgloszenie Linear, gdy link przekroczy zakres - czy to skok (3x wartosc bazowa w ciagu godziny), czy klifowe spadniecie (do ponizej 10% wartosci bazowej).

Co sie dzieje, jesli Linear zastosuje limit szybkosci do integracji?

Endpoint GraphQL Linear zwraca 429 z naglowkiem Retry-After. Nasz webhook-dispatcher respektuje to z wykladniczym odstepcze do pieciu prob, a nastepnie parkuje zdarzenie w kolejce dead-letter. Wpisy DLQ mozesz zobaczyc w Ustawienia, Integracje, Linear, Nieudane zdarzenia i odtworzyc kazde z nich jednym kliknieciem. DLQ jest rowniez dostepne przez GraphQL API pod adresem /v1/integrations/linear/dlq. Nie widzielismy jeszcze trwalego 429 od Linear w produkcji.

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
linear url shortener integration
linear broken link detection
linear automation
linear API integration
short link alerts linear

Czytaj dalej