---
title: "Linear konektor"
description: "Kompletný sprievodca integráciou Linear na synchronizáciu issues, projektov a dát tímovej aktivity s Brevo cez Tajo."
url: https://tajo.io/sk/docs/connectors/custom/linear/
markdown: https://tajo.io/sk/docs/connectors/custom/linear.md
lang: sk-SK
robots: noindex
---

Požiadajte o skorý prístup

Zadajte svoje meno a pracovnú e-mailovú adresu. Pošleme vám odkaz na potvrdenie žiadosti o prístup k Tajo.

# Linear konektor

Stav konektora: Plánované Zatiaľ nevytvorené. Tajo tento konektor dnes neprevádzkuje.

| Zdrojové pole | Cieľové pole | Ukážková hodnota |
| --- | --- | --- |
| `record.id` | `source_id` | `record_1042` |
| `record.updated_at` | `updated_at` | `2026-10-18T08:00:00Z` |
| `record.value` | `value` | `sample_value` |

Prepoj svoj Linear workspace s Brevo pre sledovanie issues zákazníkov, notifikácie o aktualizáciách produktu a kampane pri vývojových míľnikoch cez Tajo.

## Prehľad

| Vlastnosť | Hodnota |
| --- | --- |
| **Platforma** | Linear |
| **Kategória** | Vlastná |
| **Zložitosť nastavenia** | Ľahké |
| **Oficiálna integrácia** | Nie |
| **Synchronizované dáta** | Issues, Projekty, Používatelia, Udalosti |
| **Typ API** | GraphQL API |
| **Autentifikácia** | OAuth 2.0 / Personal API Key |
| **Base URL** | `https://api.linear.app/graphql` |

## Funkcie

- **Synchronizácia udalostí issues** - Preposielaj udalosti vytvorenia, aktualizácie a dokončenia issues do časových osí kontaktov v Brevo
- **Sledovanie míľnikov projektov** - Spúšťaj kampane Brevo, keď projekty dosiahnu kľúčové míľniky
- **Prepojenie issues zákazníkov** - Priraď Linear issues k kontaktom Brevo pre viditeľnosť podpory
- **Segmentácia podľa labelov** - Namapuj lineárne labels na atribúty kontaktov v Brevo
- **Analytika cyklov** - Synchronizuj dáta o dokončení sprintov/cyklov pre reportovanie výkonu tímu
- **Webhook automatizácia** - Preposielanie udalostí v reálnom čase cez Linear webhooky

## Predpoklady

Predtým, než začneš, uisti sa, že máš:

1. Linear workspace s admin prístupom
2. Nakonfigurovaný Personal API kľúč alebo OAuth aplikáciu
3. Brevo účet s API prístupom
4. Tajo účet s aktívnym predplatným

## Autentifikácia

Linear podporuje Personal API kľúče a OAuth 2.0.

### Možnosť 1: Personal API Key

1. Choď na **Linear** > **Settings** > **API** > **Personal API keys**
2. Klikni na **Create key**
3. Pomenuj ho “Tajo Integration”
4. Skopíruj vygenerovaný kľúč (začína sa `lin_api_`)

```bash
curl -X POST https://api.linear.app/graphql \
  -H "Authorization: $LINEAR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"query": "{ viewer { id name email } }"}'
```

### Možnosť 2: OAuth 2.0

Pre integrácie obsluhujúce viacero workspace:

1. Vytvor OAuth aplikáciu na [linear.app/settings/api/applications](https://linear.app/settings/api/applications)
2. Nakonfiguruj redirect URI: `https://app.tajo.io/callbacks/linear`
3. Požiadaj o scopes: `read`, `write`, `issues:create`, `comments:create`

GraphQL API

Linear výhradne používa GraphQL API. Všetky dopyty a mutácie prechádzajú jediným endpointom: `https://api.linear.app/graphql`. Tajo spravuje všetky konštrukcie GraphQL dopytov automaticky.

### Pripojenie k Tajo

```bash
# 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
```

## Konfigurácia

### Základné nastavenie

```yaml
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
```

### Mapovanie polí

Namapuj dáta používateľov a issues Linear na atribúty Brevo:

```yaml
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
```

### Mapovanie udalostí

```yaml
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 endpointy

Linear používa jeden GraphQL endpoint. Kľúčové dopyty a mutácie používané v Tajo:

| Operácia | Typ | Účel |
| --- | --- | --- |
| `issues` | Dopyt | Zoznam a filtrovanie issues |
| `issue` | Dopyt | Jedna issue podľa ID |
| `projects` | Dopyt | Zoznam všetkých projektov |
| `cycles` | Dopyt | Zoznam cyklov (sprintov) |
| `teams` | Dopyt | Zoznam tímov workspace |
| `users` | Dopyt | Zoznam členov workspace |
| `viewer` | Dopyt | Informácie o autentifikovanom používateľovi |
| `issueCreate` | Mutácia | Vytvorenie novej issue |
| `issueUpdate` | Mutácia | Aktualizácia existujúcej issue |
| `commentCreate` | Mutácia | Pridanie komentára k issue |
| `webhookCreate` | Mutácia | Registrácia webhooku |

### Príklad GraphQL dopytu

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

## Ukážky kódu

### Inicializácia konektora

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

### Synchronizácia issues

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

### Spracovanie Linear webhookov

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

### Vytvorenie issue z udalosti Brevo

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

## Obmedzenia rýchlosti

Linear uplatňuje obmedzenia rýchlosti na svojom GraphQL API:

| Typ limitu | Hodnota |
| --- | --- |
| **Frekvencia požiadaviek** | 1 500 požiadaviek za hodinu na API kľúč |
| **Komplexnosť dopytu** | 10 000 bodov komplexnosti na požiadavku |
| **Stránkovanie** | Max 250 uzlov na stránku (predvolene 50) |
| **Webhooky** | Neobmedzené prichádzajúce udalosti |

Rozpočet komplexnosti

Linear používa systém obmedzovania rýchlosti na základe komplexnosti. Jednoduché dopyty stoja menej bodov. Tajo optimalizuje dopyty na minimalizáciu komplexnosti požadovaním iba potrebných polí a efektívnym stránkovaním.

Linear vracia `429 Too Many Requests` s hlavičkou `Retry-After` pri prekročení limitov.

## Riešenie problémov

### Bežné problémy

| Problém | Príčina | Riešenie |
| --- | --- | --- |
| 401 Unauthorized | Neplatný alebo zrušený API kľúč | Vygeneruj nový API kľúč v Linear Settings |
| Chyby dopytu | Neplatná GraphQL syntax | Validuj dopyty pomocou Linear API exploreru |
| Chýbajúce issues | Obmedzený prístup k tímu | Uisti sa, že vlastník API kľúča má prístup k cieľovým tímom |
| Webhook sa nespúšťa | Nesprávna URL alebo zakázaná | Skontroluj stav webhooku v Linear Settings > API > Webhooks |
| Stránkovanie je neúplné | Chýbajúci kurzor `after` | Uisti sa, že slučky stránkovania pokračujú, kým `hasNextPage` nie je false |

### Debug režim

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

### Test pripojenia

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

## Odporúčané postupy

1. **Použi webhooky pre real-time** - Zaregistruj webhooky namiesto pollingu zmien issues
2. **Filtruj podľa tímu** - Synchronizuj iba issues z relevantných tímov na zníženie využitia API
3. **Optimalizuj GraphQL dopyty** - Požaduj iba potrebné polia, aby si zostal v limitoch komplexnosti
4. **Namapuj labels na segmenty** - Použi Linear labels na riadenie segmentácie kontaktov v Brevo
5. **Spravuj stránkovanie** - Vždy skontroluj `hasNextPage` a použi `endCursor` pre kompletné dáta
6. **Overuj podpisy webhookov** - Vždy validuj hlavičku `Linear-Signature`

## Bezpečnosť

- **Autentifikácia API kľúčom** - Osobné kľúče obmedzené na workspace
- **OAuth 2.0** - Bezpečný autorizačný flow pre integrácie s viacerými workspace
- **Iba HTTPS** - Všetka API komunikácia šifrovaná cez TLS 1.2+
- **Podpisy webhookov** - Overenie podpisu na základe HMAC
- **Šifrované úložisko** - API kľúče šifrované v pokoji v Tajo
- **SOC 2 súlad** - Platforma Linear je certifikovaná podľa SOC 2 Type II

## Súvisiace zdroje

- [GitHub konektor](https://tajo.io/sk/docs/connectors/custom/github)
- [Jira konektor](https://tajo.io/sk/docs/connectors/custom/jira)
- [Notion konektor](https://tajo.io/sk/docs/connectors/custom/notion)
- [Brevo Contacts API](https://tajo.io/sk/docs/contact-management)
