---
title: "Konektor Linear"
description: "Kompletní průvodce integrací Linear pro synchronizaci issues, projektů a dat o aktivitě týmu s Brevo přes Tajo."
url: https://tajo.io/cz/docs/connectors/custom/linear/
markdown: https://tajo.io/cz/docs/connectors/custom/linear.md
lang: cs-CZ
robots: noindex
---

Požádejte o přednostní přístup

Zadejte své jméno a pracovní e-mailovou adresu. Pošleme vám odkaz pro potvrzení žádosti o přístup k Tajo.

# Konektor Linear

Stav konektoru: Plánováno Zatím nevytvořeno. Tajo tento konektor dnes neprovozuje.

| Zdrojové pole | Cílové pole | Ukázková hodnota |
| --- | --- | --- |
| `record.id` | `source_id` | `record_1042` |
| `record.updated_at` | `updated_at` | `2026-10-18T08:00:00Z` |
| `record.value` | `value` | `sample_value` |

Propojte svůj pracovní prostor Linear s Brevo pro sledování issues orientovaných na zákazníky, notifikace o aktualizacích produktu a kampaně k vývojovým milníkům přes Tajo.

## Přehled

| Vlastnost | Hodnota |
| --- | --- |
| **Platforma** | Linear |
| **Kategorie** | Vlastní |
| **Složitost nastavení** | Snadná |
| **Oficiální integrace** | Ne |
| **Synchronizovaná data** | Issues, Projekty, Uživatelé, Události |
| **Typ API** | GraphQL API |
| **Ověření** | OAuth 2.0 / Osobní API klíč |
| **Základní URL** | `https://api.linear.app/graphql` |

## Funkce

- **Synchronizace událostí issues** – Přeposílejte události vytvoření, aktualizace a dokončení issues do časových os kontaktů Brevo
- **Sledování projektových milníků** – Spouštějte kampaně Brevo, když projekty dosáhnou klíčových milníků
- **Propojení zákaznických issues** – Přidružujte issues Linear ke kontaktům Brevo pro viditelnost podpory
- **Segmentace podle štítků** – Mapujte štítky Linear na atributy kontaktů Brevo
- **Analýza cyklů** – Synchronizujte data dokončení sprintů/cyklů pro reporting výkonu týmu
- **Automatizace řízená webhooky** – Přeposílání událostí v reálném čase přes webhooky Linear

## Předpoklady

Než začnete, ujistěte se, že máte:

1. Pracovní prostor Linear s administrátorským přístupem
2. Nakonfigurovaný osobní API klíč nebo OAuth aplikaci
3. Účet Brevo s přístupem k API
4. Účet Tajo s aktivním předplatným

## Ověření

Linear podporuje osobní API klíče a OAuth 2.0.

### Možnost 1: Osobní API klíč

