---
title: "Konektor GitHub"
description: "Kompletní průvodce integrací GitHub pro synchronizaci událostí repozitáře, issues, pull requestů a aktivity vývojářů s Brevo přes Tajo."
url: https://tajo.io/cz/docs/connectors/custom/github/
markdown: https://tajo.io/cz/docs/connectors/custom/github.md
lang: cs-CZ
robots: noindex
---

Požádejte o přednostní přístup

Zadejte své jméno a pracovní e-mailovou adresu. Pošleme vám odkaz pro potvrzení žádosti o přístup k Tajo.

# Konektor GitHub

Stav konektoru: Plánováno Zatím nevytvořeno. Tajo tento konektor dnes neprovozuje.

| Zdrojové pole | Cílové pole | Ukázková hodnota |
| --- | --- | --- |
| `record.id` | `source_id` | `record_1042` |
| `record.updated_at` | `updated_at` | `2026-10-18T08:00:00Z` |
| `record.value` | `value` | `sample_value` |

Propojte své repozitáře GitHub s Brevo pro sledování zapojení vývojářů, pracovní toky notifikací o vydáních a monitorování aktivity komunity přes Tajo.

## Přehled

| Vlastnost | Hodnota |
| --- | --- |
| **Platforma** | GitHub |
| **Kategorie** | Vlastní |
| **Složitost nastavení** | Střední |
| **Oficiální integrace** | Ne |
| **Synchronizovaná data** | Události, Uživatelé, Repozitáře |
| **Typ API** | REST API, GraphQL API |
| **Ověření** | GitHub App / Osobní přístupový token / OAuth 2.0 |
| **Základní URL** | `https://api.github.com` |
| **Verze API** | `2022-11-28` (verzování pomocí hlaviček) |

## Funkce

- **Sledování issues a PR** – Synchronizujte události issues a pull requestů do časových os kontaktů Brevo
- **Notifikace o vydáních** – Spouštějte kampaně Brevo při nových vydáních repozitáře
- **Synchronizace přispěvatelů** – Mapujte přispěvatele GitHub na kontakty Brevo pro zapojení komunity
- **Sledování hvězdiček a forků** – Monitorujte metriky popularity repozitáře
- **Přeposílání webhookových událostí** – Přeposílejte události GitHub do automatizací Brevo
- **Katalog repozitářů** – Synchronizujte metadata repozitářů jako položky katalogu Brevo

## Předpoklady

Než začnete, ujistěte se, že máte:

1. Účet GitHub s přístupem k cílovým repozitářům
2. GitHub App nebo osobní přístupový token (doporučen jemně granulovaný)
3. Administrátorský přístup k repozitářům pro konfiguraci webhooků
4. Účet Brevo s přístupem k API
5. Účet Tajo s aktivním předplatným

## Ověření

GitHub podporuje více metod ověřování. Tajo doporučuje použití GitHub Apps pro přístup na úrovni organizace.

### Možnost 1: GitHub App (doporučeno)

1. Přejděte do **Settings** > **Developer settings** > **GitHub Apps**
2. Klikněte na **New GitHub App**
3. Nakonfigurujte aplikaci s těmito oprávněními:

```
Oprávnění repozitáře:
  Issues: Čtení
  Pull requests: Čtení
  Contents: Čtení
  Metadata: Čtení

Oprávnění organizace:
  Members: Čtení

Přihlásit se k odběru událostí:
  Issues
  Pull request
  Push
  Release
  Star
  Fork
```

### Možnost 2: Jemně granulovaný osobní přístupový token

1. Přejděte do **Settings** > **Developer settings** > **Personal access tokens** > **Fine-grained tokens**
2. Klikněte na **Generate new token**
3. Vyberte cílové repozitáře
4. Udělte tato oprávnění:

```
Přístup k repozitáři: Vybrané repozitáře
Oprávnění:
  Issues: Pouze čtení
  Pull requests: Pouze čtení
  Contents: Pouze čtení
  Metadata: Pouze čtení
```

Bezpečnost tokenu

Jemně granulované tokeny mají data vypršení platnosti. Nastavte rotaci tokenů před vypršením. Instalační tokeny GitHub App se automaticky obnovují a jsou preferovány pro produkční použití.

### Připojení k Tajo

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

# Použití osobního přístupového tokenu
tajo connectors install github \
  --token $GITHUB_TOKEN
```

## Konfigurace

### Základní nastavení

```yaml
connectors:
  github:
    enabled: true
    auth_type: "github_app"  # nebo "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
```

### Mapování polí

Mapujte uživatelská data GitHub na atributy kontaktů Brevo:

```yaml
field_mapping:
  # Standardní pole
  login: GITHUB_USERNAME
  email: email
  name: FIRSTNAME

  # Metriky vývojáře
  contributions: GITHUB_CONTRIBUTIONS
  repositories_count: GITHUB_REPOS
  followers: GITHUB_FOLLOWERS
  created_at: GITHUB_JOINED

  # Vlastní atributy
  company: COMPANY
  location: LOCATION
  bio: GITHUB_BIO
