Linear-koppling

Anslut din Linear-arbetsyta till Brevo för kundnära ärendespårning, produktuppdateringsnotiser och kampanjer kring utvecklingsmilstolpar via Tajo.

Översikt

EgenskapVärde
PlattformLinear
KategoriAnpassad
InstallationskomplexitetEnkel
Officiell integrationNej
Data som synkasÄrenden, projekt, användare, händelser
API-typGraphQL API
AutentiseringOAuth 2.0 / Personal API Key
Bas-URLhttps://api.linear.app/graphql

Funktioner

  • Synk av ärendehändelser - Vidarebefordra händelser för skapande, uppdatering och slutförande av ärenden till tidslinjer för Brevo-kontakter
  • Spårning av projektmilstolpar - Utlös Brevo-kampanjer när projekt når viktiga milstolpar
  • Koppling av kundärenden - Associera Linear-ärenden med Brevo-kontakter för supportöversikt
  • Etikettbaserad segmentering - Mappa Linear-etiketter till Brevo-kontaktattribut
  • Cykelanalys - Synka data om sprint-/cykelavslut för rapportering om teamprestation
  • Webhook-driven automation - Vidarebefordran av händelser i realtid via Linear-webhooks

Förutsättningar

Innan du börjar, se till att du har:

  1. En Linear-arbetsyta med admin-åtkomst
  2. En Personal API Key eller konfigurerad OAuth-applikation
  3. Ett Brevo-konto med API-åtkomst
  4. Ett Tajo-konto med aktivt abonnemang

Autentisering

Linear stöder Personal API-nycklar och OAuth 2.0.

Alternativ 1: Personal API Key

  1. Gå till Linear > Settings > API > Personal API keys
  2. Klicka på Create key
  3. Namnge den “Tajo Integration”
  4. Kopiera den genererade nyckeln (börjar 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

För integrationer som betjänar flera arbetsytor:

  1. Skapa en OAuth-applikation på linear.app/settings/api/applications
  2. Konfigurera redirect-URI: https://app.tajo.io/callbacks/linear
  3. Begär scopes: read, write, issues:create, comments:create

GraphQL API

Linear använder uteslutande ett GraphQL API. Alla queries och mutationer går genom en enda endpoint: https://api.linear.app/graphql. Tajo hanterar all GraphQL-querykonstruktion automatiskt.

Ansluta till Tajo

Terminal window
# Using Personal API Key
tajo connectors install linear \
--api-key $LINEAR_API_KEY
# Using OAuth
tajo connectors install linear \
--client-id $LINEAR_CLIENT_ID \
--client-secret $LINEAR_CLIENT_SECRET

Konfiguration

Grundinställning

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

Fältmappning

Mappa Linear-användar- och ärendedata till Brevo-attribut:

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_TEAM

Händelsemappning

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

Linear använder en enda GraphQL-endpoint. Viktiga queries och mutationer som används av Tajo:

OperationTypSyfte
issuesQueryLista och filtrera ärenden
issueQueryHämta ett enskilt ärende per ID
projectsQueryLista alla projekt
cyclesQueryLista cykler (sprintar)
teamsQueryLista team i arbetsytan
usersQueryLista medlemmar i arbetsytan
viewerQueryHämta info om autentiserad användare
issueCreateMutationSkapa ett nytt ärende
issueUpdateMutationUppdatera ett befintligt ärende
commentCreateMutationLägg till en kommentar på ett ärende
webhookCreateMutationRegistrera en webhook

Exempel på GraphQL-query

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

Kodexempel

Initiera kopplingen

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
});

Synka ärenden

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
// }

Hantera Linear-webhooks

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');
});

Skapa ärende från Brevo-händelse

// Create a Linear issue when a Brevo contact submits a request
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']
});
}
});

Hastighetsbegränsningar

Linear tillämpar hastighetsbegränsningar på sitt GraphQL-API:

BegränsningstypVärde
Förfrågningshastighet1 500 förfrågningar per timme per API-nyckel
Frågekomplexitet10 000 komplexitetspoäng per förfrågan
Paginering250 noder max per sida (standard 50)
WebhooksObegränsade inkommande händelser

Komplexitetsbudget

Linear använder ett komplexitetsbaserat system för hastighetsbegränsning. Enkla queries kostar färre poäng. Tajo optimerar queries för att minimera komplexitet genom att bara begära nödvändiga fält och använda effektiv paginering.

Linear returnerar 429 Too Many Requests med en Retry-After-header när gränserna överskrids.

Felsökning

Vanliga problem

ProblemOrsakLösning
401 UnauthorizedOgiltig eller återkallad API-nyckelGenerera en ny API-nyckel i Linear Settings
Query-felOgiltig GraphQL-syntaxValidera queries i Linears API-utforskare
Saknade ärendenTeamåtkomst begränsadSe till att API-nyckelns ägare har åtkomst till målteam
Webhook utlöses inteFel URL eller inaktiveradKontrollera webhook-status under Linear Settings > API > Webhooks
Ofullständig pagineringSaknar after-cursorSe till att pagineringen loopar tills hasNextPage är false

Felsökningsläge

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

Testa anslutning

Terminal window
tajo connectors test linear
# ✓ GraphQL API connection successful
# ✓ Workspace access verified
# ✓ Team list readable
# ✓ Issue query operational
# ✓ Webhook registration available

Bästa praxis

  1. Använd webhooks för realtid - Registrera webhooks istället för polling vid ärendeändringar
  2. Filtrera per team - Synka bara ärenden från relevanta team för att minska API-användning
  3. Optimera GraphQL-queries - Begär bara nödvändiga fält för att hålla dig inom komplexitetsgränserna
  4. Mappa etiketter till segment - Använd Linear-etiketter för att driva Brevo-kontaktsegmentering
  5. Hantera paginering - Kontrollera alltid hasNextPage och använd endCursor för fullständig data
  6. Verifiera webhook-signaturer - Validera alltid Linear-Signature-headern

Säkerhet

  • API-nyckelautentisering - Personliga nycklar scopade till arbetsytan
  • OAuth 2.0 - Säkert auktoriseringsflöde för integrationer med flera arbetsytor
  • Endast HTTPS - All API-kommunikation krypterad via TLS 1.2+
  • Webhook-signaturer - HMAC-baserad signaturverifiering
  • Krypterad lagring - API-nycklar krypterade i vila i Tajo
  • SOC 2-efterlevnad - Linear-plattformen är SOC 2 Type II-certifierad

Relaterade resurser

Subscribe to updates

developer-docs

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

auto-detect
AI-assistent

Hej! Fråga mig om dokumentationen.