Linear Connector
Stanje konektorja: Načrtovano Še ni izdelano. Tajo danes ne poganja tega konektorja.
Ponazoritev · vzorčni podatki
Primer sinhronizacije
Vir
Linear
Stanje konektorja: Načrtovano
Cilj
Vaše drugo orodje
Stanje konektorja: Orodje po meri
Preslikava polj
| Izvorno polje | Ciljno polje | Vzorčna vrednost |
|---|---|---|
record.id | source_id | record_1042 |
record.updated_at | updated_at | 2026-10-18T08:00:00Z |
record.value | value | sample_value |
- Osnutek
- Preglejte en zapis
- Odobrite to različico
Stanja veljajo za posamezne konektorje in ne zagotavljajo, da je ta sinhronizacija pripravljena. Polja so ponazoritvena. Pred zagonom sinhronizacije preverite dejansko shemo in dovoljenja.
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 dogodkov težav – posreduj dogodke 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 dogodkov 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 dogodkov
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 dogodka 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