---
title: "GitHub-koppling"
description: "Komplett integrationsguide för GitHub för att synkronisera lagerhändelser, issues, pull requests och utvecklaraktivitet med Brevo via Tajo."
url: https://tajo.io/se/docs/connectors/custom/github/
markdown: https://tajo.io/se/docs/connectors/custom/github.md
lang: sv-SE
robots: noindex
---

Ansök om tidig åtkomst

Ange ditt förnamn och din e-postadress på jobbet. Vi skickar en länk för att bekräfta din begäran om åtkomst till Tajo.

# GitHub-koppling

Kopplingens status: Planerad Inte byggd än. Tajo kör inte den här kopplingen i dag.

| Källfält | Målfält | Exempelvärde |
| --- | --- | --- |
| `record.id` | `source_id` | `record_1042` |
| `record.updated_at` | `updated_at` | `2026-10-18T08:00:00Z` |
| `record.value` | `value` | `sample_value` |

Anslut dina GitHub-lager till Brevo för uppföljning av utvecklarengagemang, arbetsflöden för releasemeddelanden och övervakning av communityaktivitet via Tajo.

## Översikt

| Egenskap | Värde |
| --- | --- |
| **Plattform** | GitHub |
| **Kategori** | Anpassad |
| **Installationskomplexitet** | Måttlig |
| **Officiell integration** | Nej |
| **Data som synkas** | Händelser, användare, lager |
| **API-typ** | REST API, GraphQL API |
| **Autentisering** | GitHub App / Personal Access Token / OAuth 2.0 |
| **Bas-URL** | `https://api.github.com` |
| **API-version** | `2022-11-28` (header-baserad versionering) |

## Funktioner

- **Uppföljning av issues och PR:er** - Synka issue- och pull request-händelser till tidslinjer för Brevo-kontakter
- **Releasemeddelanden** - Utlös Brevo-kampanjer vid nya lagerreleaser
- **Bidragsgivarsynk** - Mappa GitHub-bidragsgivare till Brevo-kontakter för community-engagemang
- **Stjärn- och fork-spårning** - Övervaka lagrens popularitetsmått
- **Vidarebefordran av webhook-händelser** - Vidarebefordra GitHub-händelser till Brevo-automationer
- **Lagerkatalog** - Synka lagermetadata som Brevo-katalogposter

## Förutsättningar

Innan du börjar, se till att du har:

1. Ett GitHub-konto med åtkomst till målrepo
2. En GitHub-app eller Personal Access Token (fine-grained rekommenderas)
3. Administratörsåtkomst till lager för webhook-konfiguration
4. Ett Brevo-konto med API-åtkomst
5. Ett Tajo-konto med aktivt abonnemang

## Autentisering

GitHub stöder flera autentiseringsmetoder. Tajo rekommenderar att använda GitHub Apps för åtkomst på organisationsnivå.

### Alternativ 1: GitHub App (rekommenderas)

1. Navigera till **Settings** > **Developer settings** > **GitHub Apps**
2. Klicka på **New GitHub App**
3. Konfigurera appen med dessa behörigheter:

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

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

1. Gå till **Settings** > **Developer settings** > **Personal access tokens** > **Fine-grained tokens**
2. Klicka på **Generate new token**
3. Välj mål-lager
4. Bevilja dessa behörigheter:

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

Tokensäkerhet

Fine-grained tokens har utgångsdatum. Sätt upp tokenrotation före utgång. GitHub App-installationstokens uppdateras automatiskt och föredras för produktionsbruk.

