---
title: "GitHub Connector"
description: "Popoln vodnik za integracijo GitHub za sinhronizacijo dogodkov repozitorijev, težav, zahtevkov za potrditev in aktivnosti razvijalcev z Brevo prek Tajo."
url: https://tajo.io/sl/docs/connectors/custom/github/
markdown: https://tajo.io/sl/docs/connectors/custom/github.md
lang: sl-SI
robots: noindex
---

Zaprosite za zgodnji dostop

Vnesite svoje ime in službeni e-poštni naslov. Poslali vam bomo povezavo za potrditev zahteve za dostop do Taja.

# GitHub Connector

Stanje konektorja: Načrtovano Še ni izdelano. Tajo danes ne poganja tega konektorja.

| Izvorno polje | Ciljno polje | Vzorčna vrednost |
| --- | --- | --- |
| `record.id` | `source_id` | `record_1042` |
| `record.updated_at` | `updated_at` | `2026-10-18T08:00:00Z` |
| `record.value` | `value` | `sample_value` |

Poveži svoje repozitorije GitHub z Brevo za sledenje angažiranosti razvijalcev, delovne tokove obvestil o izdajah in spremljanje aktivnosti skupnosti prek Tajo.

## Pregled

| Lastnost | Vrednost |
| --- | --- |
| **Platforma** | GitHub |
| **Kategorija** | Po meri |
| **Zahtevnost nastavitve** | Srednja |
| **Uradna integracija** | Ne |
| **Sinhronizirani podatki** | Dogodki, uporabniki, repozitoriji |
| **Tip API** | REST API, GraphQL API |
| **Avtentikacija** | GitHub App / Personal Access Token / OAuth 2.0 |
| **Osnovni URL** | `https://api.github.com` |
| **Različica API** | `2022-11-28` (različiranje na osnovi glave) |

## Funkcionalnosti

- **Sledenje težavam in PR** – sinhronizacija dogodkov težav in zahtevkov za potrditev na časovnice stikov Brevo
- **Obvestila o izdajah** – sproži kampanje Brevo ob novih izdajah repozitorija
- **Sinhronizacija prispevnikov** – preslikaj prispevnike GitHub v stike Brevo za angažiranje skupnosti
- **Sledenje zvezdicam in vejam** – spremljanje meritev priljubljenosti repozitorija
- **Posredovanje webhook dogodkov** – posreduj dogodke GitHub v avtomatizacije Brevo
- **Katalog repozitorijev** – sinhronizacija metapodatkov repozitorija kot katalognih elementov Brevo

## Predpogoji

Preden začneš, se prepričaj, da imaš:

1. Račun GitHub z dostopom do ciljnih repozitorijev
2. GitHub App ali Personal Access Token (priporočen podrobno določen)
3. Administratorski dostop do repozitorijev za konfiguracijo webhookov
4. Brevo račun z dostopom do API
5. Tajo račun z aktivno naročnino

## Avtentikacija

GitHub podpira več metod avtentikacije. Tajo priporoča uporabo GitHub Apps za dostop na ravni organizacije.

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

1. Pojdi na **Settings** > **Developer settings** > **GitHub Apps**
2. Klikni **New GitHub App**
3. Nastavi aplikacijo s temi dovoljenji:

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

### Možnost 2: Fine-Grained Personal Access Token

1. Pojdi na **Settings** > **Developer settings** > **Personal access tokens** > **Fine-grained tokens**
2. Klikni **Generate new token**
3. Izberi ciljne repozitorije
4. Dodeli ta dovoljenja:

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

Varnost žetonov

Podrobno določeni žetoni imajo datume poteka. Nastavi rotacijo žetonov pred potekom. Žetoni za namestitev GitHub App se samodejno osvežijo in so za produkcijsko rabo primernejši.

### Povezava s 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
```

## Konfiguracija

### Osnovna nastavitev

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

### Preslikava polj

Preslikaj podatke o uporabniku GitHub v atribute stikov 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
```

## Končne točke API

Tajo se integrira z naslednjimi končnimi točkami GitHub REST API:

