---
title: "Linear Connector"
description: "Popoln vodnik za integracijo Linear za sinhronizacijo težav, projektov in podatkov o aktivnosti ekipe z Brevo prek Tajo."
url: https://tajo.io/sl/docs/connectors/custom/linear/
markdown: https://tajo.io/sl/docs/connectors/custom/linear.md
lang: sl-SI
robots: noindex
---

Zaprosite za zgodnji dostop

Vnesite svoje ime in službeni e-poštni naslov. Poslali vam bomo povezavo za potrditev zahteve za dostop do Taja.

# Linear Connector

Stanje konektorja: Načrtovano Še ni izdelano. Tajo danes ne poganja tega konektorja.

| Izvorno polje | Ciljno polje | Vzorčna vrednost |
| --- | --- | --- |
| `record.id` | `source_id` | `record_1042` |
| `record.updated_at` | `updated_at` | `2026-10-18T08:00:00Z` |
| `record.value` | `value` | `sample_value` |

Poveži svoje delovno okolje Linear z Brevo za sledenje težavam, ki so vidne strankam, obvestila o posodobitvah produkta in kampanje ob razvojnih mejnikih prek Tajo.

## Pregled

| Lastnost | Vrednost |
| --- | --- |
| **Platforma** | Linear |
| **Kategorija** | Po meri |
| **Zahtevnost nastavitve** | Enostavna |
| **Uradna integracija** | Ne |
| **Sinhronizirani podatki** | Težave, projekti, uporabniki, dogodki |
| **Tip API** | GraphQL API |
| **Avtentikacija** | OAuth 2.0 / Osebni API ključ |
| **Osnovni URL** | `https://api.linear.app/graphql` |

## Funkcionalnosti

- **Sinhronizacija dogodkov težav** – posreduj dogodke ustvarjanja, posodabljanja in zaključevanja težav na časovnice stikov Brevo
- **Sledenje mejnikom projektov** – sproži kampanje Brevo, ko projekti dosežejo ključne mejnike
- **Povezovanje težav s strankami** – poveži težave Linear s stiki Brevo za pregled podpore
- **Segmentacija na osnovi oznak** – preslikaj oznake Linear v atribute stikov Brevo
- **Analitika ciklov** – sinhronizacija podatkov o zaključitvi sprintov/ciklov za poročanje o uspešnosti ekipe
- **Avtomatizacija na osnovi webhookov** – posredovanje dogodkov v realnem času prek webhookov Linear

## Predpogoji

Preden začneš, se prepričaj, da imaš:

1. Delovno okolje Linear z administratorskim dostopom
2. Konfiguriran osebni API ključ ali OAuth aplikacijo
3. Brevo račun z dostopom do API
4. Tajo račun z aktivno naročnino

## Avtentikacija

Linear podpira osebne API ključe in OAuth 2.0.

### Možnost 1: Osebni API ključ

