Linear Konektor
Povežite svoj Linear radni prostor s Brevom za praćenje problema prema klijentima, obavijesti o ažuriranjima proizvoda i kampanje o razvojnim prekretnicama putem Taja.
Pregled
| Svojstvo | Vrijednost |
|---|---|
| Platforma | Linear |
| Kategorija | Prilagođeno |
| Složenost postavljanja | Jednostavno |
| Službena integracija | Ne |
| Sinkronizirani podaci | Problemi, Projekti, Korisnici, Događaji |
| Vrsta API-ja | GraphQL API |
| Autentifikacija | OAuth 2.0 / Personal API Key |
| Osnovni URL | https://api.linear.app/graphql |
Značajke
- Sinkronizacija događaja problema - Prosljeđujte događaje stvaranja, ažuriranja i dovršetka problema na Brevo vremenske linije kontakata
- Praćenje projektnih prekretnica - Pokrećite Brevo kampanje kada projekti dostignu ključne prekretnice
- Povezivanje problema s klijentima - Povežite Linear probleme s Brevo kontaktima radi vidljivosti podrške
- Segmentacija temeljena na oznakama - Mapirajte Linear oznake na Brevo atribute kontakata
- Analitika ciklusa - Sinkronizirajte podatke o dovršetku sprinta/ciklusa za izvješćivanje o timskim performansama
- Automatizacija pokretana webhookovima - Prosljeđivanje događaja u stvarnom vremenu putem Linear webhookova
Preduvjeti
Prije nego što počnete, osigurajte da imate:
- Linear radni prostor s administratorskim pristupom
- Konfigurirani Personal API ključ ili OAuth aplikaciju
- Brevo račun s API pristupom
- Tajo račun s aktivnom pretplatom
Autentifikacija
Linear podržava Personal API ključeve i OAuth 2.0.
Opcija 1: Personal API Key
- Idite na Linear > Postavke > API > Personal API keys
- Kliknite Create key
- Nazovite ga “Tajo Integration”
- Kopirajte generirani ključ (počinje s
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 } }"}'Opcija 2: OAuth 2.0
Za integracije koje opslužuju više radnih prostora:
- Stvorite OAuth aplikaciju na linear.app/settings/api/applications
- Konfigurirajte redirect URI:
https://app.tajo.io/callbacks/linear - Zatražite opsege:
read,write,issues:create,comments:create
GraphQL API
Linear isključivo koristi GraphQL API. Svi upiti i mutacije prolaze kroz jednu krajnju točku: https://api.linear.app/graphql. Tajo automatski rukuje svim konstrukcijama GraphQL upita.
Povezivanje s Tajom
# Korištenjem Personal API Key-atajo connectors install linear \ --api-key $LINEAR_API_KEY
# Korištenjem OAuth-atajo connectors install linear \ --client-id $LINEAR_CLIENT_ID \ --client-secret $LINEAR_CLIENT_SECRETKonfiguracija
Osnovna konfiguracija
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 - CanceledMapiranje polja
Mapirajte Linear korisničke i podatke o problemima na Brevo atribute:
field_mapping: # Korisnička polja id: LINEAR_USER_ID email: email name: FIRSTNAME
# Metrike problema mapirane na kontaktne događaje last_issue_identifier: LAST_LINEAR_ISSUE last_issue_state: LAST_ISSUE_STATUS last_issue_priority: LAST_ISSUE_PRIORITY total_issues: LINEAR_ISSUE_COUNT
# Podaci o projektu current_project: ACTIVE_PROJECT team_key: LINEAR_TEAMMapiranje događaja
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 krajnje točke
Linear koristi jednu GraphQL krajnju točku. Ključni upiti i mutacije koje Tajo koristi:
| Operacija | Vrsta | Namjena |
|---|---|---|
issues | Upit | Popis i filtriranje problema |
issue | Upit | Dohvaćanje jednog problema po ID-u |
projects | Upit | Popis svih projekata |
cycles | Upit | Popis ciklusa (sprintova) |
teams | Upit | Popis timova radnog prostora |
users | Upit | Popis članova radnog prostora |
viewer | Upit | Dohvaćanje podataka autentificiranog korisnika |
issueCreate | Mutacija | Stvaranje novog problema |
issueUpdate | Mutacija | Ažuriranje postojećeg problema |
commentCreate | Mutacija | Dodavanje komentara na problem |
webhookCreate | Mutacija | Registracija webhookova |
Primjer GraphQL upita
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 } }}Primjeri koda
Inicijalizacija 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});Sinkronizacija problema
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// }Rukovanje Linear Webhooksima
app.post('/webhooks/linear', async (req, res) => { const event = req.body;
// Provjera webhook potpisa 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');});Stvaranje problema iz Brevo događaja
// Stvaranje Linear problema kada Brevo kontakt pošalje zahtjevtajo.events.on('contact.event', async (event) => { if (event.name === 'FEATURE_REQUEST') { await tajo.connectors.create('linear', { teamId: 'ENG', title: `Zahtjev za značajku: ${event.data.subject}`, description: event.data.description, priority: 3, labelIds: ['feature-request'] }); }});Ograničenja brzine
Linear primjenjuje ograničenja brzine na svom GraphQL API-ju:
| Vrsta ograničenja | Vrijednost |
|---|---|
| Stopa zahtjeva | 1.500 zahtjeva po satu po API ključu |
| Složenost upita | 10.000 bodova složenosti po zahtjevu |
| Paginacija | Maks. 250 čvorova po stranici (zadano 50) |
| Webhooks | Neograničeni dolazni događaji |
Proračun složenosti
Linear koristi sustav ograničenja brzine temeljen na složenosti. Jednostavni upiti koštaju manje bodova. Tajo optimizira upite za minimiziranje složenosti zatraživanjem samo potrebnih polja i korištenjem učinkovite paginacije.
Linear vraća 429 Too Many Requests sa zaglavljem Retry-After kada su prekoračena ograničenja.
Rješavanje problema
Uobičajeni problemi
| Problem | Uzrok | Rješenje |
|---|---|---|
| 401 Unauthorized | Nevažeći ili opozvani API ključ | Generirajte novi API ključ u Linear Postavkama |
| Greške upita | Nevažeća GraphQL sintaksa | Validirajte upite koristeći Linear API explorer |
| Nedostaju problemi | Pristup timu ograničen | Osigurajte da vlasnik API ključa ima pristup ciljnim timovima |
| Webhook se ne aktivira | Netočan URL ili onemogućen | Provjerite status webhookova u Linear Postavke > API > Webhooks |
| Paginacija nepotpuna | Nedostaje after kursor | Osigurajte da paginacijske petlje nastavljaju dok hasNextPage nije false |
Način otklanjanja grešaka
connectors: linear: debug: true log_level: verbose log_queries: trueTestiranje veze
tajo connectors test linear# ✓ GraphQL API veza uspješna# ✓ Pristup radnom prostoru potvrđen# ✓ Popis timova čitljiv# ✓ Upit problema operativan# ✓ Registracija webhookova dostupnaPreporučene prakse
- Koristite webhookove za sinkronizaciju u stvarnom vremenu - Registrirajte webhookove umjesto anketiranja za promjene problema
- Filtrirajte po timu - Sinkronizirajte samo probleme iz relevantnih timova za smanjenje korištenja API-ja
- Optimizirajte GraphQL upite - Zatražite samo potrebna polja kako biste ostali unutar ograničenja složenosti
- Mapirajte oznake na segmente - Koristite Linear oznake za pokretanje segmentacije Brevo kontakata
- Rukujte paginacijom - Uvijek provjeravajte
hasNextPagei koristiteendCursorza potpune podatke - Verificirajte webhook potpise - Uvijek validirajte zaglavlje
Linear-Signature
Sigurnost
- Autentifikacija API ključem - Osobni ključevi ograničeni na radni prostor
- OAuth 2.0 - Siguran tok autorizacije za integracije s više radnih prostora
- Samo HTTPS - Sva API komunikacija šifrirana putem TLS 1.2+
- Webhook potpisi - Verifikacija potpisa temeljena na HMAC-u
- Šifrirano pohranjivanje - API ključevi šifrirani u mirovanju u Taju
- SOC 2 usklađenost - Linear platforma je SOC 2 Type II certificirana