Linear Connector
Poveži svoje delovno okolje Linear z Brevo za sledenje težavam, ki so vidne strankam, obvestila o posodobitvah produkta in kampanje ob razvojnih mejnikih prek Tajo.
Pregled
| Lastnost | Vrednost |
|---|---|
| Platforma | Linear |
| Kategorija | Po meri |
| Zahtevnost nastavitve | Enostavna |
| Uradna integracija | Ne |
| Sinhronizirani podatki | Težave, projekti, uporabniki, dogodki |
| Tip API | GraphQL API |
| Avtentikacija | OAuth 2.0 / Osebni API ključ |
| Osnovni URL | https://api.linear.app/graphql |
Funkcionalnosti
- Sinhronizacija событий težav – posreduj události ustvarjanja, posodabljanja in zaključevanja težav na časovnice stikov Brevo
- Sledenje mejnikom projektov – sproži kampanje Brevo, ko projekti dosežejo ključne mejnike
- Povezovanje težav s strankami – poveži težave Linear s stiki Brevo za pregled podpore
- Segmentacija na osnovi oznak – preslikaj oznake Linear v atribute stikov Brevo
- Analitika ciklov – sinhronizacija podatkov o zaključitvi sprintov/ciklov za poročanje o uspešnosti ekipe
- Avtomatizacija na osnovi webhookov – posredovanje событij v realnem času prek webhookov Linear
Predpogoji
Preden začneš, se prepričaj, da imaš:
- Delovno okolje Linear z administratorskim dostopom
- Konfiguriran osebni API ključ ali OAuth aplikacijo
- Brevo račun z dostopom do API
- Tajo račun z aktivno naročnino
Avtentikacija
Linear podpira osebne API ključe in OAuth 2.0.
Možnost 1: Osebni API ključ
- Pojdi na Linear > Settings > API > Personal API keys
- Klikni Create key
- Poimenuj ga “Tajo Integration”
- Kopiraj generirani ključ (začne se z
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žnost 2: OAuth 2.0
Za integracije, ki pokrivajo več delovnih okolij:
- Ustvari OAuth aplikacijo na linear.app/settings/api/applications
- Nastavi URI za preusmeritev:
https://app.tajo.io/callbacks/linear - Zahtevaj obsege:
read,write,issues:create,comments:create
GraphQL API
Linear izključno uporablja GraphQL API. Vse poizvedbe in mutacije gredo skozi eno samo končno točko: https://api.linear.app/graphql. Tajo samodejno gradi vse GraphQL poizvedbe.
Povezava s 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
Osnovna nastavitev
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 - CanceledPreslikava polj
Preslikaj podatke o uporabnikih in težavah Linear v atribute 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_TEAMPreslikava событij
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_UPDATEDKončne točke API
Linear uporablja eno samo GraphQL končno točko. Ključne poizvedbe in mutacije, ki jih uporablja Tajo:
| Operacija | Tip | Namen |
|---|---|---|
issues | Poizvedba | Seznam in filtriranje težav |
issue | Poizvedba | Pridobi posamezno težavo po ID |
projects | Poizvedba | Seznam vseh projektov |
cycles | Poizvedba | Seznam ciklov (sprintov) |
teams | Poizvedba | Seznam ekip delovnega okolja |
users | Poizvedba | Seznam članov delovnega okolja |
viewer | Poizvedba | Pridobi informacije o avtenticiranem uporabniku |
issueCreate | Mutacija | Ustvari novo težavo |
issueUpdate | Mutacija | Posodobi obstoječo težavo |
commentCreate | Mutacija | Dodaj komentar k težavi |
webhookCreate | Mutacija | Registriraj webhook |
Primer poizvedbe GraphQL
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 kode
Inicializacija konektorja
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 težav
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// }Obravnava webhookov Linear
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');});Ustvarjanje težave iz события 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'] }); }});Omejitve hitrosti
Linear uveljavi omejitve hitrosti na svojem GraphQL API:
| Vrsta omejitve | Vrednost |
|---|---|
| Hitrost zahtevkov | 1.500 zahtevkov na uro na API ključ |
| Kompleksnost poizvedbe | 10.000 točk kompleksnosti na zahtevek |
| Paginacija | Največ 250 vozlišč na stran (privzeto 50) |
| Webhooks | Neomejeni dohodne dogodki |
Proračun kompleksnosti
Linear uporablja sistem omejevanja hitrosti na osnovi kompleksnosti. Enostavne poizvedbe stanejo manj točk. Tajo optimizira poizvedbe za minimizacijo kompleksnosti z zahtevanjem samo potrebnih polj in učinkovito paginacijo.
Linear vrne 429 Too Many Requests z glavo Retry-After, ko so omejitve prekoračene.
Odpravljanje težav
Pogoste težave
| Težava | Vzrok | Rešitev |
|---|---|---|
| 401 Unauthorized | Neveljaven ali preklican API ključ | Ustvari nov API ključ v Linear Settings |
| Napake poizvedbe | Napačna sintaksa GraphQL | Potrdi poizvedbe z API Explorer Linear |
| Manjkajo težave | Dostop do ekipe je omejen | Zagotovi, da ima lastnik API ključa dostop do ciljnih ekip |
| Webhook se ne sproži | Napačen URL ali onemogočen | Preveri status webhookov v Linear Settings > API > Webhooks |
| Nepopolna paginacija | Manjkajoči kazalec after | Zagotovi, da zanke paginacije trajajo do hasNextPage = false |
Način odpravljanja napak
connectors: linear: debug: true log_level: verbose log_queries: truePreizkus povezave
tajo connectors test linear# ✓ GraphQL API connection successful# ✓ Workspace access verified# ✓ Team list readable# ✓ Issue query operational# ✓ Webhook registration availableNajboljše prakse
- Za posodobitve v realnem času uporabi webhooks – registriraj webhooks namesto anketiranja za spremembe težav
- Filtriraj po ekipi – sinhronizacija samo težav iz ustreznih ekip za zmanjšanje porabe API
- Optimiziraj poizvedbe GraphQL – zahtevaj samo potrebna polja za ostajanje znotraj omejitev kompleksnosti
- Preslikaj oznake na segmente – oznake Linear uporabi za pogon segmentacije stikov Brevo
- Obravnavaj paginacijo – vedno preverjaj
hasNextPagein za popolne podatke uporabiendCursor - Preverjaj podpise webhookov – vedno potrdi glavo
Linear-Signature
Varnost
- Avtentikacija z API ključem – osebni ključi, omejeni na delovno okolje
- OAuth 2.0 – varen tok avtorizacije za integracije z več delovnimi okolji
- Samo HTTPS – vsa komunikacija API šifrirana prek TLS 1.2+
- Podpisi webhookov – preverjanje podpisa na osnovi HMAC
- Šifrirano shranjevanje – API ključi šifrirani v mirovanju v Tajo
- Skladnost SOC 2 – platforma Linear je certificirana po SOC 2 Type II