Konektor GitHub

Połącz swoje repozytoria GitHub z Brevo, aby śledzić zaangażowanie deweloperów, zarządzać przepływami powiadomień o wydaniach i monitorować aktywność społeczności przez Tajo.

Przegląd

WłaściwośćWartość
PlatformaGitHub
KategoriaNiestandardowa
Poziom konfiguracjiŚredni
Integracja oficjalnaNie
Synchronizowane daneZdarzenia, Użytkownicy, Repozytoria
Typ APIREST API, GraphQL API
UwierzytelnianieGitHub App / Personal Access Token / OAuth 2.0
Bazowy URLhttps://api.github.com
Wersja API2022-11-28 (wersjonowanie przez nagłówek)

Funkcje

  • Śledzenie zgłoszeń i PR - Synchronizuj zdarzenia zgłoszeń i pull requestów z osiami czasu kontaktów Brevo
  • Powiadomienia o wydaniach - Wyzwalaj kampanie Brevo przy nowych wydaniach repozytorium
  • Synchronizacja współtwórców - Mapuj współtwórców GitHub na kontakty Brevo dla angażowania społeczności
  • Śledzenie gwiazdek i forków - Monitoruj metryki popularności repozytorium
  • Przekazywanie zdarzeń webhook - Przekazuj zdarzenia GitHub do automatyzacji Brevo
  • Katalog repozytoriów - Synchronizuj metadane repozytorium jako elementy katalogu Brevo

Wymagania wstępne

Zanim zaczniesz, upewnij się, że masz:

  1. Konto GitHub z dostępem do docelowych repozytoriów
  2. GitHub App lub Personal Access Token (zalecany precyzyjny)
  3. Dostęp administratora do repozytoriów dla konfiguracji webhooków
  4. Konto Brevo z dostępem do API
  5. Konto Tajo z aktywną subskrypcją

Uwierzytelnianie

GitHub obsługuje wiele metod uwierzytelniania. Tajo zaleca używanie GitHub Apps dla dostępu na poziomie organizacji.

Opcja 1: GitHub App (zalecane)

  1. Przejdź do Settings > Developer settings > GitHub Apps
  2. Kliknij New GitHub App
  3. Skonfiguruj aplikację z tymi uprawnieniami:
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

Opcja 2: Fine-Grained Personal Access Token

  1. Przejdź do Settings > Developer settings > Personal access tokens > Fine-grained tokens
  2. Kliknij Generate new token
  3. Wybierz docelowe repozytoria
  4. Przyznaj te uprawnienia:
Repository access: Selected repositories
Permissions:
Issues: Read-only
Pull requests: Read-only
Contents: Read-only
Metadata: Read-only

Bezpieczeństwo tokenów

Precyzyjne tokeny mają daty wygaśnięcia. Skonfiguruj rotację tokenów przed wygaśnięciem. Tokeny instalacji GitHub App odświeżają się automatycznie i są preferowane do użytku produkcyjnego.

Połączenie z Tajo

Terminal window
# 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

Konfiguracja

Podstawowa konfiguracja

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

Mapowanie pól

Mapuj dane użytkowników GitHub na atrybuty kontaktów Brevo:

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

Endpointy API

Tajo integruje się z następującymi endpointami GitHub REST API:

EndpointMetodaCel
/repos/{owner}/{repo}/issuesGETLista zgłoszeń repozytorium
/repos/{owner}/{repo}/pullsGETLista pull requestów
/repos/{owner}/{repo}/releasesGETLista wydań
/repos/{owner}/{repo}/contributorsGETLista współtwórców
/repos/{owner}/{repo}/stargazersGETLista obserwujących
/repos/{owner}/{repo}/forksGETLista forków
/repos/{owner}/{repo}/eventsGETLista zdarzeń repozytorium
/users/{username}GETPobierz profil użytkownika
/orgs/{org}/membersGETLista członków organizacji
/repos/{owner}/{repo}/hooksPOSTUtwórz webhook

