Jira Connector
เชื่อมต่อ Jira Cloud instance กับ Brevo สำหรับการติดตามปัญหาที่หันหน้าสู่ลูกค้า การมองเห็นตั๋วสนับสนุน และการแจ้งเตือนเหตุการณ์สำคัญของโปรเจกต์ผ่าน Tajo
ภาพรวม
| คุณสมบัติ | ค่า |
|---|---|
| แพลตฟอร์ม | Jira Cloud |
| หมวดหมู่ | แบบกำหนดเอง |
| ความซับซ้อนในการตั้งค่า | ปานกลาง |
| การผสานรวมอย่างเป็นทางการ | ไม่ |
| ข้อมูลที่ซิงค์ | ปัญหา โปรเจกต์ ผู้ใช้ เหตุการณ์ |
| ประเภท API | REST API v3 |
| การยืนยันตัวตน | OAuth 2.0 (3LO) / API Token (Basic Auth) |
| Base URL | https://your-domain.atlassian.net/rest/api/3/ |
ฟีเจอร์
- การซิงค์เหตุการณ์ปัญหา - ส่งต่อเหตุการณ์สร้าง อัปเดต และแก้ไขปัญหาไปยังไทม์ไลน์ผู้ติดต่อ Brevo
- การติดตามตั๋วลูกค้า - เชื่อมโยงปัญหา Jira กับผู้ติดต่อ Brevo สำหรับการมองเห็นการสนับสนุน
- การแจ้งเตือนเหตุการณ์สำคัญโปรเจกต์ - ทริกเกอร์แคมเปญ Brevo เมื่อ version releases และ sprint completions
- ข้อมูลความสามารถทีม - ซิงค์ตัวชี้วัดปริมาณงานสำหรับ dashboards ปฏิบัติการ
- เหตุการณ์การเปลี่ยนสถานะ - ติดตามการเปลี่ยนผ่านเวิร์กโฟลว์ปัญหาเป็นเหตุการณ์ Brevo
- การซิงค์ความคิดเห็น - ส่งต่อความคิดเห็นที่หันหน้าสู่ลูกค้าไปยัง activity logs ของ Brevo
ข้อกำหนดเบื้องต้น
ก่อนเริ่มต้น ตรวจสอบให้แน่ใจว่าคุณมี:
- Jira Cloud instance (Jira Software, Jira Service Management หรือ Jira Work Management)
- สิทธิ์ผู้ดูแลระบบในการสร้าง OAuth apps หรือสร้าง API tokens
- อีเมลบัญชี Atlassian ที่เกี่ยวข้องกับ API token ของคุณ
- บัญชี Brevo ที่มีสิทธิ์เข้าถึง API
- บัญชี Tajo ที่มีการสมัครสมาชิกที่ใช้งานอยู่
การยืนยันตัวตน
Jira Cloud รองรับวิธีการยืนยันตัวตนหลายแบบ
ตัวเลือกที่ 1: OAuth 2.0 (3LO) - แนะนำ
- ไปที่ developer.atlassian.com
- คลิก Create > OAuth 2.0 integration
- กำหนดค่า callback URL:
https://app.tajo.io/callbacks/jira - เพิ่ม scopes เหล่านี้:
read:jira-workread:jira-userwrite:jira-workread:meโครงสร้าง API URL สำหรับ OAuth 2.0:
https://api.atlassian.com/ex/jira/{cloudId}/rest/api/3/{resource}ตัวเลือกที่ 2: API Token (Basic Auth)
- ไปที่ id.atlassian.com/manage/api-tokens
- คลิก Create API token
- ตั้งชื่อว่า “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"ข้อจำกัด API Token
API tokens ผูกกับบัญชีผู้ใช้แต่ละราย หากผู้ใช้ถูกปิดใช้งาน การผสานรวมจะเสีย ใช้ OAuth 2.0 สำหรับการใช้งานจริง
เชื่อมต่อกับ 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_TOKENการกำหนดค่า
การตั้งค่าพื้นฐาน
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 Requestการแมปฟิลด์
แมปฟิลด์ปัญหาและผู้ใช้ Jira กับแอตทริบิวต์ 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_RESOLUTIONAPI Endpoints
Tajo ผสานรวมกับ Jira Cloud REST API v3 endpoints ต่อไปนี้:
| Endpoint | เมธอด | จุดประสงค์ |
|---|---|---|
/rest/api/3/search | POST | ค้นหาปัญหาโดยใช้ JQL |
/rest/api/3/issue/{issueIdOrKey} | GET | ดูรายละเอียดปัญหา |
/rest/api/3/issue | POST | สร้างปัญหา |
/rest/api/3/project | GET | แสดงรายการโปรเจกต์ทั้งหมด |
/rest/api/3/project/{projectIdOrKey} | GET | ดูรายละเอียดโปรเจกต์ |
/rest/api/3/user/search | GET | ค้นหาผู้ใช้ |
/rest/api/3/myself | GET | ดูผู้ใช้ปัจจุบัน |
/rest/api/3/issue/{issueIdOrKey}/comment | GET | ดูความคิดเห็นปัญหา |
/rest/api/3/webhook | POST | ลงทะเบียน webhooks |
/rest/api/3/status | GET | ดูสถานะทั้งหมด |
/rest/api/3/priority | GET | ดูลำดับความสำคัญทั้งหมด |
ตัวอย่างโค้ด
เริ่มต้น Connector
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});ซิงค์ปัญหาการสนับสนุน
// 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
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');});ค้นหาปัญหาตามลูกค้า
// Find all issues reported by a specific customerconst issues = await tajo.connectors.query('jira', { maxResults: 20, fields: ['summary', 'status', 'priority', 'created']});ขีดจำกัดอัตรา
Jira Cloud ใช้ขีดจำกัดอัตราเพื่อรับประกันความเสถียรของแพลตฟอร์ม:
| บริบท | ขีดจำกัดอัตรา |
|---|---|
| REST API | ~100 คำขอต่อ 10 วินาทีต่อผู้ใช้ |
| คำขอพร้อมกัน | 10 คำขอที่ทำงานนานพร้อมกัน |
| การดำเนินการแบบ Bulk | แตกต่างกันตาม endpoint |
Pagination
Jira ใช้ offset-based pagination พร้อมพารามิเตอร์ startAt และ maxResults ขนาดหน้าเริ่มต้นคือ 50 สูงสุด 100 Tajo จัดการ pagination โดยอัตโนมัติ
Jira ส่งคืนการตอบสนอง 429 Too Many Requests เมื่อเกินขีดจำกัดอัตรา พร้อม header Retry-After ที่บอกเวลาที่ควรลองอีกครั้ง
การแก้ไขปัญหา
ปัญหาทั่วไป
| ปัญหา | สาเหตุ | วิธีแก้ |
|---|---|---|
| 401 Unauthorized | Token ไม่ถูกต้องหรือ OAuth หมดอายุ | รีเฟรช OAuth token หรือสร้าง API token ใหม่ |
| 403 Forbidden | สิทธิ์ไม่เพียงพอ | ตรวจสอบผู้ใช้มีสิทธิ์เข้าถึงโปรเจกต์ที่ขอ |
| ข้อผิดพลาด JQL | ไวยากรณ์ query ไม่ถูกต้อง | ตรวจสอบ JQL ใน issue search ของ Jira ก่อน |
| ไม่ได้รับ Webhook | ไฟร์วอลล์บล็อก | ตรวจสอบให้แน่ใจว่า URL webhook เข้าถึงได้สาธารณะ |
| ฟิลด์หายไป | ฟิลด์ไม่อยู่ในการตอบสนอง | เพิ่มฟิลด์ในพารามิเตอร์ fields หรือใช้ expand |
โหมด Debug
connectors: jira: debug: true log_level: verbose log_api_calls: trueทดสอบการเชื่อมต่อ
tajo connectors test jira# ✓ API authentication successful# ✓ Project access verified# ✓ Issue search operational# ✓ User lookup available# ✓ Webhook registration activeแนวทางปฏิบัติที่ดีที่สุด
- ใช้ OAuth 2.0 สำหรับการผลิต - หลีกเลี่ยงการพึ่งพาบัญชีผู้ใช้แต่ละราย
- กรองด้วย JQL - ซิงค์เฉพาะปัญหาที่เกี่ยวข้องเพื่อลดการเรียก API
- ใช้ webhooks สำหรับแบบเรียลไทม์ - หลีกเลี่ยงการ polling ลงทะเบียน webhooks สำหรับการเปลี่ยนแปลงปัญหา
- เคารพรูปแบบ ADF - Jira v3 ใช้ Atlassian Document Format สำหรับฟิลด์ rich text
- แมปโปรเจกต์กับรายการ - สร้างรายการ Brevo แยกต่างหากต่อโปรเจกต์ Jira
- จัดการ pagination - วนซ้ำผ่านทุกหน้าเสมอสำหรับข้อมูลที่สมบูรณ์
ความปลอดภัย
- OAuth 2.0 (3LO) - การยืนยันตัวตนตาม token ที่ปลอดภัยพร้อม refresh tokens
- API Token + Basic Auth - ข้อมูลรับรอง Base64-encoded ผ่าน HTTPS
- HTTPS เท่านั้น - การสื่อสาร API ทั้งหมดเข้ารหัสผ่าน TLS 1.2+
- การเข้าถึงแบบกำหนดขอบเขต - OAuth scopes จำกัดการเข้าถึง API กับทรัพยากรที่จำเป็น
- Atlassian Cloud Security - โครงสร้างพื้นฐานที่ได้รับการรับรอง SOC 2 Type II
- การจัดเก็บที่เข้ารหัส - ข้อมูลรับรองเข้ารหัสที่เก็บใน Tajo