---
title: "Linear Konektor"
description: "Kompletan vodič za integraciju Lineara za sinkronizaciju problema, projekata i podataka o timskim aktivnostima s Brevom putem Taja."
url: https://tajo.io/hr/docs/connectors/custom/linear/
markdown: https://tajo.io/hr/docs/connectors/custom/linear.md
lang: hr-HR
robots: noindex
---

Zatražite rani pristup

Unesite ime i poslovnu adresu e-pošte. Poslat ćemo vam poveznicu za potvrdu zahtjeva za pristup Taju.

# Linear Konektor

Status konektora: Planirano Još nije izrađeno. Tajo danas ne pokreće ovaj konektor.

| Izvorno polje | Odredišno polje | Primjer vrijednosti |
| --- | --- | --- |
| `record.id` | `source_id` | `record_1042` |
| `record.updated_at` | `updated_at` | `2026-10-18T08:00:00Z` |
| `record.value` | `value` | `sample_value` |

Povežite svoj Linear radni prostor s Brevom za praćenje problema prema klijentima, obavijesti o ažuriranjima proizvoda i kampanje o razvojnim prekretnicama putem Taja.

## Pregled

| Svojstvo | Vrijednost |
| --- | --- |
| **Platforma** | Linear |
| **Kategorija** | Prilagođeno |
| **Složenost postavljanja** | Jednostavno |
| **Službena integracija** | Ne |
| **Sinkronizirani podaci** | Problemi, Projekti, Korisnici, Događaji |
| **Vrsta API-ja** | GraphQL API |
| **Autentifikacija** | OAuth 2.0 / Personal API Key |
| **Osnovni URL** | `https://api.linear.app/graphql` |

## Značajke

- **Sinkronizacija događaja problema** - Prosljeđujte događaje stvaranja, ažuriranja i dovršetka problema na Brevo vremenske linije kontakata
- **Praćenje projektnih prekretnica** - Pokrećite Brevo kampanje kada projekti dostignu ključne prekretnice
- **Povezivanje problema s klijentima** - Povežite Linear probleme s Brevo kontaktima radi vidljivosti podrške
- **Segmentacija temeljena na oznakama** - Mapirajte Linear oznake na Brevo atribute kontakata
- **Analitika ciklusa** - Sinkronizirajte podatke o dovršetku sprinta/ciklusa za izvješćivanje o timskim performansama
- **Automatizacija pokretana webhookovima** - Prosljeđivanje događaja u stvarnom vremenu putem Linear webhookova

## Preduvjeti

Prije nego što počnete, osigurajte da imate:

1. Linear radni prostor s administratorskim pristupom
2. Konfigurirani Personal API ključ ili OAuth aplikaciju
3. Brevo račun s API pristupom
4. Tajo račun s aktivnom pretplatom

## Autentifikacija

Linear podržava Personal API ključeve i OAuth 2.0.

### Opcija 1: Personal API Key

