Trình Kết Nối GitHub
Kết nối GitHub với Brevo qua Tajo để theo dõi hoạt động developers, đồng bộ contributors sang danh sách marketing và kích hoạt giao tiếp dựa trên sự kiện repository.
Tổng Quan
| Thuộc Tính | Giá Trị |
|---|---|
| Nền Tảng | GitHub |
| Danh Mục | Tùy Chỉnh |
| Độ Phức Tạp Thiết Lập | Trung Bình |
| Tích Hợp Chính Thức | Không |
| Dữ Liệu Đồng Bộ | Repositories, Issues, Pull Requests, Contributors |
| Loại API | REST API v3 + GraphQL API v4 |
| Xác Thực | GitHub App hoặc Personal Access Token |
Tính Năng
- Đồng bộ contributors - Ánh xạ GitHub contributors sang liên hệ Brevo
- Theo dõi sự kiện - Forward push, PR, và comment events sang Brevo
- Phân tích issues - Đồng bộ dữ liệu issues để theo dõi tương tác developers
- Số liệu repository - Nhập star counts, forks, và dữ liệu engagement
- Quản lý releases - Kích hoạt thông báo khi releases mới được publish
Yêu Cầu
Trước khi bắt đầu, hãy đảm bảo bạn có:
- Tài khoản GitHub hoặc GitHub Organization
- GitHub App hoặc Personal Access Token (classic hoặc fine-grained)
- Quyền đọc repositories mục tiêu
- Tài khoản Brevo với quyền truy cập API
- Tài khoản Tajo
Xác Thực
GitHub App (Khuyến Nghị)
GitHub Apps cung cấp xác thực tốt hơn với phạm vi repository chi tiết.
# Xác thực với GitHub App installation tokencurl "https://api.github.com/repos/{owner}/{repo}/contributors" \ -H "Authorization: token INSTALLATION_TOKEN" \ -H "Accept: application/vnd.github.v3+json"Personal Access Token
curl "https://api.github.com/user" \ -H "Authorization: Bearer YOUR_PERSONAL_ACCESS_TOKEN" \ -H "Accept: application/vnd.github.v3+json"Bảo Mật Token
Sử dụng fine-grained Personal Access Tokens thay vì classic tokens để kiểm soát phạm vi tốt hơn. Không bao giờ commit tokens vào source code.
Phạm Vi Cần Thiết
repo: read - Đọc repository data (public repos)read:user - Đọc thông tin hồ sơ người dùngread:org - Đọc thành viên tổ chứcCấu Hình
Thiết Lập Cơ Bản
connectors: github: enabled: true access_token: "${GITHUB_ACCESS_TOKEN}"
# Repositories để theo dõi repositories: - owner: "your-org" repo: "main-product" - owner: "your-org" repo: "open-source-lib"
sync: contributors: true issues: false pull_requests: false releases: trueÁnh Xạ Trường
field_mapping: login: GITHUB_USERNAME email: email name: FULLNAME company: COMPANY_NAME location: LOCATION public_repos: GITHUB_REPOS followers: GITHUB_FOLLOWERSAPI Endpoints
| Phương Thức | Endpoint | Mô Tả |
|---|---|---|
GET | /repos/{owner}/{repo}/contributors | Liệt kê contributors |
GET | /users/{username} | Lấy thông tin người dùng |
GET | /repos/{owner}/{repo}/issues | Liệt kê issues |
GET | /repos/{owner}/{repo}/pulls | Liệt kê pull requests |
GET | /repos/{owner}/{repo}/releases | Liệt kê releases |
POST | /repos/{owner}/{repo}/hooks | Tạo webhook |
Ví Dụ Code
Khởi Tạo Trình Kết Nối
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', { accessToken: process.env.GITHUB_ACCESS_TOKEN});Đồng Bộ Contributors Sang Brevo
// Đồng bộ GitHub contributors sang danh sách Brevoawait tajo.connectors.sync('github', { type: 'full', owner: 'your-org', repo: 'main-product', resources: ['contributors'], brevoListId: 40});Conditional Requests
GitHub API hỗ trợ conditional requests với If-Modified-Since hoặc If-None-Match headers. Tajo sử dụng chúng tự động để tránh khai thác rate limit khi không có dữ liệu thay đổi.
Giới Hạn Tốc Độ
| Loại Xác Thực | Giới Hạn |
|---|---|
| Không xác thực | 60 yêu cầu/giờ |
| Personal Access Token | 5.000 yêu cầu/giờ |
| GitHub App | 15.000 yêu cầu/giờ |
| Search API | 30 yêu cầu/phút |
Khắc Phục Sự Cố
| Sự Cố | Nguyên Nhân | Giải Pháp |
|---|---|---|
| 401 Unauthorized | Token không hợp lệ hoặc hết hạn | Tạo lại Personal Access Token |
| 403 Forbidden | Vượt giới hạn tốc độ hoặc thiếu phạm vi | Kiểm tra headers X-RateLimit-Remaining |
| Contributors không đồng bộ | Repository riêng tư | Đảm bảo token có quyền repo |
| Email người dùng thiếu | Email GitHub ẩn | Cần user:email scope để lấy private emails |