---
title: "Conector GitHub"
description: "Ghid complet de integrare GitHub pentru sincronizarea evenimentelor din depozite, problemelor, cererilor de pull și activității dezvoltatorilor cu Brevo prin Tajo."
url: https://tajo.io/ro/docs/connectors/custom/github/
markdown: https://tajo.io/ro/docs/connectors/custom/github.md
lang: ro-RO
robots: noindex
---

Solicită acces anticipat

Introduceți prenumele și adresa de e-mail profesională. Vă vom trimite un link pentru a confirma cererea de acces la Tajo.

# Conector GitHub

Starea conectorului: Planificat Încă neconstruit. Tajo nu rulează astăzi acest conector.

| Câmp sursă | Câmp destinație | Valoare exemplu |
| --- | --- | --- |
| `record.id` | `source_id` | `record_1042` |
| `record.updated_at` | `updated_at` | `2026-10-18T08:00:00Z` |
| `record.value` | `value` | `sample_value` |

Conectați depozitele GitHub la Brevo pentru urmărirea implicării dezvoltatorilor, fluxuri de notificare pentru lansări și monitorizarea activității comunității prin Tajo.

## Prezentare generală

| Proprietate | Valoare |
| --- | --- |
| **Platformă** | GitHub |
| **Categorie** | Personalizat |
| **Complexitate configurare** | Moderată |
| **Integrare oficială** | Nu |
| **Date sincronizate** | Evenimente, Utilizatori, Depozite |
| **Tip API** | REST API, GraphQL API |
| **Autentificare** | GitHub App / Token de acces personal / OAuth 2.0 |
| **URL de bază** | `https://api.github.com` |
| **Versiune API** | `2022-11-28` (versionare bazată pe antet) |

## Funcționalități

- **Urmărire probleme și PR-uri** - Sincronizați evenimentele de probleme și cereri de pull în cronologiile de contact Brevo
- **Notificări lansări** - Declanșați campanii Brevo la lansări noi de depozite
- **Sincronizare contributori** - Mapați contributorii GitHub la contactele Brevo pentru implicarea comunității
- **Urmărire stele și fork-uri** - Monitorizați valorile de popularitate ale depozitelor
- **Redirecționare evenimente webhook** - Transmiteți evenimentele GitHub la automatizările Brevo
- **Catalog depozite** - Sincronizați metadatele depozitelor ca elemente din catalogul Brevo

## Cerințe preliminare

Înainte de a începe, asigurați-vă că aveți:

1. Un cont GitHub cu acces la depozitele țintă
2. O aplicație GitHub sau Token de acces personal (recomandat fin-granulat)
3. Acces de administrator la depozite pentru configurarea webhook-urilor
4. Un cont Brevo cu acces API
5. Un cont Tajo cu abonament activ

## Autentificare

GitHub suportă mai multe metode de autentificare. Tajo recomandă utilizarea GitHub Apps pentru acces la nivel de organizație.

### Opțiunea 1: GitHub App (Recomandat)

1. Navigați la **Settings** > **Developer settings** > **GitHub Apps**
2. Faceți clic pe **New GitHub App**
3. Configurați aplicația cu aceste permisiuni:

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

### Opțiunea 2: Token de acces personal fin-granulat

1. Accesați **Settings** > **Developer settings** > **Personal access tokens** > **Fine-grained tokens**
2. Faceți clic pe **Generate new token**
3. Selectați depozitele țintă
4. Acordați aceste permisiuni:

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

Securitate token

Tokenii fin-granulați au date de expirare. Configurați rotația tokenului înainte de expirare. Tokenii de instalare GitHub App se reîmprospătează automat și sunt preferați pentru utilizarea în producție.

### Conectare la 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
```

## Configurare

### Configurare de bază

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

### Mapare câmpuri

Mapați datele utilizatorilor GitHub la atributele de contact 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
```

## Puncte finale API

Tajo se integrează cu următoarele puncte finale ale API-ului REST GitHub:

