Σύνδεσμος Linear
Συνδέστε τον χώρο εργασίας Linear σας με το Brevo για παρακολούθηση ζητημάτων που αντιμετωπίζουν πελάτες, ειδοποιήσεις ενημερώσεων προϊόντος και καμπάνιες ορόσημων ανάπτυξης μέσω Tajo.
Επισκόπηση
| Ιδιότητα | Τιμή |
|---|---|
| Πλατφόρμα | Linear |
| Κατηγορία | Προσαρμοσμένο |
| Πολυπλοκότητα Ρύθμισης | Εύκολη |
| Επίσημη Ενσωμάτωση | Όχι |
| Δεδομένα που Συγχρονίζονται | Ζητήματα, Έργα, Χρήστες, Εκδηλώσεις |
| Τύπος API | GraphQL API |
| Πιστοποίηση | OAuth 2.0 / Personal API Key |
| Βασικό URL | https://api.linear.app/graphql |
Χαρακτηριστικά
- Συγχρονισμός εκδηλώσεων ζητήματος - Προώθηση εκδηλώσεων δημιουργίας, ενημέρωσης και ολοκλήρωσης ζητημάτων στα χρονοδιαγράμματα επαφών Brevo
- Παρακολούθηση ορόσημων έργου - Ενεργοποίηση καμπανιών Brevo όταν τα έργα φτάνουν βασικά ορόσημα
- Σύνδεση ζητημάτων πελάτη - Συσχέτιση ζητημάτων Linear με επαφές Brevo για ορατότητα υποστήριξης
- Τμηματοποίηση βάσει ετικέτας - Αντιστοίχιση ετικετών Linear σε χαρακτηριστικά επαφών Brevo
- Αναλυτικά κύκλου - Συγχρονισμός δεδομένων ολοκλήρωσης sprint/κύκλου για αναφορά απόδοσης ομάδας
- Αυτοματοποίηση βάσει webhook - Προώθηση εκδηλώσεων σε πραγματικό χρόνο μέσω webhooks Linear
Προαπαιτούμενα
Πριν ξεκινήσετε, βεβαιωθείτε ότι διαθέτετε:
- Χώρο εργασίας Linear με πρόσβαση διαχειριστή
- Ρυθμισμένο Personal API key ή εφαρμογή OAuth
- Λογαριασμό Brevo με πρόσβαση API
- Λογαριασμό Tajo με ενεργή συνδρομή
Πιστοποίηση
Το Linear υποστηρίζει Personal API keys και OAuth 2.0.
Επιλογή 1: Personal API Key
- Μεταβείτε στο Linear > Settings > API > Personal API keys
- Κάντε κλικ στο Create key
- Ονομάστε το “Tajo Integration”
- Αντιγράψτε το παραγόμενο κλειδί (αρχίζει με
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 } }"}'Επιλογή 2: OAuth 2.0
Για ενσωματώσεις που εξυπηρετούν πολλαπλούς χώρους εργασίας:
- Δημιουργήστε εφαρμογή OAuth στο linear.app/settings/api/applications
- Ρυθμίστε URI ανακατεύθυνσης:
https://app.tajo.io/callbacks/linear - Ζητήστε scopes:
read,write,issues:create,comments:create
GraphQL API
Το Linear χρησιμοποιεί αποκλειστικά GraphQL API. Όλα τα ερωτήματα και οι μεταβολές διέρχονται από ένα μόνο endpoint: https://api.linear.app/graphql. Το Tajo χειρίζεται αυτόματα όλη την κατασκευή ερωτημάτων GraphQL.
Σύνδεση με 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_SECRETΔιαμόρφωση
Βασική Ρύθμιση
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Αντιστοίχιση Πεδίων
Αντιστοιχίστε δεδομένα χρήστη και ζητήματος Linear σε χαρακτηριστικά 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_TEAMΑντιστοίχιση Εκδηλώσεων
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_UPDATEDEndpoints API
Το Linear χρησιμοποιεί ένα μόνο GraphQL endpoint. Βασικά ερωτήματα και μεταβολές που χρησιμοποιεί το Tajo:
| Λειτουργία | Τύπος | Σκοπός |
|---|---|---|
issues | Ερώτημα | Λίστα και φιλτράρισμα ζητημάτων |
issue | Ερώτημα | Λήψη μεμονωμένου ζητήματος βάσει ID |
projects | Ερώτημα | Λίστα όλων των έργων |
cycles | Ερώτημα | Λίστα κύκλων (sprints) |
teams | Ερώτημα | Λίστα ομάδων χώρου εργασίας |
users | Ερώτημα | Λίστα μελών χώρου εργασίας |
viewer | Ερώτημα | Λήψη πληροφοριών πιστοποιημένου χρήστη |
issueCreate | Μεταβολή | Δημιουργία νέου ζητήματος |
issueUpdate | Μεταβολή | Ενημέρωση υπάρχοντος ζητήματος |
commentCreate | Μεταβολή | Προσθήκη σχολίου σε ζήτημα |
webhookCreate | Μεταβολή | Εγγραφή webhook |
Παράδειγμα Ερωτήματος 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 } }}Παραδείγματα Κώδικα
Αρχικοποίηση Συνδέσμου
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});Συγχρονισμός Ζητημάτων
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// }Χειρισμός Webhooks 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');});Δημιουργία Ζητήματος από Εκδήλωση 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'] }); }});Όρια Ρυθμού
Το Linear επιβάλλει όρια ρυθμού στο GraphQL API του:
| Τύπος Ορίου | Τιμή |
|---|---|
| Ρυθμός αιτήματος | 1.500 αιτήματα ανά ώρα ανά API key |
| Πολυπλοκότητα ερωτήματος | 10.000 πόντοι πολυπλοκότητας ανά αίτημα |
| Σελιδοποίηση | 250 κόμβοι μέγ. ανά σελίδα (προεπιλογή 50) |
| Webhooks | Απεριόριστες εισερχόμενες εκδηλώσεις |
Προϋπολογισμός Πολυπλοκότητας
Το Linear χρησιμοποιεί σύστημα περιορισμού ρυθμού βάσει πολυπλοκότητας. Τα απλά ερωτήματα κοστίζουν λιγότερους πόντους. Το Tajo βελτιστοποιεί τα ερωτήματα για ελαχιστοποίηση πολυπλοκότητας ζητώντας μόνο τα απαιτούμενα πεδία και χρησιμοποιώντας αποδοτική σελιδοποίηση.
Το Linear επιστρέφει 429 Too Many Requests με header Retry-After όταν υπερβαίνονται τα όρια.
Αντιμετώπιση Προβλημάτων
Συνηθισμένα Προβλήματα
| Πρόβλημα | Αιτία | Λύση |
|---|---|---|
| 401 Unauthorized | Μη έγκυρο ή ανακληθέν API key | Δημιουργήστε νέο API key στο Linear Settings |
| Σφάλματα ερωτήματος | Μη έγκυρη σύνταξη GraphQL | Επικυρώστε ερωτήματα χρησιμοποιώντας τον εξερευνητή API του Linear |
| Λείπουν ζητήματα | Περιορισμένη πρόσβαση ομάδας | Βεβαιωθείτε ότι ο ιδιοκτήτης API key έχει πρόσβαση στις στοχευόμενες ομάδες |
| Δεν ενεργοποιείται webhook | Λάθος URL ή απενεργοποιημένο | Ελέγξτε κατάσταση webhook στο Linear Settings > API > Webhooks |
| Ατελής σελιδοποίηση | Λείπει cursor after | Βεβαιωθείτε ότι οι επαναλήψεις συνεχίζονται μέχρι να γίνει hasNextPage false |
Λειτουργία Εντοπισμού Σφαλμάτων
connectors: linear: debug: true log_level: verbose log_queries: trueΔοκιμή Σύνδεσης
tajo connectors test linear# ✓ GraphQL API connection successful# ✓ Workspace access verified# ✓ Team list readable# ✓ Issue query operational# ✓ Webhook registration availableΒέλτιστες Πρακτικές
- Χρησιμοποιήστε webhooks για πραγματικό χρόνο - Εγγράψτε webhooks αντί polling για αλλαγές ζητημάτων
- Φιλτράρετε ανά ομάδα - Συγχρονίστε μόνο ζητήματα από σχετικές ομάδες για μείωση χρήσης API
- Βελτιστοποιήστε ερωτήματα GraphQL - Ζητήστε μόνο τα απαιτούμενα πεδία για παραμονή εντός ορίων πολυπλοκότητας
- Αντιστοιχίστε ετικέτες σε τμήματα - Χρησιμοποιήστε ετικέτες Linear για τμηματοποίηση επαφών Brevo
- Χειριστείτε σελιδοποίηση - Ελέγχετε πάντα
hasNextPageκαι χρησιμοποιείτεendCursorγια πλήρη δεδομένα - Επαληθεύστε υπογραφές webhook - Επαληθεύετε πάντα το header
Linear-Signature
Ασφάλεια
- Πιστοποίηση με API Key - Προσωπικά κλειδιά περιορισμένα στον χώρο εργασίας
- OAuth 2.0 - Ασφαλής ροή εξουσιοδότησης για ενσωματώσεις πολλαπλών χώρων εργασίας
- Μόνο HTTPS - Όλη η επικοινωνία API κρυπτογραφημένη μέσω TLS 1.2+
- Υπογραφές Webhook - Επαλήθευση υπογραφής βάσει HMAC
- Κρυπτογραφημένη Αποθήκευση - Τα API keys κρυπτογραφούνται σε ηρεμία στο Tajo
- Συμμόρφωση SOC 2 - Η πλατφόρμα Linear είναι πιστοποιημένη SOC 2 Type II