Przykłady kodu

Inicjalizacja konektora

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

Synchronizuj współtwórców z Brevo

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

Obsługa zdarzeń webhook

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

Wyzwalanie kampanii o wydaniu

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

Limity API

GitHub stosuje limity szybkości na podstawie metody uwierzytelniania:

UwierzytelnianiePodstawowy limitSearch API
Bez uwierzytelniania60 żądań/godzinę10 żądań/minutę
Personal Access Token5 000 żądań/godzinę30 żądań/minutę
GitHub App (instalacja)5 000 żądań/godzinę30 żądań/minutę
GitHub App (user-to-server)5 000 żądań/godzinę30 żądań/minutę

Żądania warunkowe

Tajo używa żądań warunkowych (nagłówki If-None-Match / If-Modified-Since), aby zmniejszyć zużycie API. Odpowiedzi z 304 Not Modified nie liczą się do limitów szybkości.

Dodatkowe limity:

  • Drugorzędne limity szybkości: Nie więcej niż 100 równoczesnych żądań. Nie więcej niż 900 punktów na minutę dla endpointów REST API.
  • GraphQL: 5 000 punktów na godzinę (koszt zapytania zależy od złożoności).

Rozwiązywanie problemów

Typowe problemy

ProblemPrzyczynaRozwiązanie
401 UnauthorizedWygasły token lub błędne daneWygeneruj ponownie token lub zainstaluj ponownie GitHub App
403 ForbiddenNiewystarczające uprawnieniaSprawdź zakresy tokenu lub uprawnienia App
404 Not FoundPrywatne repozytorium bez dostępuPrzyznaj dostęp do repozytorium dla tokenu lub App
Przekroczono limitZa dużo wywołań APIWłącz żądania warunkowe i zmniejsz częstotliwość synchronizacji
Webhooki nie odbieraneNieprawidłowy URL lub zaporaZweryfikuj, że URL webhooka jest publicznie dostępny

Tryb debug

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

Test połączenia

Terminal window
tajo connectors test github
# ✓ API authentication successful
# ✓ Repository access verified
# ✓ Issue data readable
# ✓ Webhook delivery active
# ✓ Rate limit healthy (4,850/5,000 remaining)

Najlepsze praktyki

  1. Używaj GitHub Apps zamiast PAT - GitHub Apps zapewniają granularne uprawnienia i automatycznie odświeżające się tokeny
  2. Włącz sekrety webhook - Zawsze weryfikuj podpisy webhooków za pomocą HMAC-SHA256
  3. Używaj żądań warunkowych - Korzystaj z ETagów, aby unikać marnowania limitu szybkości
  4. Stronicuj duże odpowiedzi - GitHub zwraca maks. 100 elementów na stronę; iteruj z nagłówkami Link
  5. Synchronizuj w okresach niskiej aktywności - Planuj pełne synchronizacje poza godzinami szczytu deweloperów
  6. Monitoruj nagłówki limitów - Sprawdzaj X-RateLimit-Remaining, aby proaktywnie ograniczać przepustowość

Bezpieczeństwo

  • Uwierzytelnianie GitHub App - JWT oparty na kluczu RSA z krótkotrwałymi tokenami instalacji
  • Podpisy webhook - Weryfikacja podpisu HMAC-SHA256 dla wszystkich ładunków webhook
  • Precyzyjne tokeny - Ograniczone do określonych repozytoriów i uprawnień
  • Tylko HTTPS - Cała komunikacja API zaszyfrowana przez TLS 1.2+
  • Szyfrowane przechowywanie - Klucze prywatne i tokeny szyfrowane w spoczynku w Tajo
  • Wygasanie tokenów - Precyzyjne tokeny automatycznie wygasają; skonfiguruj alerty rotacji

Powiązane zasoby

Subscribe to updates

developer-docs

Drop your email or phone number — we'll send you what matters next.

auto-detect
Asystent AI

Cześć! Zapytaj mnie o dokumentację.