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ść |
|---|---|
| Platforma | GitHub |
| Kategoria | Niestandardowa |
| Poziom konfiguracji | Średni |
| Integracja oficjalna | Nie |
| Synchronizowane dane | Zdarzenia, Użytkownicy, Repozytoria |
| Typ API | REST API, GraphQL API |
| Uwierzytelnianie | GitHub App / Personal Access Token / OAuth 2.0 |
| Bazowy URL | https://api.github.com |
| Wersja API | 2022-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:
- Konto GitHub z dostępem do docelowych repozytoriów
- GitHub App lub Personal Access Token (zalecany precyzyjny)
- Dostęp administratora do repozytoriów dla konfiguracji webhooków
- Konto Brevo z dostępem do API
- 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)
- Przejdź do Settings > Developer settings > GitHub Apps
- Kliknij New GitHub App
- 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 ForkOpcja 2: Fine-Grained Personal Access Token
- Przejdź do Settings > Developer settings > Personal access tokens > Fine-grained tokens
- Kliknij Generate new token
- Wybierz docelowe repozytoria
- Przyznaj te uprawnienia:
Repository access: Selected repositoriesPermissions: Issues: Read-only Pull requests: Read-only Contents: Read-only Metadata: Read-onlyBezpieczeń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
# Using GitHub Apptajo connectors install github \ --app-id $GITHUB_APP_ID \ --private-key-path ./github-app-key.pem \ --installation-id $GITHUB_INSTALLATION_ID
# Using Personal Access Tokentajo connectors install github \ --token $GITHUB_TOKENKonfiguracja
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: 21Mapowanie 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_BIOEndpointy API
Tajo integruje się z następującymi endpointami GitHub REST API:
| Endpoint | Metoda | Cel |
|---|---|---|
/repos/{owner}/{repo}/issues | GET | Lista zgłoszeń repozytorium |
/repos/{owner}/{repo}/pulls | GET | Lista pull requestów |
/repos/{owner}/{repo}/releases | GET | Lista wydań |
/repos/{owner}/{repo}/contributors | GET | Lista współtwórców |
/repos/{owner}/{repo}/stargazers | GET | Lista obserwujących |
/repos/{owner}/{repo}/forks | GET | Lista forków |
/repos/{owner}/{repo}/events | GET | Lista zdarzeń repozytorium |
/users/{username} | GET | Pobierz profil użytkownika |
/orgs/{org}/members | GET | Lista członków organizacji |
/repos/{owner}/{repo}/hooks | POST | Utwó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 campaigntajo.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:
| Uwierzytelnianie | Podstawowy limit | Search API |
|---|---|---|
| Bez uwierzytelniania | 60 żądań/godzinę | 10 żądań/minutę |
| Personal Access Token | 5 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
| Problem | Przyczyna | Rozwiązanie |
|---|---|---|
| 401 Unauthorized | Wygasły token lub błędne dane | Wygeneruj ponownie token lub zainstaluj ponownie GitHub App |
| 403 Forbidden | Niewystarczające uprawnienia | Sprawdź zakresy tokenu lub uprawnienia App |
| 404 Not Found | Prywatne repozytorium bez dostępu | Przyznaj dostęp do repozytorium dla tokenu lub App |
| Przekroczono limit | Za dużo wywołań API | Włącz żądania warunkowe i zmniejsz częstotliwość synchronizacji |
| Webhooki nie odbierane | Nieprawidłowy URL lub zapora | Zweryfikuj, że URL webhooka jest publicznie dostępny |
Tryb debug
connectors: github: debug: true log_level: verbose log_webhooks: trueTest połączenia
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
- Używaj GitHub Apps zamiast PAT - GitHub Apps zapewniają granularne uprawnienia i automatycznie odświeżające się tokeny
- Włącz sekrety webhook - Zawsze weryfikuj podpisy webhooków za pomocą HMAC-SHA256
- Używaj żądań warunkowych - Korzystaj z ETagów, aby unikać marnowania limitu szybkości
- Stronicuj duże odpowiedzi - GitHub zwraca maks. 100 elementów na stronę; iteruj z nagłówkami
Link - Synchronizuj w okresach niskiej aktywności - Planuj pełne synchronizacje poza godzinami szczytu deweloperów
- 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