Conector Linear
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