1. Přejděte do **Linear** > **Settings** > **API** > **Personal API keys**
2. Klikněte na **Create key**
3. Pojmenujte ho “Tajo Integration”
4. Zkopírujte vygenerovaný klíč (začíná `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žnost 2: OAuth 2.0

Pro integrace obsluhující více pracovních prostorů:

1. Vytvořte OAuth aplikaci na [linear.app/settings/api/applications](https://linear.app/settings/api/applications)
2. Nakonfigurujte URI přesměrování: `https://app.tajo.io/callbacks/linear`
3. Požadujte rozsahy: `read`, `write`, `issues:create`, `comments:create`

GraphQL API

Linear výhradně používá GraphQL API. Všechny dotazy a mutace procházejí jediným koncovým bodem: `https://api.linear.app/graphql`. Tajo zpracovává veškerou konstrukci GraphQL dotazů automaticky.

### Připojení k Tajo

```bash
# Použití osobního API klíče
tajo connectors install linear \
  --api-key $LINEAR_API_KEY

# Použití OAuth
tajo connectors install linear \
  --client-id $LINEAR_CLIENT_ID \
  --client-secret $LINEAR_CLIENT_SECRET
```

## Konfigurace

### Základní nastavení

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

### Mapování polí

Mapujte data uživatelů a issues Linear na atributy Brevo:

```yaml
field_mapping:
  # Pole uživatele
  id: LINEAR_USER_ID
  email: email
  name: FIRSTNAME

  # Metriky issues mapované na události kontaktů
  last_issue_identifier: LAST_LINEAR_ISSUE
  last_issue_state: LAST_ISSUE_STATUS
  last_issue_priority: LAST_ISSUE_PRIORITY
  total_issues: LINEAR_ISSUE_COUNT

  # Data projektu
  current_project: ACTIVE_PROJECT
  team_key: LINEAR_TEAM
```

### Mapování událostí

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

## Koncové body API

Linear používá jediný GraphQL koncový bod. Klíčové dotazy a mutace používané Tajo:

| Operace | Typ | Účel |
| --- | --- | --- |
| `issues` | Dotaz | Výpis a filtrování issues |
| `issue` | Dotaz | Získání jedné issue podle ID |
| `projects` | Dotaz | Výpis všech projektů |
| `cycles` | Dotaz | Výpis cyklů (sprintů) |
| `teams` | Dotaz | Výpis týmů pracovního prostoru |
| `users` | Dotaz | Výpis členů pracovního prostoru |
| `viewer` | Dotaz | Získání informací o ověřeném uživateli |
| `issueCreate` | Mutace | Vytvoření nové issue |
| `issueUpdate` | Mutace | Aktualizace existující issue |
| `commentCreate` | Mutace | Přidání komentáře k issue |
| `webhookCreate` | Mutace | Registrace webhooku |

### Příklad GraphQL dotazu

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

## Příklady kódu

### Inicializace konektoru

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

### Synchronizace 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
// }
```

### Zpracování webhooků Linear

```javascript
app.post('/webhooks/linear', async (req, res) => {
  const event = req.body;

  // Ověření podpisu webhooku
  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');
});
```

### Vytvoření issue z události Brevo

```javascript
// Vytvoření issue Linear, když kontakt Brevo odešle požadavek
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']
    });
  }
});
```

## Omezení rychlosti

Linear aplikuje omezení rychlosti na svém GraphQL API:

| Typ limitu | Hodnota |
| --- | --- |
| **Rychlost požadavků** | 1 500 požadavků za hodinu na API klíč |
| **Složitost dotazu** | 10 000 bodů složitosti na požadavek |
| **Stránkování** | Max 250 uzlů na stránku (výchozí 50) |
| **Webhooky** | Neomezené příchozí události |

Rozpočet složitosti

Linear používá systém omezení rychlosti na základě složitosti. Jednoduché dotazy stojí méně bodů. Tajo optimalizuje dotazy pro minimalizaci složitosti tím, že požaduje pouze potřebná pole a používá efektivní stránkování.

Linear vrací `429 Too Many Requests` s hlavičkou `Retry-After`, když jsou překročeny limity.

## Řešení problémů

### Časté problémy

| Problém | Příčina | Řešení |
| --- | --- | --- |
| 401 Unauthorized | Neplatný nebo odvolaný API klíč | Vygenerujte nový API klíč v nastavení Linear |
| Chyby dotazů | Neplatná syntaxe GraphQL | Ověřte dotazy pomocí průzkumníka API Linear |
| Chybějící issues | Přístup k týmu omezen | Ujistěte se, že vlastník API klíče má přístup k cílovým týmům |
| Webhook se nespouští | Nesprávná URL nebo deaktivována | Zkontrolujte stav webhooku v Linear Settings > API > Webhooks |
| Stránkování neúplné | Chybějící kurzor `after` | Zajistěte, aby smyčky stránkování pokračovaly, dokud `hasNextPage` není false |

### Režim ladění

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

### Test připojení

```bash
tajo connectors test linear
# ✓ Připojení GraphQL API úspěšné
# ✓ Přístup k pracovnímu prostoru ověřen
# ✓ Seznam týmů čitelný
# ✓ Dotaz na issues funkční
# ✓ Registrace webhooků dostupná
```

## Osvědčené postupy

1. **Používejte webhooky pro real-time** – Registrujte webhooky místo pollingu pro změny issues
2. **Filtrujte podle týmu** – Synchronizujte pouze issues z relevantních týmů ke snížení využití API
3. **Optimalizujte GraphQL dotazy** – Požadujte pouze potřebná pole pro dodržení limitů složitosti
4. **Mapujte štítky na segmenty** – Používejte štítky Linear k řízení segmentace kontaktů Brevo
5. **Zpracovávejte stránkování** – Vždy kontrolujte `hasNextPage` a používejte `endCursor` pro úplná data
6. **Ověřujte podpisy webhooků** – Vždy validujte hlavičku `Linear-Signature`

## Zabezpečení

- **Ověření API klíčem** – Osobní klíče omezeny na pracovní prostor
- **OAuth 2.0** – Bezpečný autorizační flow pro integrace s více pracovními prostory
- **Pouze HTTPS** – Veškerá komunikace API šifrována přes TLS 1.2+
- **Podpisy webhooků** – Ověření podpisu na bázi HMAC
- **Šifrované úložiště** – API klíče šifrované v klidu v Tajo
- **Soulad s SOC 2** – Platforma Linear je certifikována podle SOC 2 Type II

## Související zdroje

- [Konektor GitHub](https://tajo.io/cz/docs/connectors/custom/github)
- [Konektor Jira](https://tajo.io/cz/docs/connectors/custom/jira)
- [Konektor Notion](https://tajo.io/cz/docs/connectors/custom/notion)
- [API kontaktů Brevo](https://tajo.io/cz/docs/contact-management)
