Conector Linear
Starea conectorului: Planificat Încă neconstruit. Tajo nu rulează astăzi acest conector.
Ilustrație · date de exemplu
Exemplu de sincronizare
Sursă
Linear
Starea conectorului: Planificat
Destinație
Celălalt instrument al tău
Starea conectorului: Instrument personalizat
Maparea câmpurilor
| Câmp sursă | Câmp destinație | Valoare exemplu |
|---|---|---|
record.id | source_id | record_1042 |
record.updated_at | updated_at | 2026-10-18T08:00:00Z |
record.value | value | sample_value |
- Ciornă
- Verifică o înregistrare
- Aprobă această versiune
Stările se referă la fiecare conector și nu garantează că această sincronizare este pregătită. Câmpurile sunt ilustrative. Verifică schema și permisiunile reale înainte de sincronizare.
Conectați spațiul de lucru Linear la Brevo pentru urmărirea problemelor vizibile clienților, notificări despre actualizările produselor și campanii pentru etape de dezvoltare prin Tajo.
Prezentare generală
| Proprietate | Valoare |
|---|---|
| Platformă | Linear |
| Categorie | Personalizat |
| Complexitate configurare | Ușoară |
| Integrare oficială | Nu |
| Date sincronizate | Probleme, Proiecte, Utilizatori, Evenimente |
| Tip API | GraphQL API |
| Autentificare | OAuth 2.0 / Cheie API personală |
| URL de bază | https://api.linear.app/graphql |
Funcționalități
- Sincronizare evenimente de probleme - Transmiteți evenimentele de creare, actualizare și finalizare a problemelor în cronologiile de contact Brevo
- Urmărire etape proiect - Declanșați campanii Brevo când proiectele ating etape cheie
- Legare probleme clienți - Asociați problemele Linear cu contactele Brevo pentru vizibilitate suport
- Segmentare bazată pe etichete - Mapați etichetele Linear la atributele de contact Brevo
- Analitica ciclului - Sincronizați datele de finalizare a sprint-ului/ciclului pentru raportarea performanței echipei
- Automatizare bazată pe webhook - Redirecționare evenimente în timp real prin webhook-uri Linear
Cerințe preliminare
Înainte de a începe, asigurați-vă că aveți:
- Un spațiu de lucru Linear cu acces de administrator
- O Cheie API personală sau aplicație OAuth configurată
- Un cont Brevo cu acces API
- Un cont Tajo cu abonament activ
Autentificare
Linear suportă Chei API personale și OAuth 2.0.
Opțiunea 1: Cheie API personală
- Accesați Linear > Settings > API > Personal API keys
- Faceți clic pe Create key
- Denumiți-o “Tajo Integration”
- Copiați cheia generată (începe cu
lin_api_)
curl -X POST https://api.linear.app/graphql \ -H "Authorization: $LINEAR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"query": "{ viewer { id name email } }"}'Opțiunea 2: OAuth 2.0
Pentru integrări care deservesc mai multe spații de lucru:
- Creați o aplicație OAuth la linear.app/settings/api/applications
- Configurați URI-ul de redirecționare:
https://app.tajo.io/callbacks/linear - Solicitați scopuri:
read,write,issues:create,comments:create
GraphQL API
Linear utilizează exclusiv un API GraphQL. Toate interogările și mutațiile trec printr-un singur punct final: https://api.linear.app/graphql. Tajo gestionează automat toată construcția de interogări GraphQL.
Conectare la Tajo
# Using Personal API Keytajo connectors install linear \ --api-key $LINEAR_API_KEY
# Using OAuthtajo connectors install linear \ --client-id $LINEAR_CLIENT_ID \ --client-secret $LINEAR_CLIENT_SECRETConfigurare
Configurare de bază
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 - CanceledMapare câmpuri
Mapați datele utilizatorilor și problemelor Linear la atributele Brevo:
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_TEAMMapare evenimente
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_UPDATEDPuncte finale API
Linear utilizează un singur punct final GraphQL. Interogări și mutații cheie utilizate de Tajo:
| Operație | Tip | Scop |
|---|---|---|
issues | Interogare | Listează și filtrează probleme |
issue | Interogare | Obține o singură problemă după ID |
projects | Interogare | Listează toate proiectele |
cycles | Interogare | Listează ciclurile (sprint-uri) |
teams | Interogare | Listează echipele din spațiul de lucru |
users | Interogare | Listează membrii spațiului de lucru |
viewer | Interogare | Obține informații despre utilizatorul autentificat |
issueCreate | Mutație | Creează o problemă nouă |
issueUpdate | Mutație | Actualizează o problemă existentă |
commentCreate | Mutație | Adaugă un comentariu la o problemă |
webhookCreate | Mutație | Înregistrează un webhook |
Exemplu de interogare 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 } }}Exemple de cod
Inițializare conector
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});Sincronizare probleme
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// }Gestionare webhook-uri Linear
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');});Creare problemă din eveniment Brevo
// Create a Linear issue when a Brevo contact submits a requesttajo.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'] }); }});Limite de rată
Linear aplică limite de rată pe API-ul său GraphQL:
| Tip limită | Valoare |
|---|---|
| Rată cereri | 1.500 cereri pe oră per cheie API |
| Complexitate interogare | 10.000 puncte de complexitate per cerere |
| Paginare | Maxim 250 noduri per pagină (implicit 50) |
| Webhook-uri | Evenimente primite nelimitate |
Buget de complexitate
Linear utilizează un sistem de limitare a ratei bazat pe complexitate. Interogările simple costă mai puține puncte. Tajo optimizează interogările pentru a minimiza complexitatea solicitând doar câmpurile necesare și folosind paginare eficientă.
Linear returnează 429 Too Many Requests cu un antet Retry-After când limitele sunt depășite.
Depanare
Probleme frecvente
| Problemă | Cauză | Soluție |
|---|---|---|
| 401 Neautorizat | Cheie API invalidă sau revocată | Generați o nouă cheie API în Linear Settings |
| Erori de interogare | Sintaxă GraphQL invalidă | Validați interogările folosind exploratorul API al Linear |
| Probleme lipsă | Acces la echipă restricționat | Asigurați-vă că proprietarul cheii API are acces la echipele țintă |
| Webhook-uri nedeclanșate | URL incorect sau dezactivat | Verificați statusul webhook în Linear Settings > API > Webhooks |
| Paginare incompletă | Cursor after lipsă | Asigurați-vă că buclele de paginare se execută până când hasNextPage este false |
Modul de depanare
connectors: linear: debug: true log_level: verbose log_queries: trueTestare conexiune
tajo connectors test linear# ✓ GraphQL API connection successful# ✓ Workspace access verified# ✓ Team list readable# ✓ Issue query operational# ✓ Webhook registration availableBune practici
- Utilizați webhook-uri pentru timp real - Înregistrați webhook-uri în loc de interogare pentru modificările problemelor
- Filtrați după echipă - Sincronizați doar problemele din echipele relevante pentru a reduce utilizarea API
- Optimizați interogările GraphQL - Solicitați doar câmpurile necesare pentru a rămâne în limitele de complexitate
- Mapați etichetele la segmente - Utilizați etichetele Linear pentru a conduce segmentarea contactelor Brevo
- Gestionați paginarea - Verificați întotdeauna
hasNextPageși utilizațiendCursorpentru date complete - Verificați semnăturile webhook - Validați întotdeauna antetul
Linear-Signature
Securitate
- Autentificare cu cheie API - Chei personale limitate la spațiul de lucru
- OAuth 2.0 - Flux de autorizare securizat pentru integrări cu mai multe spații de lucru
- Numai HTTPS - Toată comunicarea API criptată prin TLS 1.2+
- Semnături webhook - Verificare semnătură bazată pe HMAC
- Stocare criptată - Chei API criptate în repaus în Tajo
- Conformitate SOC 2 - Platforma Linear este certificată SOC 2 Tip II