1. Idite na **Linear** > **Postavke** > **API** > **Personal API keys**
2. Kliknite **Create key**
3. Nazovite ga “Tajo Integration”
4. Kopirajte generirani ključ (počinje s `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 } }"}'
```

### Opcija 2: OAuth 2.0

Za integracije koje opslužuju više radnih prostora:

1. Stvorite OAuth aplikaciju na [linear.app/settings/api/applications](https://linear.app/settings/api/applications)
2. Konfigurirajte redirect URI: `https://app.tajo.io/callbacks/linear`
3. Zatražite opsege: `read`, `write`, `issues:create`, `comments:create`

GraphQL API

Linear isključivo koristi GraphQL API. Svi upiti i mutacije prolaze kroz jednu krajnju točku: `https://api.linear.app/graphql`. Tajo automatski rukuje svim konstrukcijama GraphQL upita.

### Povezivanje s Tajom

```bash
# Korištenjem Personal API Key-a
tajo connectors install linear \
  --api-key $LINEAR_API_KEY

# Korištenjem OAuth-a
tajo connectors install linear \
  --client-id $LINEAR_CLIENT_ID \
  --client-secret $LINEAR_CLIENT_SECRET
```

## Konfiguracija

### Osnovna konfiguracija

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

### Mapiranje polja

Mapirajte Linear korisničke i podatke o problemima na Brevo atribute:

```yaml
field_mapping:
  # Korisnička polja
  id: LINEAR_USER_ID
  email: email
  name: FIRSTNAME

  # Metrike problema mapirane na kontaktne događaje
  last_issue_identifier: LAST_LINEAR_ISSUE
  last_issue_state: LAST_ISSUE_STATUS
  last_issue_priority: LAST_ISSUE_PRIORITY
  total_issues: LINEAR_ISSUE_COUNT

  # Podaci o projektu
  current_project: ACTIVE_PROJECT
  team_key: LINEAR_TEAM
```

### Mapiranje događaja

```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 krajnje točke

Linear koristi jednu GraphQL krajnju točku. Ključni upiti i mutacije koje Tajo koristi:

| Operacija | Vrsta | Namjena |
| --- | --- | --- |
| `issues` | Upit | Popis i filtriranje problema |
| `issue` | Upit | Dohvaćanje jednog problema po ID-u |
| `projects` | Upit | Popis svih projekata |
| `cycles` | Upit | Popis ciklusa (sprintova) |
| `teams` | Upit | Popis timova radnog prostora |
| `users` | Upit | Popis članova radnog prostora |
| `viewer` | Upit | Dohvaćanje podataka autentificiranog korisnika |
| `issueCreate` | Mutacija | Stvaranje novog problema |
| `issueUpdate` | Mutacija | Ažuriranje postojećeg problema |
| `commentCreate` | Mutacija | Dodavanje komentara na problem |
| `webhookCreate` | Mutacija | Registracija webhookova |

### Primjer GraphQL upita

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

## Primjeri koda

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

### Sinkronizacija problema

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

### Rukovanje Linear Webhooksima

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

  // Provjera webhook potpisa
  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');
});
```

### Stvaranje problema iz Brevo događaja

```javascript
// Stvaranje Linear problema kada Brevo kontakt pošalje zahtjev
tajo.events.on('contact.event', async (event) => {
  if (event.name === 'FEATURE_REQUEST') {
    await tajo.connectors.create('linear', {
      teamId: 'ENG',
      title: `Zahtjev za značajku: ${event.data.subject}`,
      description: event.data.description,
      priority: 3,
      labelIds: ['feature-request']
    });
  }
});
```

## Ograničenja brzine

Linear primjenjuje ograničenja brzine na svom GraphQL API-ju:

| Vrsta ograničenja | Vrijednost |
| --- | --- |
| **Stopa zahtjeva** | 1.500 zahtjeva po satu po API ključu |
| **Složenost upita** | 10.000 bodova složenosti po zahtjevu |
| **Paginacija** | Maks. 250 čvorova po stranici (zadano 50) |
| **Webhooks** | Neograničeni dolazni događaji |

Proračun složenosti

Linear koristi sustav ograničenja brzine temeljen na složenosti. Jednostavni upiti koštaju manje bodova. Tajo optimizira upite za minimiziranje složenosti zatraživanjem samo potrebnih polja i korištenjem učinkovite paginacije.

Linear vraća `429 Too Many Requests` sa zaglavljem `Retry-After` kada su prekoračena ograničenja.

## Rješavanje problema

### Uobičajeni problemi

| Problem | Uzrok | Rješenje |
| --- | --- | --- |
| 401 Unauthorized | Nevažeći ili opozvani API ključ | Generirajte novi API ključ u Linear Postavkama |
| Greške upita | Nevažeća GraphQL sintaksa | Validirajte upite koristeći Linear API explorer |
| Nedostaju problemi | Pristup timu ograničen | Osigurajte da vlasnik API ključa ima pristup ciljnim timovima |
| Webhook se ne aktivira | Netočan URL ili onemogućen | Provjerite status webhookova u Linear Postavke > API > Webhooks |
| Paginacija nepotpuna | Nedostaje `after` kursor | Osigurajte da paginacijske petlje nastavljaju dok `hasNextPage` nije false |

### Način otklanjanja grešaka

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

### Testiranje veze

```bash
tajo connectors test linear
# ✓ GraphQL API veza uspješna
# ✓ Pristup radnom prostoru potvrđen
# ✓ Popis timova čitljiv
# ✓ Upit problema operativan
# ✓ Registracija webhookova dostupna
```

## Preporučene prakse

1. **Koristite webhookove za sinkronizaciju u stvarnom vremenu** - Registrirajte webhookove umjesto anketiranja za promjene problema
2. **Filtrirajte po timu** - Sinkronizirajte samo probleme iz relevantnih timova za smanjenje korištenja API-ja
3. **Optimizirajte GraphQL upite** - Zatražite samo potrebna polja kako biste ostali unutar ograničenja složenosti
4. **Mapirajte oznake na segmente** - Koristite Linear oznake za pokretanje segmentacije Brevo kontakata
5. **Rukujte paginacijom** - Uvijek provjeravajte `hasNextPage` i koristite `endCursor` za potpune podatke
6. **Verificirajte webhook potpise** - Uvijek validirajte zaglavlje `Linear-Signature`

## Sigurnost

- **Autentifikacija API ključem** - Osobni ključevi ograničeni na radni prostor
- **OAuth 2.0** - Siguran tok autorizacije za integracije s više radnih prostora
- **Samo HTTPS** - Sva API komunikacija šifrirana putem TLS 1.2+
- **Webhook potpisi** - Verifikacija potpisa temeljena na HMAC-u
- **Šifrirano pohranjivanje** - API ključevi šifrirani u mirovanju u Taju
- **SOC 2 usklađenost** - Linear platforma je SOC 2 Type II certificirana

## Povezani resursi

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