| Punct final | Metodă | Scop |
| --- | --- | --- |
| `/repos/{owner}/{repo}/issues` | GET | Listează problemele depozitului |
| `/repos/{owner}/{repo}/pulls` | GET | Listează cererile de pull |
| `/repos/{owner}/{repo}/releases` | GET | Listează lansările |
| `/repos/{owner}/{repo}/contributors` | GET | Listează contributorii |
| `/repos/{owner}/{repo}/stargazers` | GET | Listează cei care au dat stea |
| `/repos/{owner}/{repo}/forks` | GET | Listează fork-urile |
| `/repos/{owner}/{repo}/events` | GET | Listează evenimentele depozitului |
| `/users/{username}` | GET | Obține profilul utilizatorului |
| `/orgs/{org}/members` | GET | Listează membrii organizației |
| `/repos/{owner}/{repo}/hooks` | POST | Creează webhook |

## Exemple de cod

### Inițializare conector

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

### Sincronizare contributori cu 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
// }
```

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

### Declanșare campanie de lansare

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

## Limite de rată

GitHub aplică limite de rată bazate pe metoda de autentificare:

| Autentificare | Limită de rată principală | API Căutare |
| --- | --- | --- |
| **Neautentificat** | 60 cereri/oră | 10 cereri/minut |
| **Token de acces personal** | 5.000 cereri/oră | 30 cereri/minut |
| **GitHub App (instalare)** | 5.000 cereri/oră | 30 cereri/minut |
| **GitHub App (utilizator-la-server)** | 5.000 cereri/oră | 30 cereri/minut |

Cereri condiționale

Tajo utilizează cereri condiționale (anteturi `If-None-Match` / `If-Modified-Since`) pentru a reduce consumul de API. Răspunsurile cu `304 Not Modified` nu sunt contabilizate în limitele de rată.

Limite suplimentare:

- **Limite de rată secundare**: Nu mai mult de 100 cereri concurente. Nu mai mult de 900 puncte pe minut pentru punctele finale REST API.
- **GraphQL**: 5.000 puncte pe oră (costul interogării variază în funcție de complexitate).

## Depanare

### Probleme frecvente

| Problemă | Cauză | Soluție |
| --- | --- | --- |
| 401 Neautorizat | Token expirat sau credențiale greșite | Regenerați tokenul sau reinstalați GitHub App |
| 403 Interzis | Permisiuni insuficiente | Verificați scopurile tokenului sau permisiunile aplicației |
| 404 Negăsit | Depozit privat fără acces | Acordați acces la depozit tokenului sau aplicației |
| Limită de rată depășită | Prea multe apeluri API | Activați cererile condiționale și reduceți frecvența sincronizării |
| Webhook-uri nereceptionate | URL incorect sau firewall | Verificați că URL-ul webhook este accesibil public |

### Modul de depanare

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

### Testare conexiune

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

## Bune practici

1. **Utilizați GitHub Apps față de PAT-uri** - GitHub Apps oferă permisiuni granulare și tokeni cu auto-reîmprospătare
2. **Activați secretele webhook** - Verificați întotdeauna semnăturile webhook cu HMAC-SHA256
3. **Utilizați cereri condiționale** - Valorificați ETag-urile pentru a evita risipirea cotei de limite de rată
4. **Paginați răspunsurile mari** - GitHub returnează maxim 100 elemente pe pagină; iterați cu anteturile `Link`
5. **Sincronizați în perioade de activitate redusă** - Programați sincronizări complete în afara orelor de vârf de dezvoltare
6. **Monitorizați anteturile limitei de rată** - Verificați `X-RateLimit-Remaining` pentru a limita proactiv

## Securitate

- **Autentificare GitHub App** - JWT bazat pe cheie RSA cu tokeni de instalare de scurtă durată
- **Semnături webhook** - Verificare semnătură HMAC-SHA256 pe toate payload-urile webhook
- **Tokeni fin-granulați** - Limitați la depozite și permisiuni specifice
- **Numai HTTPS** - Toată comunicarea API criptată prin TLS 1.2+
- **Stocare criptată** - Chei private și tokeni criptați în repaus în Tajo
- **Expirare token** - Tokenii fin-granulați expiră automat; configurați alerte de rotație

## Resurse conexe

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