Linear konektor
Poveži svoj Linear radni prostor sa Brevo za praćenje problema okrenuto ka kupcima, obaveštenja o ažuriranjima proizvoda i kampanje o razvojnim prekretnicama putem Tajo.
Pregled
| Svojstvo | Vrednost |
|---|---|
| Platforma | Linear |
| Kategorija | Prilagođeno |
| Složenost podešavanja | Lako |
| Zvanična integracija | Ne |
| Sinhronizovani podaci | Problemi, Projekti, Korisnici, Događaji |
| Tip API-ja | GraphQL API |
| Autentifikacija | OAuth 2.0 / Personal API Key |
| Osnovni URL | https://api.linear.app/graphql |
Karakteristike
- Sinhronizacija događaja problema - Prosleđivanje događaja kreiranja, ažuriranja i završetka problema na Brevo vremenske linije kontakata
- Praćenje prekretnica projekta - Pokretanje Brevo kampanja kada projekti dostignu ključne prekretnice
- Povezivanje problema sa kupcima - Asocijacija Linear problema sa Brevo kontaktima za vidljivost podrške
- Segmentacija zasnovana na labelama - Mapiranje Linear labela na Brevo atribute kontakta
- Analitika ciklusa - Sinhronizacija podataka o završetku sprinta/ciklusa za izveštavanje o performansama tima
- Automatizacija putem webhook-ova - Prosleđivanje događaja u realnom vremenu putem Linear webhook-ova
Preduslovi
Pre nego što započneš, proveri da imaš:
- Linear radni prostor sa admin pristupom
- Konfigurisani Personal API ključ ili OAuth aplikaciju
- Brevo nalog sa API pristupom
- Tajo nalog sa aktivnom pretplatom
Autentifikacija
Linear podržava Personal API ključeve i OAuth 2.0.
Opcija 1: Personal API ključ
- Idi na Linear > Settings > API > Personal API keys
- Klikni Create key
- Nazovi ga “Tajo Integration”
- Kopiraj generisani ključ (počinje 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 } }"}'Opcija 2: OAuth 2.0
Za integracije koje opsluže više radnih prostora:
- Kreiraj OAuth aplikaciju na linear.app/settings/api/applications
- Konfiguriši redirect URI:
https://app.tajo.io/callbacks/linear - Zatraži skopove:
read,write,issues:create,comments:create
GraphQL API
Linear ekskluzivno koristi GraphQL API. Svi upiti i mutacije prolaze kroz jedan endpoint: https://api.linear.app/graphql. Tajo automatski obrađuje konstrukciju svih GraphQL upita.
Povezivanje sa 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_SECRETKonfiguracija
Osnovno podešavanje
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
Mapiranje Linear korisničkih i podataka o problemima na Brevo atribute:
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_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 endpointi
Linear koristi jedan GraphQL endpoint. Ključni upiti i mutacije koje koristi Tajo:
| Operacija | Tip | Svrha |
|---|---|---|
issues | Upit | Listanje i filtriranje problema |
issue | Upit | Dohvatanje jednog problema po ID-u |
projects | Upit | Listanje svih projekata |
cycles | Upit | Listanje ciklusa (sprintova) |
teams | Upit | Listanje timova radnog prostora |
users | Upit | Listanje članova radnog prostora |
viewer | Upit | Dohvatanje informacija o autentifikovanom korisniku |
issueCreate | Mutacija | Kreiranje novog problema |
issueUpdate | Mutacija | Ažuriranje postojećeg problema |
commentCreate | Mutacija | Dodavanje komentara na problem |
webhookCreate | Mutacija | Registracija webhook-a |
Primer 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 } }}Primeri 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});Sinhronizacija 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// }Obrada Linear webhook-ova
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');});Kreiranje problema iz Brevo događaja
// 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'] }); }});Ograničenja brzine
Linear primenjuje ograničenja brzine na svom GraphQL API:
| Tip limita | Vrednost |
|---|---|
| Brzina zahteva | 1.500 zahteva po satu po API ključu |
| Složenost upita | 10.000 poena složenosti po zahtevu |
| Paginacija | Maksimalno 250 čvorova po stranici (podrazumevano 50) |
| Webhook-ovi | Neograničeni dolazni događaji |
Budžet složenosti
Linear koristi sistem ograničenja brzine zasnovan na složenosti. Jednostavni upiti troše manje poena. Tajo optimizuje upite da minimizuje složenost zahtevanjem samo potrebnih polja i korišćenjem efikasne paginacije.
Linear vraća 429 Too Many Requests sa Retry-After headerom kada se prekorače limiti.
Rešavanje problema
Česti problemi
| Problem | Uzrok | Rešenje |
|---|---|---|
| 401 Unauthorized | Nevažeći ili opozvan API ključ | Generiši novi API ključ u Linear Settings |
| Greške upita | Nevažeća GraphQL sintaksa | Validiraj upite koristeći Linear API explorer |
| Nedostaju problemi | Pristup timu ograničen | Proveri da vlasnik API ključa ima pristup ciljnim timovima |
| Webhook se ne okida | Pogrešan URL ili onemogućen | Proveri status webhook-a u Linear Settings > API > Webhooks |
| Paginacija nepotpuna | Nedostaje after kursor | Proveri da petlje paginacije teku dok hasNextPage nije false |
Debug režim
connectors: linear: debug: true log_level: verbose log_queries: trueTestiraj vezu
tajo connectors test linear# ✓ GraphQL API connection successful# ✓ Workspace access verified# ✓ Team list readable# ✓ Issue query operational# ✓ Webhook registration availableNajbolje prakse
- Koristi webhook-ove za real-time - Registruj webhook-ove umesto ispitivanja za promene problema
- Filtriraj po timu - Sinhronizuj probleme samo od relevantnih timova da smanjiš korišćenje API-ja
- Optimizuj GraphQL upite - Zahtevaj samo potrebna polja da ostaneš u granicama složenosti
- Mapiraj labele na segmente - Koristi Linear labele za pokretanje Brevo segmentacije kontakata
- Obradi paginaciju - Uvek proveri
hasNextPagei koristiendCursorza kompletne podatke - Verifikuj webhook potpise - Uvek validiraj
Linear-Signatureheader
Bezbednost
- Autentifikacija API ključem - Lični ključevi skopovani na radni prostor
- OAuth 2.0 - Bezbedan tok autorizacije za integracije sa više radnih prostora
- Samo HTTPS - Sva API komunikacija enkriptovana putem TLS 1.2+
- Webhook potpisi - Verifikacija potpisa zasnovana na HMAC
- Enkriptovano skladištenje - API ključevi enkriptovani u mirovanju u Tajo
- SOC 2 usklađenost - Linear platforma je SOC 2 Type II sertifikovana