---
title: "GitHub Konektor"
description: "Kompletan vodič za integraciju GitHuba za sinkronizaciju događaja repozitorija, problema, pull zahtjeva i razvojnih aktivnosti s Brevom putem Taja."
url: https://tajo.io/hr/docs/connectors/custom/github/
markdown: https://tajo.io/hr/docs/connectors/custom/github.md
lang: hr-HR
robots: noindex
---

Zatražite rani pristup

Unesite ime i poslovnu adresu e-pošte. Poslat ćemo vam poveznicu za potvrdu zahtjeva za pristup Taju.

# GitHub Konektor

Status konektora: Planirano Još nije izrađeno. Tajo danas ne pokreće ovaj konektor.

| Izvorno polje | Odredišno polje | Primjer vrijednosti |
| --- | --- | --- |
| `record.id` | `source_id` | `record_1042` |
| `record.updated_at` | `updated_at` | `2026-10-18T08:00:00Z` |
| `record.value` | `value` | `sample_value` |

Povežite svoje GitHub repozitorije s Brevom za praćenje angažmana developera, tijekove rada obavijesti o izdanjima i praćenje aktivnosti zajednice putem Taja.

## Pregled

| Svojstvo | Vrijednost |
| --- | --- |
| **Platforma** | GitHub |
| **Kategorija** | Prilagođeno |
| **Složenost postavljanja** | Srednje |
| **Službena integracija** | Ne |
| **Sinkronizirani podaci** | Događaji, Korisnici, Repozitoriji |
| **Vrsta API-ja** | REST API, GraphQL API |
| **Autentifikacija** | GitHub App / Personal Access Token / OAuth 2.0 |
| **Osnovni URL** | `https://api.github.com` |
| **Verzija API-ja** | `2022-11-28` (verzioniranje putem zaglavlja) |

## Značajke

- **Praćenje problema i PR-ova** - Sinkronizirajte događaje problema i pull zahtjeva s Brevo vremenskim linijama kontakata
- **Obavijesti o izdanjima** - Pokrećite Brevo kampanje za nova izdanja repozitorija
- **Sinkronizacija suradnika** - Mapirajte GitHub suradnike na Brevo kontakte za angažman zajednice
- **Praćenje zvjezdica i forkova** - Pratite metrike popularnosti repozitorija
- **Prosljeđivanje Webhook događaja** - Prosljeđujte GitHub događaje Brevo automatizacijama
- **Katalog repozitorija** - Sinkronizirajte metapodatke repozitorija kao Brevo stavke kataloga

## Preduvjeti

Prije nego što počnete, osigurajte da imate:

1. GitHub račun s pristupom ciljnim repozitorijima
2. GitHub App ili Personal Access Token (preporučuju se granularni)
3. Administratorski pristup repozitorijima za konfiguraciju webhookova
4. Brevo račun s API pristupom
5. Tajo račun s aktivnom pretplatom

## Autentifikacija

GitHub podržava više metoda autentifikacije. Tajo preporučuje korištenje GitHub Apps za pristup na razini organizacije.

### Opcija 1: GitHub App (Preporučeno)

1. Idite na **Postavke** > **Developer settings** > **GitHub Apps**
2. Kliknite **New GitHub App**
3. Konfigurirajte aplikaciju s ovim dozvolama:

```
Dozvole repozitorija:
  Issues: Čitanje
  Pull requests: Čitanje
  Contents: Čitanje
  Metadata: Čitanje

Dozvole organizacije:
  Members: Čitanje

Pretplata na događaje:
  Issues
  Pull request
  Push
  Release
  Star
  Fork
```

### Opcija 2: Granularni Personal Access Token

1. Idite na **Postavke** > **Developer settings** > **Personal access tokens** > **Fine-grained tokens**
2. Kliknite **Generate new token**
3. Odaberite ciljne repozitorije
4. Dodijelite ove dozvole:

```
Pristup repozitoriju: Odabrani repozitoriji
Dozvole:
  Issues: Samo čitanje
  Pull requests: Samo čitanje
  Contents: Samo čitanje
  Metadata: Samo čitanje
```

Sigurnost tokena

Granularni tokeni imaju datume isteka. Postavite rotaciju tokena prije isteka. GitHub App instalacijski tokeni se automatski obnavljaju i preferirani su za produkcijsku upotrebu.

### Povezivanje s Tajom

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

# Korištenjem Personal Access Tokena
tajo connectors install github \
  --token $GITHUB_TOKEN
```

## Konfiguracija

### Osnovna konfiguracija

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

### Mapiranje polja

Mapirajte GitHub korisničke podatke na Brevo atribute kontakata:

```yaml
field_mapping:
  # Standardna polja
  login: GITHUB_USERNAME
  email: email
  name: FIRSTNAME

  # Metrike developera
  contributions: GITHUB_CONTRIBUTIONS
  repositories_count: GITHUB_REPOS
  followers: GITHUB_FOLLOWERS
  created_at: GITHUB_JOINED

  # Prilagođeni atributi
  company: COMPANY
  location: LOCATION
  bio: GITHUB_BIO
