Jira Connector
Verbinde deine Jira-Cloud-Instanz über Tajo mit Brevo für kundenorientiertes Issue-Tracking, Sichtbarkeit von Support-Tickets und Projekt-Meilenstein-Benachrichtigungen.
Überblick
| Eigenschaft | Wert |
|---|---|
| Plattform | Jira Cloud |
| Kategorie | Custom |
| Einrichtungsaufwand | Mittel |
| Offizielle Integration | Nein |
| Synchronisierte Daten | Issues, Projekte, Nutzer:innen, Events |
| API-Typ | REST API v3 |
| Authentifizierung | OAuth 2.0 (3LO) / API-Token (Basic Auth) |
| Basis-URL | https://your-domain.atlassian.net/rest/api/3/ |
Funktionen
- Issue-Event-Synchronisierung - Leite Issue-Erstell-, Update- und Abschluss-Events in Brevo-Kontaktverläufe weiter
- Customer-Ticket-Tracking - Verknüpfe Jira-Issues mit Brevo-Kontakten für Support-Sichtbarkeit
- Projekt-Meilenstein-Alarme - Löse Brevo-Kampagnen bei Version-Releases und Sprint-Abschlüssen aus
- Team-Kapazitätsdaten - Synchronisiere Auslastungsmetriken für operative Dashboards
- Statuswechsel-Events - Verfolge Issue-Workflow-Übergänge als Brevo-Events
- Kommentar-Synchronisierung - Leite kundenrelevante Kommentare in Brevo-Aktivitätsprotokolle weiter
Voraussetzungen
Bevor du beginnst, stelle sicher, dass du Folgendes hast:
- Eine Jira-Cloud-Instanz (Jira Software, Jira Service Management oder Jira Work Management)
- Admin-Zugriff zum Erstellen von OAuth-Apps oder Generieren von API-Tokens
- Die mit deinem API-Token verknüpfte Atlassian-Konto-E-Mail
- Ein Brevo-Konto mit API-Zugriff
- Ein Tajo-Konto mit aktivem Abonnement
Authentifizierung
Jira Cloud unterstützt mehrere Authentifizierungsmethoden.
Option 1: OAuth 2.0 (3LO) - Empfohlen
- Gehe zu developer.atlassian.com
- Klicke auf Create > OAuth 2.0 integration
- Konfiguriere die Callback-URL:
https://app.tajo.io/callbacks/jira - Füge diese Scopes hinzu:
read:jira-workread:jira-userwrite:jira-workread:meDie API-URL-Struktur für OAuth 2.0:
https://api.atlassian.com/ex/jira/{cloudId}/rest/api/3/{resource}Option 2: API-Token (Basic Auth)
- Gehe zu id.atlassian.com/manage/api-tokens
- Klicke auf Create API token
- Benenne es mit “Tajo Integration”
# Basic Auth: email as username, API token as passwordcurl -X GET "https://your-domain.atlassian.net/rest/api/3/myself" \ -H "Accept: application/json"Einschränkungen von API-Tokens
API-Tokens sind an einzelne Nutzer:innen-Konten gebunden. Wird der/die Nutzer:in deaktiviert, bricht die Integration ab. Verwende OAuth 2.0 für Produktiv-Deployments.
Verbindung zu Tajo herstellen
# Using OAuth 2.0tajo connectors install jira \ --client-id $JIRA_CLIENT_ID \ --client-secret $JIRA_CLIENT_SECRET \ --cloud-id $JIRA_CLOUD_ID
# Using API Tokentajo connectors install jira \ --site-url your-domain.atlassian.net \ --api-token $JIRA_API_TOKENKonfiguration
Grundeinrichtung
connectors: jira: enabled: true site_url: "your-domain.atlassian.net" auth_type: "oauth2" # or "basic"
sync: issues: true projects: true users: true comments: true worklogs: false
projects: - key: "SUPPORT" sync_to_list: 22 - key: "PRODUCT" sync_to_list: 23
issue_types: - Bug - Story - Task - Support RequestFeldzuordnung
Ordne Jira-Issue- und Nutzer:innen-Felder Brevo-Attributen zu:
field_mapping: # User fields accountId: JIRA_ACCOUNT_ID emailAddress: email displayName: FIRSTNAME
# Issue fields mapped to contact events issue_key: LAST_TICKET_KEY issue_status: LAST_TICKET_STATUS issue_priority: LAST_TICKET_PRIORITY issue_created: LAST_TICKET_DATE resolution: LAST_TICKET_RESOLUTIONAPI-Endpunkte
Tajo integriert die folgenden Endpunkte der Jira Cloud REST API v3:
| Endpunkt | Methode | Zweck |
|---|---|---|
/rest/api/3/search | POST | Issues per JQL durchsuchen |
/rest/api/3/issue/{issueIdOrKey} | GET | Issue-Details abrufen |
/rest/api/3/issue | POST | Issue erstellen |
/rest/api/3/project | GET | Alle Projekte auflisten |
/rest/api/3/project/{projectIdOrKey} | GET | Projektdetails abrufen |
/rest/api/3/user/search | GET | Nutzer:innen suchen |
/rest/api/3/myself | GET | Aktuelle:n Nutzer:in abrufen |
/rest/api/3/issue/{issueIdOrKey}/comment | GET | Issue-Kommentare abrufen |
/rest/api/3/webhook | POST | Webhooks registrieren |
/rest/api/3/status | GET | Alle Status abrufen |
/rest/api/3/priority | GET | Alle Prioritäten abrufen |
Code-Beispiele
Connector initialisieren
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('jira', { clientId: process.env.JIRA_CLIENT_ID, clientSecret: process.env.JIRA_CLIENT_SECRET, cloudId: process.env.JIRA_CLOUD_ID});Support-Issues synchronisieren
// Sync Jira support issues to Brevo contactsawait tajo.connectors.sync('jira', { type: 'incremental', resources: ['issues'], jql: 'project = SUPPORT AND updated >= -24h', batchSize: 50});
const status = await tajo.connectors.status('jira');console.log(status);// {// connected: true,// lastSync: '2024-03-15T12:00:00Z',// issuesTracked: 4560,// projectsMonitored: 3,// usersLinked: 890// }Jira-Webhooks verarbeiten
app.post('/webhooks/jira', async (req, res) => { const event = req.body;
await tajo.connectors.handleWebhook('jira', { event: event.webhookEvent, payload: { issueKey: event.issue?.key, issueType: event.issue?.fields?.issuetype?.name, status: event.issue?.fields?.status?.name, reporter: event.issue?.fields?.reporter?.emailAddress, assignee: event.issue?.fields?.assignee?.emailAddress } });
res.status(200).send('OK');});Issues nach Kund:innen durchsuchen
// Find all issues reported by a specific customerconst issues = await tajo.connectors.query('jira', { maxResults: 20, fields: ['summary', 'status', 'priority', 'created']});Ratenbegrenzungen
Jira Cloud erzwingt Ratenbegrenzungen, um die Plattformstabilität zu gewährleisten:
| Kontext | Rate-Limit |
|---|---|
| REST API | ca. 100 Anfragen pro 10 Sekunden pro Nutzer:in |
| Gleichzeitige Anfragen | 10 gleichzeitige lang laufende Anfragen |
| Bulk-Operationen | Variiert je nach Endpunkt |
Paginierung
Jira nutzt offsetbasierte Paginierung mit den Parametern startAt und maxResults. Die Standard-Seitengröße beträgt 50, das Maximum 100. Tajo übernimmt die Paginierung automatisch.
Jira liefert eine 429 Too Many Requests-Antwort, wenn Ratenbegrenzungen überschritten werden, mit einem Retry-After-Header, der angibt, wann erneut versucht werden soll.
Fehlerbehebung
Häufige Probleme
| Problem | Ursache | Lösung |
|---|---|---|
| 401 Unauthorized | Ungültiges Token oder abgelaufener OAuth | OAuth-Token erneuern oder API-Token neu generieren |
| 403 Forbidden | Unzureichende Berechtigungen | Prüfe, ob der/die Nutzer:in Zugriff auf das angefragte Projekt hat |
| JQL-Fehler | Ungültige Abfragesyntax | JQL zunächst in der Jira-Issue-Suche validieren |
| Webhook wird nicht empfangen | Firewall blockiert | Sicherstellen, dass die Webhook-URL öffentlich erreichbar ist |
| Fehlende Felder | Feld nicht in der Antwort | Feld zum fields-Parameter hinzufügen oder expand verwenden |
Debug-Modus
connectors: jira: debug: true log_level: verbose log_api_calls: trueVerbindung testen
tajo connectors test jira# ✓ API authentication successful# ✓ Project access verified# ✓ Issue search operational# ✓ User lookup available# ✓ Webhook registration activeBest Practices
- OAuth 2.0 für die Produktion nutzen - Vermeidet Abhängigkeit von einzelnen Nutzer:innen-Konten
- Mit JQL filtern - Synchronisiere nur relevante Issues, um API-Aufrufe zu reduzieren
- Webhooks für Echtzeit nutzen - Vermeide Polling; registriere Webhooks für Issue-Änderungen
- ADF-Format beachten - Jira v3 nutzt das Atlassian Document Format für Rich-Text-Felder
- Projekt-zu-Liste zuordnen - Lege separate Brevo-Listen pro Jira-Projekt an
- Paginierung handhaben - Iteriere immer durch alle Seiten, um vollständige Daten zu erhalten
Sicherheit
- OAuth 2.0 (3LO) - Sichere tokenbasierte Authentifizierung mit Refresh-Tokens
- API-Token + Basic Auth - Base64-kodierte Zugangsdaten über HTTPS
- Nur HTTPS - Die gesamte API-Kommunikation ist per TLS 1.2+ verschlüsselt
- Scope-basierter Zugriff - OAuth-Scopes beschränken den API-Zugriff auf erforderliche Ressourcen
- Atlassian-Cloud-Sicherheit - SOC-2-Type-II-zertifizierte Infrastruktur
- Verschlüsselte Speicherung - Zugangsdaten werden in Tajo verschlüsselt gespeichert