---
title: "Коннектор GitHub"
description: "Полное руководство по интеграции GitHub для синхронизации событий репозиториев, issues, pull request и активности разработчиков с Brevo через Tajo."
url: https://tajo.io/ru/docs/connectors/custom/github/
markdown: https://tajo.io/ru/docs/connectors/custom/github.md
lang: ru-RU
robots: noindex
---

Подайте заявку на ранний доступ

Укажите имя и рабочий адрес электронной почты. Мы отправим ссылку для подтверждения запроса на доступ к Tajo.

# Коннектор GitHub

Статус коннектора: Запланирован Ещё не создан. Сегодня Tajo не запускает этот коннектор.

| Поле источника | Поле назначения | Пример значения |
| --- | --- | --- |
| `record.id` | `source_id` | `record_1042` |
| `record.updated_at` | `updated_at` | `2026-10-18T08:00:00Z` |
| `record.value` | `value` | `sample_value` |

Подключите ваши репозитории GitHub к Brevo для отслеживания вовлечённости разработчиков, workflow уведомлений о релизах и мониторинга активности сообщества через Tajo.

## Обзор

| Свойство | Значение |
| --- | --- |
| **Платформа** | GitHub |
| **Категория** | Custom |
| **Сложность настройки** | Умеренная |
| **Официальная интеграция** | Нет |
| **Синхронизируемые данные** | События, пользователи, репозитории |
| **Тип API** | REST API, GraphQL API |
| **Аутентификация** | GitHub App / Personal Access Token / OAuth 2.0 |
| **Базовый URL** | `https://api.github.com` |
| **Версия API** | `2022-11-28` (версионирование на уровне заголовков) |

## Возможности

- **Отслеживание issue и PR**, синхронизируйте события issue и pull request в таймлайны контактов Brevo
- **Уведомления о релизах**, запускайте кампании Brevo при новых релизах репозитория
- **Синхронизация контрибьюторов**, сопоставляйте контрибьюторов GitHub с контактами Brevo для вовлечения сообщества
- **Отслеживание star и fork**, отслеживайте метрики популярности репозитория
- **Пересылка событий вебхуков**, пересылайте события GitHub в автоматизации Brevo
- **Каталог репозиториев**, синхронизируйте метаданные репозиториев как элементы каталога Brevo

## Предварительные требования

Прежде чем начать, убедитесь, что у вас есть:

1. Аккаунт GitHub с доступом к целевым репозиториям
2. GitHub App или Personal Access Token (рекомендуется fine-grained)
3. Права администратора репозиториев для настройки вебхуков
4. Аккаунт Brevo с доступом к API
5. Аккаунт Tajo с активной подпиской

## Аутентификация

GitHub поддерживает несколько методов аутентификации. Tajo рекомендует использовать GitHub Apps для доступа на уровне организации.

### Вариант 1: GitHub App (рекомендуется)

1. Перейдите в **Settings** > **Developer settings** > **GitHub Apps**
2. Нажмите **New GitHub App**
3. Настройте приложение с этими разрешениями:

```
Repository permissions:
  Issues: Read
  Pull requests: Read
  Contents: Read
  Metadata: Read

Organization permissions:
  Members: Read

Subscribe to events:
  Issues
  Pull request
  Push
  Release
  Star
  Fork
```

### Вариант 2: Fine-Grained Personal Access Token

1. Перейдите в **Settings** > **Developer settings** > **Personal access tokens** > **Fine-grained tokens**
2. Нажмите **Generate new token**
3. Выберите целевые репозитории
4. Предоставьте эти разрешения:

```
Repository access: Selected repositories
Permissions:
  Issues: Read-only
  Pull requests: Read-only
  Contents: Read-only
  Metadata: Read-only
```

Безопасность токенов

Fine-grained токены имеют срок действия. Настройте ротацию токенов до истечения срока. Installation-токены GitHub App автоматически обновляются и предпочтительнее для продакшена.

### Подключение к Tajo

```bash
# Using GitHub App
tajo connectors install github \
  --app-id $GITHUB_APP_ID \
  --private-key-path ./github-app-key.pem \
  --installation-id $GITHUB_INSTALLATION_ID

# Using Personal Access Token
tajo connectors install github \
  --token $GITHUB_TOKEN
```

## Конфигурация

### Базовая настройка

```yaml
connectors:
  github:
    enabled: true
    auth_type: "github_app"  # or "token"

    repositories:
      - owner/repo-1
      - owner/repo-2

    sync:
      issues: true
      pull_requests: true
      releases: true
      contributors: true
      stars: true

    lists:
      contributors: 20
      stargazers: 21
```

### Сопоставление полей

Сопоставьте данные пользователя GitHub с атрибутами контакта Brevo:

```yaml
field_mapping:
  # Standard fields
  login: GITHUB_USERNAME
  email: email
  name: FIRSTNAME

  # Developer metrics
  contributions: GITHUB_CONTRIBUTIONS
  repositories_count: GITHUB_REPOS
  followers: GITHUB_FOLLOWERS
  created_at: GITHUB_JOINED

  # Custom attributes
  company: COMPANY
  location: LOCATION
  bio: GITHUB_BIO
```

## Эндпоинты API

Tajo интегрируется со следующими эндпоинтами GitHub REST API:

| Эндпоинт | Метод | Назначение |
| --- | --- | --- |
| `/repos/{owner}/{repo}/issues` | GET | Список issues репозитория |
| `/repos/{owner}/{repo}/pulls` | GET | Список pull request |
| `/repos/{owner}/{repo}/releases` | GET | Список релизов |
| `/repos/{owner}/{repo}/contributors` | GET | Список контрибьюторов |
| `/repos/{owner}/{repo}/stargazers` | GET | Список stargazer |
| `/repos/{owner}/{repo}/forks` | GET | Список форков |
| `/repos/{owner}/{repo}/events` | GET | Список событий репозитория |
| `/users/{username}` | GET | Получить профиль пользователя |
| `/orgs/{org}/members` | GET | Список участников организации |
| `/repos/{owner}/{repo}/hooks` | POST | Создать вебхук |

