Linear-koppling
Anslut din Linear-arbetsyta till Brevo för kundnära ärendespårning, produktuppdateringsnotiser och kampanjer kring utvecklingsmilstolpar via Tajo.
Översikt
| Egenskap | Värde |
|---|---|
| Plattform | Linear |
| Kategori | Anpassad |
| Installationskomplexitet | Enkel |
| Officiell integration | Nej |
| Data som synkas | Ärenden, projekt, användare, händelser |
| API-typ | GraphQL API |
| Autentisering | OAuth 2.0 / Personal API Key |
| Bas-URL | https://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:
- En Linear-arbetsyta med admin-åtkomst
- En Personal API Key eller konfigurerad OAuth-applikation
- Ett Brevo-konto med API-åtkomst
- Ett Tajo-konto med aktivt abonnemang
Autentisering
Linear stöder Personal API-nycklar och OAuth 2.0.
Alternativ 1: Personal API Key
- Gå till Linear > Settings > API > Personal API keys
- Klicka på Create key
- Namnge den “Tajo Integration”
- Kopiera den genererade nyckeln (börjar 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
För integrationer som betjänar flera arbetsytor:
- Skapa en OAuth-applikation på linear.app/settings/api/applications
- Konfigurera redirect-URI:
https://app.tajo.io/callbacks/linear - 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
# 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_SECRETKonfiguration
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 - CanceledFä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_TEAMHä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_UPDATEDAPI-endpoints
Linear använder en enda GraphQL-endpoint. Viktiga queries och mutationer som används av Tajo:
| Operation | Typ | Syfte |
|---|---|---|
issues | Query | Lista och filtrera ärenden |
issue | Query | Hämta ett enskilt ärende per ID |
projects | Query | Lista alla projekt |
cycles | Query | Lista cykler (sprintar) |
teams | Query | Lista team i arbetsytan |
users | Query | Lista medlemmar i arbetsytan |
viewer | Query | Hämta info om autentiserad användare |
issueCreate | Mutation | Skapa ett nytt ärende |
issueUpdate | Mutation | Uppdatera ett befintligt ärende |
commentCreate | Mutation | Lägg till en kommentar på ett ärende |
webhookCreate | Mutation | Registrera 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 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'] }); }});Hastighetsbegränsningar
Linear tillämpar hastighetsbegränsningar på sitt GraphQL-API:
| Begränsningstyp | Värde |
|---|---|
| Förfrågningshastighet | 1 500 förfrågningar per timme per API-nyckel |
| Frågekomplexitet | 10 000 komplexitetspoäng per förfrågan |
| Paginering | 250 noder max per sida (standard 50) |
| Webhooks | Obegrä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
| Problem | Orsak | Lösning |
|---|---|---|
| 401 Unauthorized | Ogiltig eller återkallad API-nyckel | Generera en ny API-nyckel i Linear Settings |
| Query-fel | Ogiltig GraphQL-syntax | Validera queries i Linears API-utforskare |
| Saknade ärenden | Teamåtkomst begränsad | Se till att API-nyckelns ägare har åtkomst till målteam |
| Webhook utlöses inte | Fel URL eller inaktiverad | Kontrollera webhook-status under Linear Settings > API > Webhooks |
| Ofullständig paginering | Saknar after-cursor | Se till att pagineringen loopar tills hasNextPage är false |
Felsökningsläge
connectors: linear: debug: true log_level: verbose log_queries: trueTesta anslutning
tajo connectors test linear# ✓ GraphQL API connection successful# ✓ Workspace access verified# ✓ Team list readable# ✓ Issue query operational# ✓ Webhook registration availableBästa praxis
- Använd webhooks för realtid - Registrera webhooks istället för polling vid ärendeändringar
- Filtrera per team - Synka bara ärenden från relevanta team för att minska API-användning
- Optimera GraphQL-queries - Begär bara nödvändiga fält för att hålla dig inom komplexitetsgränserna
- Mappa etiketter till segment - Använd Linear-etiketter för att driva Brevo-kontaktsegmentering
- Hantera paginering - Kontrollera alltid
hasNextPageoch användendCursorför fullständig data - 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