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

SvojstvoVrijednost
PlatformaLinear
KategorijaPrilagođeno
Složenost postavljanjaJednostavno
Službena integracijaNe
Sinkronizirani podaciProblemi, Projekti, Korisnici, Događaji
Vrsta API-jaGraphQL API
AutentifikacijaOAuth 2.0 / Personal API Key
Osnovni URLhttps://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:

  1. Linear radni prostor s administratorskim pristupom
  2. Konfigurirani Personal API ključ ili OAuth aplikaciju
  3. Brevo račun s API pristupom
  4. Tajo račun s aktivnom pretplatom

Autentifikacija

Linear podržava Personal API ključeve i OAuth 2.0.

Opcija 1: Personal API Key

  1. Idite na Linear > Postavke > API > Personal API keys
  2. Kliknite Create key
  3. Nazovite ga “Tajo Integration”
  4. Kopirajte generirani ključ (počinje s lin_api_)
Terminal window
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:

  1. Stvorite OAuth aplikaciju na linear.app/settings/api/applications
  2. Konfigurirajte redirect URI: https://app.tajo.io/callbacks/linear
  3. 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

Terminal window
# Korištenjem Personal API Key-a
tajo connectors install linear \
--api-key $LINEAR_API_KEY
# Korištenjem OAuth-a
tajo connectors install linear \
--client-id $LINEAR_CLIENT_ID \
--client-secret $LINEAR_CLIENT_SECRET

Konfiguracija

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
- Canceled

Mapiranje 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_TEAM

Mapiranje 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_UPDATED

API krajnje točke

Linear koristi jednu GraphQL krajnju točku. Ključni upiti i mutacije koje Tajo koristi:

OperacijaVrstaNamjena
issuesUpitPopis i filtriranje problema
issueUpitDohvaćanje jednog problema po ID-u
projectsUpitPopis svih projekata
cyclesUpitPopis ciklusa (sprintova)
teamsUpitPopis timova radnog prostora
usersUpitPopis članova radnog prostora
viewerUpitDohvaćanje podataka autentificiranog korisnika
issueCreateMutacijaStvaranje novog problema
issueUpdateMutacijaAžuriranje postojećeg problema
commentCreateMutacijaDodavanje komentara na problem
webhookCreateMutacijaRegistracija 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 zahtjev
tajo.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čenjaVrijednost
Stopa zahtjeva1.500 zahtjeva po satu po API ključu
Složenost upita10.000 bodova složenosti po zahtjevu
PaginacijaMaks. 250 čvorova po stranici (zadano 50)
WebhooksNeogranič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

ProblemUzrokRješenje
401 UnauthorizedNevažeći ili opozvani API ključGenerirajte novi API ključ u Linear Postavkama
Greške upitaNevažeća GraphQL sintaksaValidirajte upite koristeći Linear API explorer
Nedostaju problemiPristup timu ograničenOsigurajte da vlasnik API ključa ima pristup ciljnim timovima
Webhook se ne aktiviraNetočan URL ili onemogućenProvjerite status webhookova u Linear Postavke > API > Webhooks
Paginacija nepotpunaNedostaje after kursorOsigurajte da paginacijske petlje nastavljaju dok hasNextPage nije false

Način otklanjanja grešaka

connectors:
linear:
debug: true
log_level: verbose
log_queries: true

Testiranje veze

Terminal window
tajo connectors test linear
# ✓ GraphQL API veza uspješna
# ✓ Pristup radnom prostoru potvrđen
# ✓ Popis timova čitljiv
# ✓ Upit problema operativan
# ✓ Registracija webhookova dostupna

Preporučene prakse

  1. Koristite webhookove za sinkronizaciju u stvarnom vremenu - Registrirajte webhookove umjesto anketiranja za promjene problema
  2. Filtrirajte po timu - Sinkronizirajte samo probleme iz relevantnih timova za smanjenje korištenja API-ja
  3. Optimizirajte GraphQL upite - Zatražite samo potrebna polja kako biste ostali unutar ograničenja složenosti
  4. Mapirajte oznake na segmente - Koristite Linear oznake za pokretanje segmentacije Brevo kontakata
  5. Rukujte paginacijom - Uvijek provjeravajte hasNextPage i koristite endCursor za potpune podatke
  6. 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

Povezani resursi

Subscribe to updates

developer-docs

Drop your email or phone number — we'll send you what matters next.

auto-detect
AI asistent

Bok! Pitajte me o dokumentaciji.