## Примеры кода

### Инициализация коннектора

```javascript
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('github', {
  appId: process.env.GITHUB_APP_ID,
  privateKey: process.env.GITHUB_PRIVATE_KEY,
  installationId: process.env.GITHUB_INSTALLATION_ID
});
```

### Синхронизация контрибьюторов в Brevo

```javascript
await tajo.connectors.sync('github', {
  type: 'full',
  resources: ['contributors'],
  repositories: ['owner/repo-1', 'owner/repo-2']
});

const status = await tajo.connectors.status('github');
console.log(status);
// {
//   connected: true,
//   lastSync: '2024-03-15T11:00:00Z',
//   contributorsCount: 245,
//   issuesTracked: 1890,
//   releasesTracked: 34
// }
```

### Обработка событий вебхуков

```javascript
app.post('/webhooks/github', async (req, res) => {
  const signature = req.get('X-Hub-Signature-256');
  const event = req.get('X-GitHub-Event');

  // Verify webhook signature
  if (!verifyGitHubSignature(req.body, signature)) {
    return res.status(401).send('Unauthorized');
  }

  await tajo.connectors.handleWebhook('github', {
    event,
    payload: req.body
  });

  res.status(200).send('OK');
});
```

### Запуск кампании релиза

```javascript
// Listen for new releases and trigger Brevo campaign
tajo.connectors.on('github', 'release.published', async (event) => {
  await tajo.campaigns.trigger('release-announcement', {
    listId: 21,
    params: {
      version: event.release.tag_name,
      release_notes: event.release.body,
      download_url: event.release.html_url
    }
  });
});
```

## Ограничения скорости

GitHub применяет лимиты запросов в зависимости от метода аутентификации:

| Аутентификация | Основной лимит | Search API |
| --- | --- | --- |
| **Без аутентификации** | 60 запросов/час | 10 запросов/мин |
| **Personal Access Token** | 5 000 запросов/час | 30 запросов/мин |
| **GitHub App (installation)** | 5 000 запросов/час | 30 запросов/мин |
| **GitHub App (user-to-server)** | 5 000 запросов/час | 30 запросов/мин |

Условные запросы

Tajo использует условные запросы (заголовки `If-None-Match` / `If-Modified-Since`) для снижения потребления API. Ответы с `304 Not Modified` не учитываются в лимитах.

Дополнительные ограничения:

- **Вторичные лимиты**: не более 100 параллельных запросов. Не более 900 очков в минуту для эндпоинтов REST API.
- **GraphQL**: 5 000 очков в час (стоимость запроса зависит от сложности).

## Устранение неполадок

### Частые проблемы

| Проблема | Причина | Решение |
| --- | --- | --- |
| 401 Unauthorized | Истёкший токен или неверные учётные данные | Перегенерируйте токен или переустановите GitHub App |
| 403 Forbidden | Недостаточные разрешения | Проверьте scope токена или разрешения App |
| 404 Not Found | Приватный репозиторий без доступа | Предоставьте доступ к репозиторию токену или App |
| Превышен лимит запросов | Слишком много API-вызовов | Включите условные запросы и уменьшите частоту синхронизации |
| Вебхуки не приходят | Неверный URL или файрвол | Проверьте, что URL вебхука публично доступен |

### Режим отладки

```yaml
connectors:
  github:
    debug: true
    log_level: verbose
    log_webhooks: true
```

### Проверка подключения

```bash
tajo connectors test github
# ✓ API authentication successful
# ✓ Repository access verified
# ✓ Issue data readable
# ✓ Webhook delivery active
# ✓ Rate limit healthy (4,850/5,000 remaining)
```

## Лучшие практики

1. **Используйте GitHub Apps вместо PAT**, GitHub Apps предоставляют детальные разрешения и автоматически обновляющиеся токены
2. **Включайте секреты вебхуков**, всегда проверяйте подписи вебхуков с HMAC-SHA256
3. **Используйте условные запросы**, используйте ETag, чтобы не тратить квоту лимитов
4. **Пагинируйте большие ответы**, GitHub возвращает максимум 100 элементов на страницу; итерируйте с заголовками `Link`
5. **Синхронизируйте в период низкой активности**, планируйте полные синхронизации вне пиковых часов разработки
6. **Отслеживайте заголовки лимитов**, проверяйте `X-RateLimit-Remaining`, чтобы проактивно ограничивать нагрузку

## Безопасность

- **Аутентификация GitHub App**, JWT на основе RSA-ключей с короткоживущими installation-токенами
- **Подписи вебхуков**, проверка HMAC-SHA256 для всех payload вебхуков
- **Fine-grained токены**, ограничены конкретными репозиториями и разрешениями
- **Только HTTPS**, все API-коммуникации зашифрованы через TLS 1.2+
- **Зашифрованное хранилище**, приватные ключи и токены зашифрованы в покое в Tajo
- **Истечение токенов**, fine-grained токены автоматически истекают; настройте уведомления о ротации

## Связанные ресурсы

- [Коннектор Jira](https://tajo.io/ru/docs/connectors/custom/jira)
- [Коннектор Linear](https://tajo.io/ru/docs/connectors/custom/linear)
- [Коннектор Notion](https://tajo.io/ru/docs/connectors/custom/notion)
- [Brevo Contacts API](https://tajo.io/ru/docs/contact-management)
