Linear konektor
Prepoj svoj Linear workspace s Brevo pre sledovanie issues zákazníkov, notifikácie o aktualizáciách produktu a kampane pri vývojových míľnikoch cez Tajo.
Prehľad
| Vlastnosť | Hodnota |
|---|---|
| Platforma | Linear |
| Kategória | Vlastná |
| Zložitosť nastavenia | Ľahké |
| Oficiálna integrácia | Nie |
| Synchronizované dáta | Issues, Projekty, Používatelia, Udalosti |
| Typ API | GraphQL API |
| Autentifikácia | OAuth 2.0 / Personal API Key |
| Base URL | https://api.linear.app/graphql |
Funkcie
- Synchronizácia udalostí issues - Preposielaj udalosti vytvorenia, aktualizácie a dokončenia issues do časových osí kontaktov v Brevo
- Sledovanie míľnikov projektov - Spúšťaj kampane Brevo, keď projekty dosiahnu kľúčové míľniky
- Prepojenie issues zákazníkov - Priraď Linear issues k kontaktom Brevo pre viditeľnosť podpory
- Segmentácia podľa labelov - Namapuj lineárne labels na atribúty kontaktov v Brevo
- Analytika cyklov - Synchronizuj dáta o dokončení sprintov/cyklov pre reportovanie výkonu tímu
- Webhook automatizácia - Preposielanie udalostí v reálnom čase cez Linear webhooky
Predpoklady
Predtým, než začneš, uisti sa, že máš:
- Linear workspace s admin prístupom
- Nakonfigurovaný Personal API kľúč alebo OAuth aplikáciu
- Brevo účet s API prístupom
- Tajo účet s aktívnym predplatným
Autentifikácia
Linear podporuje Personal API kľúče a OAuth 2.0.
Možnosť 1: Personal API Key
- Choď na Linear > Settings > API > Personal API keys
- Klikni na Create key
- Pomenuj ho “Tajo Integration”
- Skopíruj vygenerovaný kľúč (začína sa
lin_api_)
curl -X POST https://api.linear.app/graphql \ -H "Authorization: $LINEAR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"query": "{ viewer { id name email } }"}'Možnosť 2: OAuth 2.0
Pre integrácie obsluhujúce viacero workspace:
- Vytvor OAuth aplikáciu na linear.app/settings/api/applications
- Nakonfiguruj redirect URI:
https://app.tajo.io/callbacks/linear - Požiadaj o scopes:
read,write,issues:create,comments:create
GraphQL API
Linear výhradne používa GraphQL API. Všetky dopyty a mutácie prechádzajú jediným endpointom: https://api.linear.app/graphql. Tajo spravuje všetky konštrukcie GraphQL dopytov automaticky.
Pripojenie k Tajo
# Using Personal API Keytajo connectors install linear \ --api-key $LINEAR_API_KEY
# Using OAuthtajo connectors install linear \ --client-id $LINEAR_CLIENT_ID \ --client-secret $LINEAR_CLIENT_SECRETKonfigurácia
Základné nastavenie
connectors: linear: enabled: true
sync: issues: true projects: true cycles: true users: true
teams: - key: "ENG" sync_to_list: 38 - key: "SUPPORT" sync_to_list: 39
issue_states: - Backlog - Todo - "In Progress" - Done - CanceledMapovanie polí
Namapuj dáta používateľov a issues Linear na atribúty Brevo:
field_mapping: # User fields id: LINEAR_USER_ID email: email name: FIRSTNAME
# Issue metrics mapped to contact events last_issue_identifier: LAST_LINEAR_ISSUE last_issue_state: LAST_ISSUE_STATUS last_issue_priority: LAST_ISSUE_PRIORITY total_issues: LINEAR_ISSUE_COUNT
# Project data current_project: ACTIVE_PROJECT team_key: LINEAR_TEAMMapovanie udalostí
event_mapping: Issue.create: ISSUE_CREATED Issue.update: ISSUE_UPDATED Issue.remove: ISSUE_DELETED Comment.create: COMMENT_ADDED Project.update: PROJECT_UPDATED Cycle.update: CYCLE_UPDATEDAPI endpointy
Linear používa jeden GraphQL endpoint. Kľúčové dopyty a mutácie používané v Tajo:
| Operácia | Typ | Účel |
|---|---|---|
issues | Dopyt | Zoznam a filtrovanie issues |
issue | Dopyt | Jedna issue podľa ID |
projects | Dopyt | Zoznam všetkých projektov |
cycles | Dopyt | Zoznam cyklov (sprintov) |
teams | Dopyt | Zoznam tímov workspace |
users | Dopyt | Zoznam členov workspace |
viewer | Dopyt | Informácie o autentifikovanom používateľovi |
issueCreate | Mutácia | Vytvorenie novej issue |
issueUpdate | Mutácia | Aktualizácia existujúcej issue |
commentCreate | Mutácia | Pridanie komentára k issue |
webhookCreate | Mutácia | Registrácia webhooku |
Príklad GraphQL dopytu
query GetIssues($filter: IssueFilter, $first: Int, $after: String) { issues(filter: $filter, first: $first, after: $after) { nodes { id identifier title state { name } priority assignee { email name } labels { nodes { name } } createdAt updatedAt } pageInfo { hasNextPage endCursor } }}Ukážky kódu
Inicializácia konektora
import { TajoClient } from '@tajo/sdk';
const tajo = new TajoClient({ apiKey: process.env.TAJO_API_KEY, brevoApiKey: process.env.BREVO_API_KEY});
await tajo.connectors.connect('linear', { apiKey: process.env.LINEAR_API_KEY});Synchronizácia issues
await tajo.connectors.sync('linear', { type: 'incremental', resources: ['issues'], teams: ['ENG', 'SUPPORT'], since: '2024-01-01'});
const status = await tajo.connectors.status('linear');console.log(status);// {// connected: true,// lastSync: '2024-03-15T18:00:00Z',// issuesTracked: 3200,// projectsMonitored: 8,// usersLinked: 45// }Spracovanie Linear webhookov
app.post('/webhooks/linear', async (req, res) => { const event = req.body;
// Verify webhook signature const signature = req.get('Linear-Signature'); if (!verifyLinearSignature(req.body, signature)) { return res.status(401).send('Unauthorized'); }
await tajo.connectors.handleWebhook('linear', { type: event.type, action: event.action, payload: { issueId: event.data?.id, identifier: event.data?.identifier, title: event.data?.title, state: event.data?.state?.name, assigneeEmail: event.data?.assignee?.email } });
res.status(200).send('OK');});Vytvorenie issue z udalosti Brevo
// Create a Linear issue when a Brevo contact submits a requesttajo.events.on('contact.event', async (event) => { if (event.name === 'FEATURE_REQUEST') { await tajo.connectors.create('linear', { teamId: 'ENG', title: `Feature Request: ${event.data.subject}`, description: event.data.description, priority: 3, labelIds: ['feature-request'] }); }});Obmedzenia rýchlosti
Linear uplatňuje obmedzenia rýchlosti na svojom GraphQL API:
| Typ limitu | Hodnota |
|---|---|
| Frekvencia požiadaviek | 1 500 požiadaviek za hodinu na API kľúč |
| Komplexnosť dopytu | 10 000 bodov komplexnosti na požiadavku |
| Stránkovanie | Max 250 uzlov na stránku (predvolene 50) |
| Webhooky | Neobmedzené prichádzajúce udalosti |
Rozpočet komplexnosti
Linear používa systém obmedzovania rýchlosti na základe komplexnosti. Jednoduché dopyty stoja menej bodov. Tajo optimalizuje dopyty na minimalizáciu komplexnosti požadovaním iba potrebných polí a efektívnym stránkovaním.
Linear vracia 429 Too Many Requests s hlavičkou Retry-After pri prekročení limitov.
Riešenie problémov
Bežné problémy
| Problém | Príčina | Riešenie |
|---|---|---|
| 401 Unauthorized | Neplatný alebo zrušený API kľúč | Vygeneruj nový API kľúč v Linear Settings |
| Chyby dopytu | Neplatná GraphQL syntax | Validuj dopyty pomocou Linear API exploreru |
| Chýbajúce issues | Obmedzený prístup k tímu | Uisti sa, že vlastník API kľúča má prístup k cieľovým tímom |
| Webhook sa nespúšťa | Nesprávna URL alebo zakázaná | Skontroluj stav webhooku v Linear Settings > API > Webhooks |
| Stránkovanie je neúplné | Chýbajúci kurzor after | Uisti sa, že slučky stránkovania pokračujú, kým hasNextPage nie je false |
Debug režim
connectors: linear: debug: true log_level: verbose log_queries: trueTest pripojenia
tajo connectors test linear# ✓ GraphQL API connection successful# ✓ Workspace access verified# ✓ Team list readable# ✓ Issue query operational# ✓ Webhook registration availableOdporúčané postupy
- Použi webhooky pre real-time - Zaregistruj webhooky namiesto pollingu zmien issues
- Filtruj podľa tímu - Synchronizuj iba issues z relevantných tímov na zníženie využitia API
- Optimalizuj GraphQL dopyty - Požaduj iba potrebné polia, aby si zostal v limitoch komplexnosti
- Namapuj labels na segmenty - Použi Linear labels na riadenie segmentácie kontaktov v Brevo
- Spravuj stránkovanie - Vždy skontroluj
hasNextPagea použiendCursorpre kompletné dáta - Overuj podpisy webhookov - Vždy validuj hlavičku
Linear-Signature
Bezpečnosť
- Autentifikácia API kľúčom - Osobné kľúče obmedzené na workspace
- OAuth 2.0 - Bezpečný autorizačný flow pre integrácie s viacerými workspace
- Iba HTTPS - Všetka API komunikácia šifrovaná cez TLS 1.2+
- Podpisy webhookov - Overenie podpisu na základe HMAC
- Šifrované úložisko - API kľúče šifrované v pokoji v Tajo
- SOC 2 súlad - Platforma Linear je certifikovaná podľa SOC 2 Type II