```

## Koncové body API

Tajo se integruje s následujícími koncovými body GitHub REST API:

| Koncový bod | Metoda | Účel |
| --- | --- | --- |
| `/repos/{owner}/{repo}/issues` | GET | Výpis issues repozitáře |
| `/repos/{owner}/{repo}/pulls` | GET | Výpis pull requestů |
| `/repos/{owner}/{repo}/releases` | GET | Výpis vydání |
| `/repos/{owner}/{repo}/contributors` | GET | Výpis přispěvatelů |
| `/repos/{owner}/{repo}/stargazers` | GET | Výpis hvězd |
| `/repos/{owner}/{repo}/forks` | GET | Výpis forků |
| `/repos/{owner}/{repo}/events` | GET | Výpis událostí repozitáře |
| `/users/{username}` | GET | Získání profilu uživatele |
| `/orgs/{org}/members` | GET | Výpis členů organizace |
| `/repos/{owner}/{repo}/hooks` | POST | Vytvoření webhooku |

## Příklady kódu

### Inicializace konektoru

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

### Synchronizace přispěvatelů do 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
// }
```

### Zpracování webhookových událostí

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

  // Ověření podpisu webhooku
  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');
});
```

### Spuštění kampaně při vydání

```javascript
// Naslouchání novým vydáním a spuštění kampaně Brevo
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
    }
  });
});
```

## Omezení rychlosti

GitHub aplikuje omezení rychlosti na základě metody ověřování:

| Ověření | Primární limit rychlosti | Search API |
| --- | --- | --- |
| **Neověřený** | 60 požadavků/hodinu | 10 požadavků/minutu |
| **Osobní přístupový token** | 5 000 požadavků/hodinu | 30 požadavků/minutu |
| **GitHub App (instalace)** | 5 000 požadavků/hodinu | 30 požadavků/minutu |
| **GitHub App (uživatel-server)** | 5 000 požadavků/hodinu | 30 požadavků/minutu |

Podmíněné požadavky

Tajo používá podmíněné požadavky (hlavičky `If-None-Match` / `If-Modified-Since`) ke snížení spotřeby API. Odpovědi s `304 Not Modified` se nepočítají do limitů rychlosti.

Další limity:

- **Sekundární limity rychlosti**: Ne více než 100 souběžných požadavků. Ne více než 900 bodů za minutu pro koncové body REST API.
- **GraphQL**: 5 000 bodů za hodinu (cena dotazu se liší podle složitosti).

## Řešení problémů

### Časté problémy

| Problém | Příčina | Řešení |
| --- | --- | --- |
| 401 Unauthorized | Vypršelý token nebo špatné přihlašovací údaje | Obnovte token nebo přeinstalujte GitHub App |
| 403 Forbidden | Nedostatečná oprávnění | Zkontrolujte rozsahy tokenů nebo oprávnění App |
| 404 Not Found | Soukromý repozitář bez přístupu | Udělte přístup k repozitáři tokenu nebo App |
| Překročen limit rychlosti | Příliš mnoho volání API | Povolte podmíněné požadavky a snižte frekvenci synchronizace |
| Webhooky nejsou přijaty | Nesprávná URL nebo brána firewall | Ověřte, že URL webhooku je veřejně přístupná |

### Režim ladění

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

### Test připojení

```bash
tajo connectors test github
# ✓ Ověření API úspěšné
# ✓ Přístup k repozitáři ověřen
# ✓ Data issues čitelná
# ✓ Doručování webhooků aktivní
# ✓ Limit rychlosti v pořádku (4 850/5 000 zbývá)
```

## Osvědčené postupy

1. **Používejte GitHub Apps místo PAT** – GitHub Apps poskytují granulovaná oprávnění a automaticky obnovované tokeny
2. **Povolte tajné klíče webhooků** – Vždy ověřujte podpisy webhooků pomocí HMAC-SHA256
3. **Používejte podmíněné požadavky** – Využívejte ETags, abyste neplýtvali limitem API
4. **Stránkujte velké odpovědi** – GitHub vrací max 100 položek na stránku; iterujte s hlavičkami `Link`
5. **Synchronizujte v době nízké aktivity** – Plánujte plné synchronizace mimo špičky vývoje
6. **Monitorujte hlavičky limitu rychlosti** – Kontrolujte `X-RateLimit-Remaining` pro proaktivní omezování

## Zabezpečení

- **Ověření GitHub App** – JWT na bázi RSA klíče s krátkodobými instalačními tokeny
- **Podpisy webhooků** – Ověření podpisu HMAC-SHA256 u všech payloadů webhooků
- **Jemně granulované tokeny** – Omezeny na konkrétní repozitáře a oprávnění
- **Pouze HTTPS** – Veškerá komunikace API šifrována přes TLS 1.2+
- **Šifrované úložiště** – Soukromé klíče a tokeny šifrované v klidu v Tajo
- **Vypršení tokenů** – Jemně granulované tokeny automaticky vyprší; nastavte upozornění na rotaci

## Související zdroje

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