| Končna točka | Metoda | Namen |
| --- | --- | --- |
| `/repos/{owner}/{repo}/issues` | GET | Seznam težav repozitorija |
| `/repos/{owner}/{repo}/pulls` | GET | Seznam zahtevkov za potrditev |
| `/repos/{owner}/{repo}/releases` | GET | Seznam izdaj |
| `/repos/{owner}/{repo}/contributors` | GET | Seznam prispevnikov |
| `/repos/{owner}/{repo}/stargazers` | GET | Seznam oboževalcev |
| `/repos/{owner}/{repo}/forks` | GET | Seznam vej |
| `/repos/{owner}/{repo}/events` | GET | Seznam dogodkov repozitorija |
| `/users/{username}` | GET | Pridobi profil uporabnika |
| `/orgs/{org}/members` | GET | Seznam članov organizacije |
| `/repos/{owner}/{repo}/hooks` | POST | Ustvari webhook |

## Primeri kode

### Inicializacija konektorja

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

### Sinhronizacija prispevnikov 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
// }
```

### Obravnava webhook dogodkov

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

### Sprožanje kampanje ob izdaji

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

## Omejitve hitrosti

GitHub uveljavi omejitve hitrosti glede na metodo avtentikacije:

| Avtentikacija | Primarna omejitev hitrosti | Search API |
| --- | --- | --- |
| **Brez avtentikacije** | 60 zahtevkov/uro | 10 zahtevkov/min |
| **Personal Access Token** | 5.000 zahtevkov/uro | 30 zahtevkov/min |
| **GitHub App (namestitev)** | 5.000 zahtevkov/uro | 30 zahtevkov/min |
| **GitHub App (uporabnik-strežnik)** | 5.000 zahtevkov/uro | 30 zahtevkov/min |

Pogojni zahtevki

Tajo za zmanjšanje porabe API uporablja pogojne zahtevke (glave `If-None-Match` / `If-Modified-Since`). Odgovori s `304 Not Modified` se ne štejejo pri omejitvah hitrosti.

Dodatne omejitve:

- **Sekundarne omejitve hitrosti**: Največ 100 sočasnih zahtevkov. Največ 900 točk na minuto za končne točke REST API.
- **GraphQL**: 5.000 točk na uro (stroški poizvedbe se razlikujejo glede na kompleksnost).

## Odpravljanje težav

### Pogoste težave

| Težava | Vzrok | Rešitev |
| --- | --- | --- |
| 401 Unauthorized | Potekel žeton ali napačne poverilnice | Obnovi žeton ali znova namesti GitHub App |
| 403 Forbidden | Nezadostna dovoljenja | Preveri obsege žetona ali dovoljenja aplikacije |
| 404 Not Found | Zasebni repozitorij brez dostopa | Dodeli dostop do repozitorija žetonu ali aplikaciji |
| Prekoračena omejitev hitrosti | Preveč klicev API | Omogoči pogojne zahtevke in zmanjšaj pogostost sinhronizacije |
| Webhooks niso prejeti | Napačen URL ali požarni zid | Preveri, da je URL webhookov javno dostopen |

### Način odpravljanja napak

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

### Preizkus povezave

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

## Najboljše prakse

1. **Uporabi GitHub Apps namesto PAT** – GitHub Apps zagotavljajo natančna dovoljenja in samodejno osvežujoče žetone
2. **Omogoči skrivnosti webhookov** – vedno preverjaj podpise webhookov z HMAC-SHA256
3. **Uporabi pogojne zahtevke** – izkoristi ETag-e, da ne zapravljaš kvote omejitve hitrosti
4. **Paginiraj velike odgovore** – GitHub vrne največ 100 elementov na stran; iteriraj z glavami `Link`
5. **Sinhronizacija med nizko aktivnostjo** – uredi polne sinhronizacije izven koničnih ur razvoja
6. **Spremljaj glave omejitve hitrosti** – preveri `X-RateLimit-Remaining` za proaktivno omejevanje

## Varnost

- **Avtentikacija GitHub App** – JWT na osnovi ključa RSA s kratkotrajnimi žetoni namestitve
- **Podpisi webhookov** – preverjanje podpisa HMAC-SHA256 za vse vsebine webhookov
- **Podrobno določeni žetoni** – omejeni na določene repozitorije in dovoljenja
- **Samo HTTPS** – vsa komunikacija API šifrirana prek TLS 1.2+
- **Šifrirano shranjevanje** – zasebni ključi in žetoni šifrirani v mirovanju v Tajo
- **Potek žetonov** – podrobno določeni žetoni samodejno potečejo; nastavi opozorila za rotacijo

## Povezani viri

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