### Ansluta till 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
```

## Konfiguration

### Grundinställning

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

### Fältmappning

Mappa GitHub-användardata till Brevo-kontaktattribut:

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

## API-endpoints

Tajo integrerar med följande endpoints i GitHubs REST API:

| Endpoint | Metod | Syfte |
| --- | --- | --- |
| `/repos/{owner}/{repo}/issues` | GET | Lista lagrets issues |
| `/repos/{owner}/{repo}/pulls` | GET | Lista pull requests |
| `/repos/{owner}/{repo}/releases` | GET | Lista releaser |
| `/repos/{owner}/{repo}/contributors` | GET | Lista bidragsgivare |
| `/repos/{owner}/{repo}/stargazers` | GET | Lista stargazers |
| `/repos/{owner}/{repo}/forks` | GET | Lista forks |
| `/repos/{owner}/{repo}/events` | GET | Lista lagerhändelser |
| `/users/{username}` | GET | Hämta användarprofil |
| `/orgs/{org}/members` | GET | Lista organisationsmedlemmar |
| `/repos/{owner}/{repo}/hooks` | POST | Skapa webhook |

## Kodexempel

### Initiera kopplingen

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

### Synka bidragsgivare till 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
// }
```

### Hantera webhook-händelser

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

### Utlös releasekampanj

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

## Hastighetsbegränsningar

GitHub tillämpar hastighetsbegränsningar baserat på autentiseringsmetod:

| Autentisering | Primär hastighetsbegränsning | Search API |
| --- | --- | --- |
| **Oautentiserad** | 60 förfrågningar/timme | 10 förfrågningar/minut |
| **Personal Access Token** | 5 000 förfrågningar/timme | 30 förfrågningar/minut |
| **GitHub App (installation)** | 5 000 förfrågningar/timme | 30 förfrågningar/minut |
| **GitHub App (user-to-server)** | 5 000 förfrågningar/timme | 30 förfrågningar/minut |

Villkorliga förfrågningar

Tajo använder villkorliga förfrågningar (`If-None-Match` / `If-Modified-Since`-headers) för att minska API-konsumtionen. Svar med `304 Not Modified` räknas inte mot hastighetsbegränsningen.

Ytterligare gränser:

- **Sekundära hastighetsbegränsningar**: Inte mer än 100 samtidiga förfrågningar. Inte mer än 900 poäng per minut för REST API-endpoints.
- **GraphQL**: 5 000 poäng per timme (frågekostnad varierar beroende på komplexitet).

## Felsökning

### Vanliga problem

| Problem | Orsak | Lösning |
| --- | --- | --- |
| 401 Unauthorized | Utgången token eller fel uppgifter | Återgenerera token eller installera om GitHub-appen |
| 403 Forbidden | Otillräckliga behörigheter | Kontrollera tokens scopes eller appens behörigheter |
| 404 Not Found | Privat repo utan åtkomst | Bevilja lageråtkomst till token eller app |
| Hastighetsbegränsning överskriden | För många API-anrop | Aktivera villkorliga förfrågningar och minska synkfrekvensen |
| Webhooks tas inte emot | Fel URL eller brandvägg | Verifiera att webhook-URL:en är offentligt tillgänglig |

### Felsökningsläge

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

### Testa anslutning

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

## Bästa praxis

1. **Använd GitHub Apps framför PAT:er** - GitHub Apps ger granulära behörigheter och automatiskt uppdaterande tokens
2. **Aktivera webhook-hemligheter** - Verifiera alltid webhook-signaturer med HMAC-SHA256
3. **Använd villkorliga förfrågningar** - Utnyttja ETags för att undvika att slösa hastighetsbegränsningskvot
4. **Paginera stora svar** - GitHub returnerar max 100 objekt per sida; iterera med `Link`-headers
5. **Synka under låg aktivitet** - Schemalägg fullständiga synkar utanför högaktiva utvecklingstimmar
6. **Övervaka rate limit-headers** - Kontrollera `X-RateLimit-Remaining` för att proaktivt strypa

## Säkerhet

- **GitHub App-autentisering** - RSA-nyckelbaserad JWT med kortlivade installationstokens
- **Webhook-signaturer** - HMAC-SHA256-signaturverifiering på alla webhook-nyttolaster
- **Fine-Grained Tokens** - Scopade till specifika lager och behörigheter
- **Endast HTTPS** - All API-kommunikation krypterad via TLS 1.2+
- **Krypterad lagring** - Privata nycklar och tokens krypterade i vila i Tajo
- **Token-utgång** - Fine-grained tokens går automatiskt ut; sätt upp rotationsvarningar

## Relaterade resurser

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