---
title: "Konektor GitHub"
description: "Kompletny przewodnik integracji GitHub do synchronizacji zdarzeń repozytorium, zgłoszeń, pull requestów i aktywności deweloperów z Brevo przez Tajo."
url: https://tajo.io/pl/docs/connectors/custom/github/
markdown: https://tajo.io/pl/docs/connectors/custom/github.md
lang: pl-PL
robots: noindex
---

Poproś o wcześniejszy dostęp

Podaj imię i firmowy adres e-mail. Wyślemy Ci link potwierdzający prośbę o dostęp do Tajo.

# Konektor GitHub

Status konektora: Planowany Jeszcze niezbudowany. Tajo nie uruchamia dziś tego konektora.

| Pole źródłowe | Pole docelowe | Przykładowa wartość |
| --- | --- | --- |
| `record.id` | `source_id` | `record_1042` |
| `record.updated_at` | `updated_at` | `2026-10-18T08:00:00Z` |
| `record.value` | `value` | `sample_value` |

Połącz swoje repozytoria GitHub z Brevo, aby śledzić zaangażowanie deweloperów, zarządzać przepływami powiadomień o wydaniach i monitorować aktywność społeczności przez Tajo.

## Przegląd

| Właściwość | Wartość |
| --- | --- |
| **Platforma** | GitHub |
| **Kategoria** | Niestandardowa |
| **Poziom konfiguracji** | Średni |
| **Integracja oficjalna** | Nie |
| **Synchronizowane dane** | Zdarzenia, Użytkownicy, Repozytoria |
| **Typ API** | REST API, GraphQL API |
| **Uwierzytelnianie** | GitHub App / Personal Access Token / OAuth 2.0 |
| **Bazowy URL** | `https://api.github.com` |
| **Wersja API** | `2022-11-28` (wersjonowanie przez nagłówek) |

## Funkcje

- **Śledzenie zgłoszeń i PR** - Synchronizuj zdarzenia zgłoszeń i pull requestów z osiami czasu kontaktów Brevo
- **Powiadomienia o wydaniach** - Wyzwalaj kampanie Brevo przy nowych wydaniach repozytorium
- **Synchronizacja współtwórców** - Mapuj współtwórców GitHub na kontakty Brevo dla angażowania społeczności
- **Śledzenie gwiazdek i forków** - Monitoruj metryki popularności repozytorium
- **Przekazywanie zdarzeń webhook** - Przekazuj zdarzenia GitHub do automatyzacji Brevo
- **Katalog repozytoriów** - Synchronizuj metadane repozytorium jako elementy katalogu Brevo

## Wymagania wstępne

Zanim zaczniesz, upewnij się, że masz:

1. Konto GitHub z dostępem do docelowych repozytoriów
2. GitHub App lub Personal Access Token (zalecany precyzyjny)
3. Dostęp administratora do repozytoriów dla konfiguracji webhooków
4. Konto Brevo z dostępem do API
5. Konto Tajo z aktywną subskrypcją

## Uwierzytelnianie

GitHub obsługuje wiele metod uwierzytelniania. Tajo zaleca używanie GitHub Apps dla dostępu na poziomie organizacji.

### Opcja 1: GitHub App (zalecane)

1. Przejdź do **Settings** > **Developer settings** > **GitHub Apps**
2. Kliknij **New GitHub App**
3. Skonfiguruj aplikację z tymi uprawnieniami:

```
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
```

### Opcja 2: Fine-Grained Personal Access Token

1. Przejdź do **Settings** > **Developer settings** > **Personal access tokens** > **Fine-grained tokens**
2. Kliknij **Generate new token**
3. Wybierz docelowe repozytoria
4. Przyznaj te uprawnienia:

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

Bezpieczeństwo tokenów

Precyzyjne tokeny mają daty wygaśnięcia. Skonfiguruj rotację tokenów przed wygaśnięciem. Tokeny instalacji GitHub App odświeżają się automatycznie i są preferowane do użytku produkcyjnego.

### Połączenie z 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
```

## Konfiguracja

### Podstawowa konfiguracja

```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
```

### Mapowanie pól

Mapuj dane użytkowników GitHub na atrybuty kontaktów 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
```

## Endpointy API

Tajo integruje się z następującymi endpointami GitHub REST API:

| Endpoint | Metoda | Cel |
| --- | --- | --- |
| `/repos/{owner}/{repo}/issues` | GET | Lista zgłoszeń repozytorium |
| `/repos/{owner}/{repo}/pulls` | GET | Lista pull requestów |
| `/repos/{owner}/{repo}/releases` | GET | Lista wydań |
| `/repos/{owner}/{repo}/contributors` | GET | Lista współtwórców |
| `/repos/{owner}/{repo}/stargazers` | GET | Lista obserwujących |
| `/repos/{owner}/{repo}/forks` | GET | Lista forków |
| `/repos/{owner}/{repo}/events` | GET | Lista zdarzeń repozytorium |
| `/users/{username}` | GET | Pobierz profil użytkownika |
| `/orgs/{org}/members` | GET | Lista członków organizacji |
| `/repos/{owner}/{repo}/hooks` | POST | Utwórz webhook |

## Przykłady kodu

### Inicjalizacja konektora

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

### Synchronizuj współtwórców z 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
// }
```

### Obsługa zdarzeń 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');
});
```

### Wyzwalanie kampanii o wydaniu

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

## Limity API

GitHub stosuje limity szybkości na podstawie metody uwierzytelniania:

| Uwierzytelnianie | Podstawowy limit | Search API |
| --- | --- | --- |
| **Bez uwierzytelniania** | 60 żądań/godzinę | 10 żądań/minutę |
| **Personal Access Token** | 5 000 żądań/godzinę | 30 żądań/minutę |
| **GitHub App (instalacja)** | 5 000 żądań/godzinę | 30 żądań/minutę |
| **GitHub App (user-to-server)** | 5 000 żądań/godzinę | 30 żądań/minutę |

Żądania warunkowe

Tajo używa żądań warunkowych (nagłówki `If-None-Match` / `If-Modified-Since`), aby zmniejszyć zużycie API. Odpowiedzi z `304 Not Modified` nie liczą się do limitów szybkości.

Dodatkowe limity:

- **Drugorzędne limity szybkości**: Nie więcej niż 100 równoczesnych żądań. Nie więcej niż 900 punktów na minutę dla endpointów REST API.
- **GraphQL**: 5 000 punktów na godzinę (koszt zapytania zależy od złożoności).

## Rozwiązywanie problemów

### Typowe problemy

| Problem | Przyczyna | Rozwiązanie |
| --- | --- | --- |
| 401 Unauthorized | Wygasły token lub błędne dane | Wygeneruj ponownie token lub zainstaluj ponownie GitHub App |
| 403 Forbidden | Niewystarczające uprawnienia | Sprawdź zakresy tokenu lub uprawnienia App |
| 404 Not Found | Prywatne repozytorium bez dostępu | Przyznaj dostęp do repozytorium dla tokenu lub App |
| Przekroczono limit | Za dużo wywołań API | Włącz żądania warunkowe i zmniejsz częstotliwość synchronizacji |
| Webhooki nie odbierane | Nieprawidłowy URL lub zapora | Zweryfikuj, że URL webhooka jest publicznie dostępny |

### Tryb debug

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

### Test połączenia

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

## Najlepsze praktyki

1. **Używaj GitHub Apps zamiast PAT** - GitHub Apps zapewniają granularne uprawnienia i automatycznie odświeżające się tokeny
2. **Włącz sekrety webhook** - Zawsze weryfikuj podpisy webhooków za pomocą HMAC-SHA256
3. **Używaj żądań warunkowych** - Korzystaj z ETagów, aby unikać marnowania limitu szybkości
4. **Stronicuj duże odpowiedzi** - GitHub zwraca maks. 100 elementów na stronę; iteruj z nagłówkami `Link`
5. **Synchronizuj w okresach niskiej aktywności** - Planuj pełne synchronizacje poza godzinami szczytu deweloperów
6. **Monitoruj nagłówki limitów** - Sprawdzaj `X-RateLimit-Remaining`, aby proaktywnie ograniczać przepustowość

## Bezpieczeństwo

- **Uwierzytelnianie GitHub App** - JWT oparty na kluczu RSA z krótkotrwałymi tokenami instalacji
- **Podpisy webhook** - Weryfikacja podpisu HMAC-SHA256 dla wszystkich ładunków webhook
- **Precyzyjne tokeny** - Ograniczone do określonych repozytoriów i uprawnień
- **Tylko HTTPS** - Cała komunikacja API zaszyfrowana przez TLS 1.2+
- **Szyfrowane przechowywanie** - Klucze prywatne i tokeny szyfrowane w spoczynku w Tajo
- **Wygasanie tokenów** - Precyzyjne tokeny automatycznie wygasają; skonfiguruj alerty rotacji

## Powiązane zasoby

- [Konektor Jira](https://tajo.io/pl/docs/connectors/custom/jira)
- [Konektor Linear](https://tajo.io/pl/docs/connectors/custom/linear)
- [Konektor Notion](https://tajo.io/pl/docs/connectors/custom/notion)
- [Brevo Contacts API](https://tajo.io/pl/docs/contact-management)
