Linear-kobling
Koble Linear-arbeidsområdet ditt til Brevo for kundevendt issue-sporing, varsler om produktoppdateringer og kampanjer for utviklingsmilepæler gjennom Tajo.
Oversikt
| Egenskap | Verdi |
|---|---|
| Plattform | Linear |
| Kategori | Custom |
| Oppsettskompleksitet | Enkel |
| Offisiell integrasjon | Nei |
| Synkroniserte data | Issues, prosjekter, brukere, hendelser |
| API-type | GraphQL API |
| Autentisering | OAuth 2.0 / personlig API-nøkkel |
| Base URL | https://api.linear.app/graphql |
Funksjoner
- Synkronisering av issue-hendelser - Videresend hendelser for opprettelse, oppdatering og fullføring av issues til Brevo-kontakttidslinjer
- Sporing av prosjektmilepæler - Utløs Brevo-kampanjer når prosjekter når viktige milepæler
- Kobling av kundesaker - Knytt Linear-issues til Brevo-kontakter for supportoversikt
- Etikettbasert segmentering - Mapp Linear-etiketter til Brevo-kontaktattributter
- Syklusanalyse - Synkroniser data om sprint-/syklusfullføring for rapportering av teamytelse
- Webhook-drevet automatisering - Videresending av hendelser i sanntid via Linear-webhooks
Forutsetninger
Før du begynner, sørg for at du har:
- Et Linear-arbeidsområde med administratortilgang
- En personlig API-nøkkel eller OAuth-applikasjon konfigurert
- En Brevo-konto med API-tilgang
- En Tajo-konto med aktivt abonnement
Autentisering
Linear støtter personlige API-nøkler og OAuth 2.0.
Alternativ 1: Personlig API-nøkkel
- Gå til Linear > Settings > API > Personal API keys
- Klikk Create key
- Gi den navnet “Tajo Integration”
- Kopier den genererte nøkkelen (begynner med
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 } }"}'Alternativ 2: OAuth 2.0
For integrasjoner som betjener flere arbeidsområder:
- Opprett en OAuth-applikasjon på linear.app/settings/api/applications
- Konfigurer redirect URI:
https://app.tajo.io/callbacks/linear - Be om scopes:
read,write,issues:create,comments:create
GraphQL API
Linear bruker utelukkende et GraphQL API. Alle spørringer og mutasjoner går gjennom ett enkelt endepunkt: https://api.linear.app/graphql. Tajo håndterer all GraphQL-spørringskonstruksjon automatisk.
Koble til Tajo
# Med personlig API-nøkkeltajo connectors install linear \ --api-key $LINEAR_API_KEY
# Med OAuthtajo connectors install linear \ --client-id $LINEAR_CLIENT_ID \ --client-secret $LINEAR_CLIENT_SECRETKonfigurasjon
Grunnleggende oppsett
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 - CanceledFeltmapping
Mapp Linear-bruker- og issue-data til Brevo-attributter:
field_mapping: # Brukerfelt id: LINEAR_USER_ID email: email name: FIRSTNAME
# Issue-målinger mappet til kontakthendelser last_issue_identifier: LAST_LINEAR_ISSUE last_issue_state: LAST_ISSUE_STATUS last_issue_priority: LAST_ISSUE_PRIORITY total_issues: LINEAR_ISSUE_COUNT
# Prosjektdata current_project: ACTIVE_PROJECT team_key: LINEAR_TEAMHendelsesmapping
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-endepunkter
Linear bruker ett enkelt GraphQL-endepunkt. Viktige spørringer og mutasjoner brukt av Tajo:
| Operasjon | Type | Formål |
|---|---|---|
issues | Query | List og filtrer issues |
issue | Query | Hent en enkelt issue etter ID |
projects | Query | List alle prosjekter |
cycles | Query | List sykluser (sprinter) |
teams | Query | List team i arbeidsområdet |
users | Query | List medlemmer i arbeidsområdet |
viewer | Query | Hent informasjon om autentisert bruker |
issueCreate | Mutation | Opprett en ny issue |
issueUpdate | Mutation | Oppdater en eksisterende issue |
commentCreate | Mutation | Legg til en kommentar på en issue |
webhookCreate | Mutation | Registrer en webhook |
Eksempel på GraphQL-spørring
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 } }}Kodeeksempler
Initialiser kobling
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});Synkroniser issues
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// }Håndter Linear-webhooks
app.post('/webhooks/linear', async (req, res) => { const event = req.body;
// Verifiser webhook-signatur 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');});Opprett issue fra Brevo-hendelse
// Opprett en Linear-issue når en Brevo-kontakt sender inn en forespørseltajo.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'] }); }});Ratebegrensninger
Linear håndhever ratebegrensninger på sitt GraphQL API:
| Begrensningstype | Verdi |
|---|---|
| Forespørselsrate | 1 500 forespørsler per time per API-nøkkel |
| Spørringskompleksitet | 10 000 kompleksitetspoeng per forespørsel |
| Paginering | Maks 250 noder per side (standard 50) |
| Webhooks | Ubegrenset antall innkommende hendelser |
Kompleksitetsbudsjett
Linear bruker et kompleksitetsbasert ratebegrensningssystem. Enkle spørringer koster færre poeng. Tajo optimaliserer spørringer for å minimere kompleksiteten ved å kun be om nødvendige felt og bruke effektiv paginering.
Linear returnerer 429 Too Many Requests med en Retry-After-header når grensene overskrides.
Feilsøking
Vanlige problemer
| Problem | Årsak | Løsning |
|---|---|---|
| 401 Unauthorized | Ugyldig eller tilbakekalt API-nøkkel | Generer en ny API-nøkkel i Linear Settings |
| Spørringsfeil | Ugyldig GraphQL-syntaks | Valider spørringer med Linears API-utforsker |
| Manglende issues | Teamtilgang begrenset | Sørg for at API-nøkkelens eier har tilgang til mål-team |
| Webhook utløses ikke | Feil URL eller deaktivert | Kontroller webhook-status i Linear Settings > API > Webhooks |
| Ufullstendig paginering | Manglende after-markør | Sørg for at pagineringsløkken kjører til hasNextPage er usann |
Feilsøkingsmodus
connectors: linear: debug: true log_level: verbose log_queries: trueTest tilkobling
tajo connectors test linear# ✓ GraphQL API-tilkobling vellykket# ✓ Arbeidsområdetilgang bekreftet# ✓ Teamliste lesbar# ✓ Issue-spørring operativ# ✓ Webhook-registrering tilgjengeligBeste praksis
- Bruk webhooks for sanntid - Registrer webhooks i stedet for polling for issue-endringer
- Filtrer etter team - Synkroniser kun issues fra relevante team for å redusere API-bruk
- Optimaliser GraphQL-spørringer - Be kun om nødvendige felt for å holde deg innenfor kompleksitetsgrenser
- Mapp etiketter til segmenter - Bruk Linear-etiketter for å drive Brevo-kontaktsegmentering
- Håndter paginering - Sjekk alltid
hasNextPageog brukendCursorfor komplette data - Verifiser webhook-signaturer - Valider alltid
Linear-Signature-headeren
Sikkerhet
- API-nøkkelautentisering - Personlige nøkler avgrenset til arbeidsområde
- OAuth 2.0 - Sikker autorisasjonsflyt for integrasjoner med flere arbeidsområder
- Kun HTTPS - All API-kommunikasjon kryptert via TLS 1.2+
- Webhook-signaturer - HMAC-basert signaturverifisering
- Kryptert lagring - API-nøkler kryptert i hvilemodus i Tajo
- SOC 2-samsvar - Linear-plattformen er SOC 2 Type II-sertifisert