Linear Connector

Verbinde deinen Linear-Workspace über Tajo mit Brevo für kundenorientiertes Issue-Tracking, Produkt-Update-Benachrichtigungen und Entwicklungs-Meilenstein-Kampagnen.

Überblick

EigenschaftWert
PlattformLinear
KategorieCustom
EinrichtungsaufwandEinfach
Offizielle IntegrationNein
Synchronisierte DatenIssues, Projekte, Nutzer:innen, Events
API-TypGraphQL API
AuthentifizierungOAuth 2.0 / Persönlicher API-Key
Basis-URLhttps://api.linear.app/graphql

Funktionen

  • Issue-Event-Synchronisierung - Leite Issue-Erstell-, Update- und Abschluss-Events in Brevo-Kontaktverläufe weiter
  • Projekt-Meilenstein-Tracking - Löse Brevo-Kampagnen aus, wenn Projekte wichtige Meilensteine erreichen
  • Kundenbezogene Issue-Verknüpfung - Verknüpfe Linear-Issues mit Brevo-Kontakten für Support-Sichtbarkeit
  • Label-basierte Segmentierung - Ordne Linear-Labels Brevo-Kontaktattributen zu
  • Cycle-Analytics - Synchronisiere Sprint-/Cycle-Abschlussdaten für das Team-Performance-Reporting
  • Webhook-gesteuerte Automatisierung - Echtzeit-Event-Weiterleitung über Linear-Webhooks

Voraussetzungen

Bevor du beginnst, stelle sicher, dass du Folgendes hast:

  1. Einen Linear-Workspace mit Admin-Zugriff
  2. Einen persönlichen API-Key oder eine konfigurierte OAuth-Anwendung
  3. Ein Brevo-Konto mit API-Zugriff
  4. Ein Tajo-Konto mit aktivem Abonnement

Authentifizierung

Linear unterstützt persönliche API-Keys und OAuth 2.0.

Option 1: Persönlicher API-Key

  1. Gehe in Linear zu Settings > API > Personal API keys
  2. Klicke auf Create key
  3. Benenne ihn mit “Tajo Integration”
  4. Kopiere den generierten Key (beginnt mit 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 } }"}'

Option 2: OAuth 2.0

Für Integrationen, die mehrere Workspaces bedienen:

  1. Erstelle eine OAuth-Anwendung unter linear.app/settings/api/applications
  2. Konfiguriere die Redirect-URI: https://app.tajo.io/callbacks/linear
  3. Fordere die Scopes an: read, write, issues:create, comments:create

GraphQL API

Linear verwendet ausschließlich eine GraphQL-API. Alle Queries und Mutations laufen über einen einzigen Endpunkt: https://api.linear.app/graphql. Tajo übernimmt die Erstellung aller GraphQL-Abfragen automatisch.

Verbindung zu Tajo herstellen

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

Grundeinrichtung

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

Feldzuordnung

Ordne Linear-Nutzer:innen- und Issue-Daten Brevo-Attributen zu:

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

Event-Zuordnung

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

Linear nutzt einen einzigen GraphQL-Endpunkt. Zentrale Queries und Mutations, die Tajo verwendet:

OperationTypZweck
issuesQueryIssues auflisten und filtern
issueQueryEinzelnes Issue per ID abrufen
projectsQueryAlle Projekte auflisten
cyclesQueryCycles (Sprints) auflisten
teamsQueryWorkspace-Teams auflisten
usersQueryWorkspace-Mitglieder auflisten
viewerQueryInformationen zur:zum authentifizierten Nutzer:in abrufen
issueCreateMutationNeues Issue erstellen
issueUpdateMutationBestehendes Issue aktualisieren
commentCreateMutationKommentar zu einem Issue hinzufügen
webhookCreateMutationWebhook registrieren

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

Code-Beispiele

Connector initialisieren

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

Issues synchronisieren

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

Linear-Webhooks verarbeiten

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

Issue aus Brevo-Event erstellen

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

Ratenbegrenzungen

Linear erzwingt Ratenbegrenzungen auf seiner GraphQL-API:

Limit-TypWert
Anfragerate1.500 Anfragen pro Stunde pro API-Key
Query-Komplexität10.000 Komplexitätspunkte pro Anfrage
PaginierungMax. 250 Nodes pro Seite (Standard 50)
WebhooksUnbegrenzt eingehende Events

Komplexitätsbudget

Linear verwendet ein komplexitätsbasiertes Rate-Limiting-System. Einfachere Queries kosten weniger Punkte. Tajo optimiert Queries, um die Komplexität zu minimieren, indem nur benötigte Felder angefordert und effiziente Paginierung verwendet wird.

Linear liefert 429 Too Many Requests mit einem Retry-After-Header zurück, wenn Limits überschritten werden.

Fehlerbehebung

Häufige Probleme

ProblemUrsacheLösung
401 UnauthorizedUngültiger oder widerrufener API-KeyNeuen API-Key in den Linear-Einstellungen generieren
Query-FehlerUngültige GraphQL-SyntaxQueries mit dem Linear-API-Explorer validieren
Fehlende IssuesTeam-Zugriff eingeschränktSicherstellen, dass der/die API-Key-Inhaber:in Zugriff auf Ziel-Teams hat
Webhook wird nicht ausgelöstFalsche URL oder deaktiviertWebhook-Status in Linear-Settings > API > Webhooks prüfen
Paginierung unvollständigFehlender after-CursorSicherstellen, dass die Paginierung läuft, bis hasNextPage false ist

Debug-Modus

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

Verbindung testen

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

Best Practices

  1. Webhooks für Echtzeit nutzen - Registriere Webhooks statt auf Issue-Änderungen zu pollen
  2. Nach Team filtern - Synchronisiere nur Issues aus relevanten Teams, um die API-Nutzung zu reduzieren
  3. GraphQL-Queries optimieren - Fordere nur benötigte Felder an, um innerhalb der Komplexitätslimits zu bleiben
  4. Labels in Segmente überführen - Nutze Linear-Labels für die Brevo-Kontaktsegmentierung
  5. Paginierung handhaben - Prüfe stets hasNextPage und verwende endCursor für vollständige Daten
  6. Webhook-Signaturen prüfen - Validiere stets den Linear-Signature-Header

Sicherheit

  • API-Key-Authentifizierung - Persönliche Keys auf den Workspace beschränkt
  • OAuth 2.0 - Sicherer Autorisierungs-Flow für Integrationen über mehrere Workspaces
  • Nur HTTPS - Die gesamte API-Kommunikation ist per TLS 1.2+ verschlüsselt
  • Webhook-Signaturen - HMAC-basierte Signaturprüfung
  • Verschlüsselte Speicherung - API-Keys werden in Tajo verschlüsselt gespeichert
  • SOC-2-Konformität - Die Linear-Plattform ist SOC-2-Type-II-zertifiziert

Verwandte Ressourcen

Subscribe to updates

developer-docs

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

auto-detect
AI-Assistent

Hallo! Fragen Sie mich alles über die Dokumentation.