Linear-kobling

Koble Linear-arbeidsområdet ditt til Brevo for kundevendt issue-sporing, varsler om produktoppdateringer og kampanjer for utviklingsmilepæler gjennom Tajo.

Oversikt

EgenskapVerdi
PlattformLinear
KategoriCustom
OppsettskompleksitetEnkel
Offisiell integrasjonNei
Synkroniserte dataIssues, prosjekter, brukere, hendelser
API-typeGraphQL API
AutentiseringOAuth 2.0 / personlig API-nøkkel
Base URLhttps://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:

  1. Et Linear-arbeidsområde med administratortilgang
  2. En personlig API-nøkkel eller OAuth-applikasjon konfigurert
  3. En Brevo-konto med API-tilgang
  4. En Tajo-konto med aktivt abonnement

Autentisering

Linear støtter personlige API-nøkler og OAuth 2.0.

Alternativ 1: Personlig API-nøkkel

  1. Gå til Linear > Settings > API > Personal API keys
  2. Klikk Create key
  3. Gi den navnet “Tajo Integration”
  4. Kopier den genererte nøkkelen (begynner med 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 } }"}'

Alternativ 2: OAuth 2.0

For integrasjoner som betjener flere arbeidsområder:

  1. Opprett en OAuth-applikasjon på linear.app/settings/api/applications
  2. Konfigurer redirect URI: https://app.tajo.io/callbacks/linear
  3. 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

Terminal window
# Med personlig API-nøkkel
tajo connectors install linear \
--api-key $LINEAR_API_KEY
# Med OAuth
tajo connectors install linear \
--client-id $LINEAR_CLIENT_ID \
--client-secret $LINEAR_CLIENT_SECRET

Konfigurasjon

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

Feltmapping

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_TEAM

Hendelsesmapping

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

Linear bruker ett enkelt GraphQL-endepunkt. Viktige spørringer og mutasjoner brukt av Tajo:

OperasjonTypeFormål
issuesQueryList og filtrer issues
issueQueryHent en enkelt issue etter ID
projectsQueryList alle prosjekter
cyclesQueryList sykluser (sprinter)
teamsQueryList team i arbeidsområdet
usersQueryList medlemmer i arbeidsområdet
viewerQueryHent informasjon om autentisert bruker
issueCreateMutationOpprett en ny issue
issueUpdateMutationOppdater en eksisterende issue
commentCreateMutationLegg til en kommentar på en issue
webhookCreateMutationRegistrer 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ørsel
tajo.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:

BegrensningstypeVerdi
Forespørselsrate1 500 forespørsler per time per API-nøkkel
Spørringskompleksitet10 000 kompleksitetspoeng per forespørsel
PagineringMaks 250 noder per side (standard 50)
WebhooksUbegrenset 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ÅrsakLøsning
401 UnauthorizedUgyldig eller tilbakekalt API-nøkkelGenerer en ny API-nøkkel i Linear Settings
SpørringsfeilUgyldig GraphQL-syntaksValider spørringer med Linears API-utforsker
Manglende issuesTeamtilgang begrensetSørg for at API-nøkkelens eier har tilgang til mål-team
Webhook utløses ikkeFeil URL eller deaktivertKontroller webhook-status i Linear Settings > API > Webhooks
Ufullstendig pagineringManglende after-markørSørg for at pagineringsløkken kjører til hasNextPage er usann

Feilsøkingsmodus

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

Test tilkobling

Terminal window
tajo connectors test linear
# ✓ GraphQL API-tilkobling vellykket
# ✓ Arbeidsområdetilgang bekreftet
# ✓ Teamliste lesbar
# ✓ Issue-spørring operativ
# ✓ Webhook-registrering tilgjengelig

Beste praksis

  1. Bruk webhooks for sanntid - Registrer webhooks i stedet for polling for issue-endringer
  2. Filtrer etter team - Synkroniser kun issues fra relevante team for å redusere API-bruk
  3. Optimaliser GraphQL-spørringer - Be kun om nødvendige felt for å holde deg innenfor kompleksitetsgrenser
  4. Mapp etiketter til segmenter - Bruk Linear-etiketter for å drive Brevo-kontaktsegmentering
  5. Håndter paginering - Sjekk alltid hasNextPage og bruk endCursor for komplette data
  6. 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

Relaterte ressurser

Subscribe to updates

developer-docs

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

auto-detect
AI-assistent

Hei! Spør meg om dokumentasjonen.