1. Pojdi na **Linear** > **Settings** > **API** > **Personal API keys**
2. Klikni **Create key**
3. Poimenuj ga “Tajo Integration”
4. Kopiraj generirani ključ (začne se z `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

Za integracije, ki pokrivajo več delovnih okolij:

1. Ustvari OAuth aplikacijo na [linear.app/settings/api/applications](https://linear.app/settings/api/applications)
2. Nastavi URI za preusmeritev: `https://app.tajo.io/callbacks/linear`
3. Zahtevaj obsege: `read`, `write`, `issues:create`, `comments:create`

GraphQL API

Linear izključno uporablja GraphQL API. Vse poizvedbe in mutacije gredo skozi eno samo končno točko: `https://api.linear.app/graphql`. Tajo samodejno gradi vse GraphQL poizvedbe.

### Povezava s 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
```

## Konfiguracija

### Osnovna nastavitev

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

### Preslikava polj

Preslikaj podatke o uporabnikih in težavah Linear v atribute 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
```

### Preslikava dogodkov

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

## Končne točke API

Linear uporablja eno samo GraphQL končno točko. Ključne poizvedbe in mutacije, ki jih uporablja Tajo:

| Operacija | Tip | Namen |
| --- | --- | --- |
| `issues` | Poizvedba | Seznam in filtriranje težav |
| `issue` | Poizvedba | Pridobi posamezno težavo po ID |
| `projects` | Poizvedba | Seznam vseh projektov |
| `cycles` | Poizvedba | Seznam ciklov (sprintov) |
| `teams` | Poizvedba | Seznam ekip delovnega okolja |
| `users` | Poizvedba | Seznam članov delovnega okolja |
| `viewer` | Poizvedba | Pridobi informacije o avtenticiranem uporabniku |
| `issueCreate` | Mutacija | Ustvari novo težavo |
| `issueUpdate` | Mutacija | Posodobi obstoječo težavo |
| `commentCreate` | Mutacija | Dodaj komentar k težavi |
| `webhookCreate` | Mutacija | Registriraj webhook |

### Primer poizvedbe GraphQL

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

## Primeri kode

### Inicializacija konektorja

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

### Sinhronizacija težav

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

### Obravnava webhookov Linear

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

### Ustvarjanje težave iz dogodka 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']
    });
  }
});
```

## Omejitve hitrosti

Linear uveljavi omejitve hitrosti na svojem GraphQL API:

| Vrsta omejitve | Vrednost |
| --- | --- |
| **Hitrost zahtevkov** | 1.500 zahtevkov na uro na API ključ |
| **Kompleksnost poizvedbe** | 10.000 točk kompleksnosti na zahtevek |
| **Paginacija** | Največ 250 vozlišč na stran (privzeto 50) |
| **Webhooks** | Neomejeni dohodne dogodki |

Proračun kompleksnosti

Linear uporablja sistem omejevanja hitrosti na osnovi kompleksnosti. Enostavne poizvedbe stanejo manj točk. Tajo optimizira poizvedbe za minimizacijo kompleksnosti z zahtevanjem samo potrebnih polj in učinkovito paginacijo.

Linear vrne `429 Too Many Requests` z glavo `Retry-After`, ko so omejitve prekoračene.

## Odpravljanje težav

### Pogoste težave

| Težava | Vzrok | Rešitev |
| --- | --- | --- |
| 401 Unauthorized | Neveljaven ali preklican API ključ | Ustvari nov API ključ v Linear Settings |
| Napake poizvedbe | Napačna sintaksa GraphQL | Potrdi poizvedbe z API Explorer Linear |
| Manjkajo težave | Dostop do ekipe je omejen | Zagotovi, da ima lastnik API ključa dostop do ciljnih ekip |
| Webhook se ne sproži | Napačen URL ali onemogočen | Preveri status webhookov v Linear Settings > API > Webhooks |
| Nepopolna paginacija | Manjkajoči kazalec `after` | Zagotovi, da zanke paginacije trajajo do `hasNextPage` = false |

### Način odpravljanja napak

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

### Preizkus povezave

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

## Najboljše prakse

1. **Za posodobitve v realnem času uporabi webhooks** – registriraj webhooks namesto anketiranja za spremembe težav
2. **Filtriraj po ekipi** – sinhronizacija samo težav iz ustreznih ekip za zmanjšanje porabe API
3. **Optimiziraj poizvedbe GraphQL** – zahtevaj samo potrebna polja za ostajanje znotraj omejitev kompleksnosti
4. **Preslikaj oznake na segmente** – oznake Linear uporabi za pogon segmentacije stikov Brevo
5. **Obravnavaj paginacijo** – vedno preverjaj `hasNextPage` in za popolne podatke uporabi `endCursor`
6. **Preverjaj podpise webhookov** – vedno potrdi glavo `Linear-Signature`

## Varnost

- **Avtentikacija z API ključem** – osebni ključi, omejeni na delovno okolje
- **OAuth 2.0** – varen tok avtorizacije za integracije z več delovnimi okolji
- **Samo HTTPS** – vsa komunikacija API šifrirana prek TLS 1.2+
- **Podpisi webhookov** – preverjanje podpisa na osnovi HMAC
- **Šifrirano shranjevanje** – API ključi šifrirani v mirovanju v Tajo
- **Skladnost SOC 2** – platforma Linear je certificirana po SOC 2 Type II

## Povezani viri

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