```

## API krajnje točke

Tajo se integrira sa sljedećim GitHub REST API krajnjim točkama:

| Krajnja točka | Metoda | Namjena |
| --- | --- | --- |
| `/repos/{owner}/{repo}/issues` | GET | Popis problema repozitorija |
| `/repos/{owner}/{repo}/pulls` | GET | Popis pull zahtjeva |
| `/repos/{owner}/{repo}/releases` | GET | Popis izdanja |
| `/repos/{owner}/{repo}/contributors` | GET | Popis suradnika |
| `/repos/{owner}/{repo}/stargazers` | GET | Popis korisnika koji su dodali zvjezdicu |
| `/repos/{owner}/{repo}/forks` | GET | Popis forkova |
| `/repos/{owner}/{repo}/events` | GET | Popis događaja repozitorija |
| `/users/{username}` | GET | Dohvaćanje korisničkog profila |
| `/orgs/{org}/members` | GET | Popis članova organizacije |
| `/repos/{owner}/{repo}/hooks` | POST | Stvaranje webhookova |

## Primjeri koda

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

### Sinkronizacija suradnika s Brevom

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

### Rukovanje Webhook događajima

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

  // Provjera webhook potpisa
  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');
});
```

### Pokretanje kampanje za izdanje

```javascript
// Slušanje novih izdanja i pokretanje Brevo kampanje
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
    }
  });
});
```

## Ograničenja brzine

GitHub primjenjuje ograničenja brzine ovisno o metodi autentifikacije:

| Autentifikacija | Primarno ograničenje brzine | Search API |
| --- | --- | --- |
| **Neautentificirano** | 60 zahtjeva/sat | 10 zahtjeva/minuti |
| **Personal Access Token** | 5.000 zahtjeva/sat | 30 zahtjeva/minuti |
| **GitHub App (instalacija)** | 5.000 zahtjeva/sat | 30 zahtjeva/minuti |
| **GitHub App (user-to-server)** | 5.000 zahtjeva/sat | 30 zahtjeva/minuti |

Uvjetni zahtjevi

Tajo koristi uvjetne zahtjeve (zaglavlja `If-None-Match` / `If-Modified-Since`) za smanjenje potrošnje API-ja. Odgovori s `304 Not Modified` ne računaju se u ograničenja brzine.

Dodatna ograničenja:

- **Sekundarna ograničenja brzine**: Najviše 100 istovremenih zahtjeva. Najviše 900 bodova po minuti za REST API krajnje točke.
- **GraphQL**: 5.000 bodova po satu (trošak upita varira po složenosti).

## Rješavanje problema

### Uobičajeni problemi

| Problem | Uzrok | Rješenje |
| --- | --- | --- |
| 401 Unauthorized | Istekli token ili pogrešne vjerodajnice | Regenerirajte token ili ponovo instalirajte GitHub App |
| 403 Forbidden | Nedostatne dozvole | Provjerite opsege tokena ili dozvole App-a |
| 404 Not Found | Privatni repozitorij bez pristupa | Dodijelite pristup repozitoriju tokenu ili App-u |
| Prekoračeno ograničenje brzine | Previše API poziva | Omogućite uvjetne zahtjeve i smanjite učestalost sinkronizacije |
| Webhooks se ne primaju | Netočan URL ili vatrozid | Provjerite da je webhook URL javno dostupan |

### Način otklanjanja grešaka

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

### Testiranje veze

```bash
tajo connectors test github
# ✓ API autentifikacija uspješna
# ✓ Pristup repozitoriju potvrđen
# ✓ Podaci o problemima čitljivi
# ✓ Isporuka webhookova aktivna
# ✓ Ograničenje brzine zdravo (4.850/5.000 preostalo)
```

## Preporučene prakse

1. **Koristite GitHub Apps umjesto PAT-ova** - GitHub Apps pružaju granularne dozvole i tokene koji se automatski obnavljaju
2. **Omogućite tajne webhookova** - Uvijek verificirajte webhook potpise s HMAC-SHA256
3. **Koristite uvjetne zahtjeve** - Iskoristite ETagove kako biste izbjegli trošenje kvote ograničenja brzine
4. **Paginirajte velike odgovore** - GitHub vraća maks. 100 stavki po stranici; iterirajte s `Link` zaglavljima
5. **Sinkronizirajte za vrijeme niske aktivnosti** - Zakazujte pune sinkronizacije izvan vršnih razvojnih sati
6. **Pratite zaglavlja ograničenja brzine** - Provjerite `X-RateLimit-Remaining` za proaktivno usporavanje

## Sigurnost

- **Autentifikacija GitHub App-om** - JWT temeljen na RSA ključu s kratkoročnim instalacijskim tokenima
- **Webhook potpisi** - HMAC-SHA256 verifikacija potpisa na svim webhook sadržajima
- **Granularni tokeni** - Ograničeni na određene repozitorije i dozvole
- **Samo HTTPS** - Sva API komunikacija šifrirana putem TLS 1.2+
- **Šifrirano pohranjivanje** - Privatni ključevi i tokeni šifrirani u mirovanju u Taju
- **Istek tokena** - Granularni tokeni automatski ističu; postavite alarme za rotaciju

## Povezani resursi

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