---
title: "Конектор GitHub"
description: "Пълно ръководство за интеграция с GitHub за синхронизация на събития в хранилища, issue-та, pull request-и и активност на разработчиците с Brevo чрез Tajo."
url: https://tajo.io/bg/docs/connectors/custom/github/
markdown: https://tajo.io/bg/docs/connectors/custom/github.md
lang: bg-BG
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 за проследяване на ангажираността на разработчиците, работни потоци за известия за release-и и наблюдение на активността на общността чрез Tajo.

## Преглед

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

## Функции

- **Проследяване на issue-та и PR-и** – Синхронизирайте събития за issue-та и pull request-и към времевите линии на контактите в Brevo
- **Известия за release-и** – Задействайте кампании в Brevo при нови release-и в хранилищата
- **Синхронизация на contributor-и** – Мапвайте contributor-ите в GitHub към контакти в Brevo за ангажираност на общността
- **Проследяване на star-ове и fork-ове** – Наблюдавайте метриките за популярност на хранилището
- **Препращане на webhook събития** – Препращайте събития от GitHub към автоматизации в Brevo
- **Каталог на хранилищата** – Синхронизирайте метаданни на хранилищата като каталожни елементи в Brevo

## Предварителни условия

Преди да започнете, уверете се, че имате:

1. Акаунт в GitHub с достъп до целевите хранилища
2. GitHub App или Personal Access Token (препоръчва се fine-grained)
3. Администраторски достъп до хранилищата за конфигуриране на webhook
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 крайни точки:

| Endpoint | Method | Цел |
| --- | --- | --- |
| `/repos/{owner}/{repo}/issues` | GET | Списък на issue-тата в хранилище |
| `/repos/{owner}/{repo}/pulls` | GET | Списък на pull request-ите |
| `/repos/{owner}/{repo}/releases` | GET | Списък на release-ите |
| `/repos/{owner}/{repo}/contributors` | GET | Списък на contributor-ите |
| `/repos/{owner}/{repo}/stargazers` | GET | Списък на stargazer-ите |
| `/repos/{owner}/{repo}/forks` | GET | Списък на fork-овете |
| `/repos/{owner}/{repo}/events` | GET | Списък на събитията в хранилището |
| `/users/{username}` | GET | Извличане на потребителски профил |
| `/orgs/{org}/members` | GET | Списък на членовете на организацията |
| `/repos/{owner}/{repo}/hooks` | POST | Създаване на webhook |

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

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

```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
});
```

### Синхронизация на contributor-ите към 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
// }
```

### Обработка на webhook събития

```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');
});
```

### Задействане на кампания за release

```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** | 5000 заявки/час | 30 заявки/минута |
| **GitHub App (installation)** | 5000 заявки/час | 30 заявки/минута |
| **GitHub App (user-to-server)** | 5000 заявки/час | 30 заявки/минута |

Условни заявки

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

Допълнителни лимити:

- **Вторични лимити на заявки**: Не повече от 100 конкурентни заявки. Не повече от 900 точки на минута за REST API крайни точки.
- **GraphQL**: 5000 точки на час (цената на заявката варира според сложността).

## Отстраняване на проблеми

### Често срещани проблеми

| Проблем | Причина | Решение |
| --- | --- | --- |
| 401 Unauthorized | Изтекъл токен или грешни идентификационни данни | Генерирайте нов токен или преинсталирайте GitHub App |
| 403 Forbidden | Недостатъчни разрешения | Проверете обхватите на токена или разрешенията на App |
| 404 Not Found | Частно repo без достъп | Предоставете достъп до хранилището на токена или App |
| Надвишен лимит на заявки | Твърде много API повиквания | Активирайте условни заявки и намалете честотата на синхронизация |
| Webhooks не се получават | Грешен URL или firewall | Проверете дали webhook URL е публично достъпен |

### Debug режим

```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. **Активирайте webhook secrets** – Винаги проверявайте webhook подписите с HMAC-SHA256
3. **Използвайте условни заявки** – Използвайте ETags, за да избегнете хабене на лимита на заявките
4. **Пагинирайте големите отговори** – GitHub връща максимум 100 елемента на страница; итерирайте с хедъри `Link`
5. **Синхронизирайте при ниска активност** – Планирайте пълни синхронизации извън пиковите часове на разработка
6. **Наблюдавайте хедърите за лимит** – Проверявайте `X-RateLimit-Remaining` за проактивно throttling

## Сигурност

- **Автентикация с GitHub App** – RSA ключ-базиран JWT с краткотрайни installation токени
- **Webhook подписи** – HMAC-SHA256 верификация на подписите на всички webhook payloads
- **Fine-Grained токени** – Обхванати до конкретни хранилища и разрешения
- **Само HTTPS** – Цялата API комуникация е криптирана чрез TLS 1.2+
- **Криптирано съхранение** – Частните ключове и токените са криптирани в покой в Tajo
- **Изтичане на токени** – Fine-grained токените автоматично изтичат; настройте предупреждения за ротация

## Свързани ресурси

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