Коннектор Jira
Подключите ваш инстанс Jira Cloud к Brevo для отслеживания задач, ориентированных на клиентов, видимости тикетов поддержки и уведомлений о вехах проекта через Tajo.
Обзор
| Свойство | Значение |
|---|---|
| Платформа | Jira Cloud |
| Категория | Custom |
| Сложность настройки | Средняя |
| Официальная интеграция | Нет |
| Синхронизируемые данные | Задачи, проекты, пользователи, события |
| Тип API | REST API v3 |
| Аутентификация | OAuth 2.0 (3LO) / API Token (Basic Auth) |
| Базовый URL | https://your-domain.atlassian.net/rest/api/3/ |
Возможности
- Синхронизация событий задач, пересылка событий создания, обновления и решения задач в хронологию контактов Brevo
- Отслеживание тикетов клиентов, связывание задач Jira с контактами Brevo для видимости поддержки
- Оповещения о вехах проекта, запуск кампаний Brevo при выпуске версий и завершении спринтов
- Данные о загруженности команды, синхронизация метрик рабочей нагрузки для операционных дашбордов
- События изменения статуса, отслеживание переходов рабочего процесса задач как событий Brevo
- Синхронизация комментариев, пересылка комментариев, видимых клиентам, в журналы активности Brevo
Предварительные требования
Прежде чем начать, убедитесь, что у вас есть:
- Инстанс Jira Cloud (Jira Software, Jira Service Management или Jira Work Management)
- Права администратора для создания OAuth-приложений или генерации API-токенов
- Email аккаунта Atlassian, связанный с вашим API-токеном
- Аккаунт Brevo с доступом к API
- Аккаунт Tajo с активной подпиской
Аутентификация
Jira Cloud поддерживает несколько методов аутентификации.
Вариант 1: OAuth 2.0 (3LO), рекомендуется
- Перейдите на developer.atlassian.com
- Нажмите Create > OAuth 2.0 integration
- Укажите URL обратного вызова:
https://app.tajo.io/callbacks/jira - Добавьте следующие scope:
read:jira-workread:jira-userwrite:jira-workread:meСтруктура URL API для 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 как имя пользователя, API token как парольcurl -X GET "https://your-domain.atlassian.net/rest/api/3/myself" \ -H "Accept: application/json"Ограничения API Token
API-токены привязаны к индивидуальным пользовательским аккаунтам. Если пользователь деактивирован, интеграция перестаёт работать. Используйте OAuth 2.0 для production-окружений.
Подключение к Tajo
# Используя OAuth 2.0tajo connectors install jira \ --client-id $JIRA_CLIENT_ID \ --client-secret $JIRA_CLIENT_SECRET \ --cloud-id $JIRA_CLOUD_ID
# Используя 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_RESOLUTIONЭндпоинты API
Tajo интегрируется со следующими эндпоинтами Jira Cloud REST API v3:
| Эндпоинт | Метод | Назначение |
|---|---|---|
/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 | Зарегистрировать вебхуки |
/rest/api/3/status | GET | Получить все статусы |
/rest/api/3/priority | GET | Получить все приоритеты |
Примеры кода
Инициализация коннектора
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});Синхронизация задач поддержки
// Синхронизация задач поддержки Jira с контактами Brevoawait 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
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');});Поиск задач по клиенту
// Поиск всех задач, созданных конкретным клиентомconst issues = await tajo.connectors.query('jira', { maxResults: 20, fields: ['summary', 'status', 'priority', 'created']});Ограничения скорости
Jira Cloud применяет ограничения запросов для обеспечения стабильности платформы:
| Контекст | Лимит |
|---|---|
| REST API | ~100 запросов за 10 секунд на пользователя |
| Параллельные запросы | 10 параллельных длительных запросов |
| Пакетные операции | Зависит от эндпоинта |
Пагинация
Jira использует пагинацию на основе смещения с параметрами startAt и maxResults. Размер страницы по умолчанию, 50, максимум, 100. Tajo автоматически обрабатывает пагинацию.
Jira возвращает ответ 429 Too Many Requests при превышении лимитов с заголовком Retry-After, указывающим, когда повторить запрос.
Устранение неполадок
Частые проблемы
| Проблема | Причина | Решение |
|---|---|---|
| 401 Unauthorized | Недействительный токен или истёкший OAuth | Обновите OAuth-токен или перегенерируйте API-токен |
| 403 Forbidden | Недостаточно прав | Проверьте, что у пользователя есть доступ к запрошенному проекту |
| Ошибки JQL | Неверный синтаксис запроса | Сначала проверьте JQL в поиске задач Jira |
| Вебхук не получен | Firewall блокирует | Убедитесь, что URL вебхука публично доступен |
| Отсутствующие поля | Поле не в ответе | Добавьте поле в параметр fields или используйте expand |
Режим отладки
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 для production, избегает зависимости от отдельных пользовательских аккаунтов
- Фильтруйте с помощью JQL, синхронизируйте только нужные задачи для снижения нагрузки на API
- Используйте вебхуки для real-time, не опрашивайте API; регистрируйте вебхуки для изменений задач
- Учитывайте формат ADF, Jira v3 использует Atlassian Document Format для полей с форматированным текстом
- Сопоставляйте проекты с листами, создавайте отдельные листы Brevo для каждого проекта Jira
- Обрабатывайте пагинацию, всегда перебирайте все страницы для получения полных данных
Безопасность
- OAuth 2.0 (3LO), безопасная аутентификация на основе токенов с refresh-токенами
- API Token + Basic Auth, учётные данные в кодировке Base64 через HTTPS
- Только HTTPS, все API-коммуникации зашифрованы через TLS 1.2+
- Ограниченный доступ, OAuth scope ограничивают доступ к API необходимыми ресурсами
- Безопасность Atlassian Cloud, инфраструктура с сертификацией SOC 2 Type II
- Шифрованное хранение, учётные данные зашифрованы при хранении в Tajo