Konektor Jira
Hubungkan instance Jira Cloud Anda ke Brevo untuk pelacakan issue yang menghadap pelanggan, visibilitas tiket dukungan, dan notifikasi milestone proyek melalui Tajo.
Ikhtisar
| Properti | Nilai |
|---|---|
| Platform | Jira Cloud |
| Kategori | Custom |
| Kompleksitas setup | Sedang |
| Integrasi resmi | Tidak |
| Data yang disinkronkan | Issue, proyek, pengguna, event |
| Tipe API | REST API v3 |
| Autentikasi | OAuth 2.0 (3LO) / API Token (Basic Auth) |
| Base URL | https://your-domain.atlassian.net/rest/api/3/ |
Fitur
- Sinkronisasi event issue - Teruskan event pembuatan, pembaruan, dan penyelesaian issue ke timeline kontak Brevo
- Pelacakan tiket pelanggan - Tautkan issue Jira ke kontak Brevo untuk visibilitas dukungan
- Peringatan milestone proyek - Picu kampanye Brevo saat rilis versi dan penyelesaian sprint
- Data kapasitas tim - Sinkronkan metrik beban kerja untuk dasbor operasional
- Event perubahan status - Lacak transisi alur kerja issue sebagai event Brevo
- Sinkronisasi komentar - Teruskan komentar yang menghadap pelanggan ke log aktivitas Brevo
Prasyarat
Sebelum memulai, pastikan Anda memiliki:
- Instance Jira Cloud (Jira Software, Jira Service Management, atau Jira Work Management)
- Akses admin untuk membuat aplikasi OAuth atau membuat API token
- Email akun Atlassian yang terkait dengan API token Anda
- Akun Brevo dengan akses API
- Akun Tajo dengan langganan aktif
Autentikasi
Jira Cloud mendukung beberapa metode autentikasi.
Opsi 1: OAuth 2.0 (3LO) - Direkomendasikan
- Buka developer.atlassian.com
- Klik Create > OAuth 2.0 integration
- Konfigurasikan callback URL:
https://app.tajo.io/callbacks/jira - Tambahkan scope berikut:
read:jira-workread:jira-userwrite:jira-workread:meStruktur URL API untuk OAuth 2.0:
https://api.atlassian.com/ex/jira/{cloudId}/rest/api/3/{resource}Opsi 2: API Token (Basic Auth)
- Buka id.atlassian.com/manage/api-tokens
- Klik Create API token
- Beri nama “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"Batasan API Token
API token terikat pada akun pengguna individual. Jika pengguna dinonaktifkan, integrasi akan berhenti bekerja. Gunakan OAuth 2.0 untuk penerapan produksi.
Menghubungkan ke Tajo
# 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_TOKENKonfigurasi
Setup dasar
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 RequestPemetaan field
Petakan field issue dan pengguna Jira ke atribut Brevo:
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_RESOLUTIONEndpoint API
Tajo terintegrasi dengan endpoint Jira Cloud REST API v3 berikut:
| Endpoint | Metode | Tujuan |
|---|---|---|
/rest/api/3/search | POST | Mencari issue menggunakan JQL |
/rest/api/3/issue/{issueIdOrKey} | GET | Mengambil detail issue |
/rest/api/3/issue | POST | Membuat issue |
/rest/api/3/project | GET | Menampilkan semua proyek |
/rest/api/3/project/{projectIdOrKey} | GET | Mengambil detail proyek |
/rest/api/3/user/search | GET | Mencari pengguna |
/rest/api/3/myself | GET | Mengambil pengguna saat ini |
/rest/api/3/issue/{issueIdOrKey}/comment | GET | Mengambil komentar issue |
/rest/api/3/webhook | POST | Mendaftarkan webhook |
/rest/api/3/status | GET | Mengambil semua status |
/rest/api/3/priority | GET | Mengambil semua prioritas |
Contoh kode
Inisialisasi konektor
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});Menyinkronkan issue dukungan
// 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// }Menangani webhook Jira
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');});Mencari issue berdasarkan pelanggan
// Find all issues reported by a specific customerconst issues = await tajo.connectors.query('jira', { maxResults: 20, fields: ['summary', 'status', 'priority', 'created']});Batas rate
Jira Cloud menerapkan batas rate untuk menjaga stabilitas platform:
| Konteks | Batas rate |
|---|---|
| REST API | Sekitar 100 permintaan per 10 detik per pengguna |
| Permintaan bersamaan | 10 permintaan berjalan lama secara bersamaan |
| Operasi massal | Bervariasi menurut endpoint |
Paginasi
Jira menggunakan paginasi berbasis offset dengan parameter startAt dan maxResults. Ukuran halaman default adalah 50, maksimum 100. Tajo menangani paginasi secara otomatis.
Jira mengembalikan respons 429 Too Many Requests saat batas rate terlampaui, disertai header Retry-After yang menunjukkan kapan harus mencoba lagi.
Pemecahan masalah
Masalah umum
| Masalah | Penyebab | Solusi |
|---|---|---|
| 401 Unauthorized | Token tidak valid atau OAuth kedaluwarsa | Segarkan token OAuth atau buat ulang API token |
| 403 Forbidden | Izin tidak mencukupi | Periksa apakah pengguna memiliki akses ke proyek yang diminta |
| Error JQL | Sintaks kueri tidak valid | Validasi JQL di pencarian issue Jira terlebih dahulu |
| Webhook tidak diterima | Firewall memblokir | Pastikan URL webhook dapat diakses publik |
| Field hilang | Field tidak ada dalam respons | Tambahkan field ke parameter fields atau gunakan expand |
Mode debug
connectors: jira: debug: true log_level: verbose log_api_calls: trueMenguji koneksi
tajo connectors test jira# ✓ API authentication successful# ✓ Project access verified# ✓ Issue search operational# ✓ User lookup available# ✓ Webhook registration activePraktik terbaik
- Gunakan OAuth 2.0 untuk produksi - Menghindari ketergantungan pada akun pengguna individual
- Saring dengan JQL - Sinkronkan hanya issue yang relevan untuk mengurangi panggilan API
- Gunakan webhook untuk real-time - Hindari polling; daftarkan webhook untuk perubahan issue
- Hormati format ADF - Jira v3 menggunakan Atlassian Document Format untuk field teks kaya
- Petakan proyek ke list - Buat list Brevo terpisah untuk setiap proyek Jira
- Tangani paginasi - Selalu telusuri seluruh halaman untuk data yang lengkap
Keamanan
- OAuth 2.0 (3LO) - Autentikasi berbasis token yang aman dengan refresh token
- API Token + Basic Auth - Kredensial berenkode Base64 melalui HTTPS
- Hanya HTTPS - Seluruh komunikasi API dienkripsi via TLS 1.2+
- Akses tersegmentasi - Scope OAuth membatasi akses API pada resource yang diperlukan
- Keamanan Atlassian Cloud - Infrastruktur bersertifikat SOC 2 Type II
- Penyimpanan terenkripsi - Kredensial dienkripsi saat disimpan di Tajo