موصل GitHub
حالة الموصل: مخطط له لم يُبنَ بعد. لا يشغّل Tajo هذا الموصل اليوم.
رسم توضيحي · بيانات تجريبية
مثال على المزامنة
المصدر
GitHub
حالة الموصل: مخطط له
الوجهة
أداتك الأخرى
حالة الموصل: أداة مخصصة
ربط الحقول
| حقل المصدر | حقل الوجهة | قيمة نموذجية |
|---|---|---|
record.id | source_id | record_1042 |
record.updated_at | updated_at | 2026-10-18T08:00:00Z |
record.value | value | sample_value |
- الصياغة
- راجع سجلاً واحداً
- اعتمد هذه النسخة
تصف الحالات كل موصل على حدة، ولا تضمن جاهزية هذه المزامنة. حقول توضيحية. راجع المخطط الفعلي والأذونات قبل تشغيل المزامنة.
اربط مستودعات GitHub الخاصة بك بـ Brevo لتتبع تفاعل المطورين، وسير عمل إشعارات الإصدارات، ومراقبة نشاط المجتمع عبر Tajo.
نظرة عامة
| الخاصية | القيمة |
|---|---|
| المنصة | GitHub |
| الفئة | مخصص |
| تعقيد الإعداد | متوسط |
| تكامل رسمي | لا |
| البيانات المتزامنة | الأحداث، المستخدمون، المستودعات |
| نوع API | REST API، GraphQL API |
| المصادقة | GitHub App / Personal Access Token / OAuth 2.0 |
| عنوان URL الأساسي | https://api.github.com |
| إصدار API | 2022-11-28 (إصدار قائم على الترويسة) |
الميزات
- تتبع المشاكل وطلبات السحب - مزامنة أحداث المشاكل وطلبات السحب إلى جداول زمنية لجهات اتصال Brevo
- إشعارات الإصدارات - تشغيل حملات Brevo عند إصدارات المستودعات الجديدة
- مزامنة المساهمين - ربط مساهمي GitHub بجهات اتصال Brevo لتفاعل المجتمع
- تتبع النجوم والنسخ - مراقبة مقاييس شعبية المستودعات
- إعادة توجيه أحداث Webhook - إعادة توجيه أحداث GitHub إلى أتمتات Brevo
- كتالوج المستودعات - مزامنة بيانات المستودعات الوصفية كعناصر كتالوج Brevo
المتطلبات المسبقة
قبل أن تبدأ، تأكد من توفر ما يلي:
- حساب GitHub مع الوصول إلى المستودعات المستهدفة
- تطبيق GitHub App أو Personal Access Token (يُفضَّل النوع الدقيق)
- وصول المسؤول إلى المستودعات لتكوين webhook
- حساب Brevo مع وصول API
- حساب Tajo مع اشتراك نشط
المصادقة
يدعم GitHub عدة طرق للمصادقة. يوصي Tajo باستخدام GitHub Apps للوصول على مستوى المنظمة.
الخيار 1: GitHub App (موصى به)
- انتقل إلى Settings > Developer settings > GitHub Apps
- انقر على New GitHub App
- اضبط التطبيق بهذه الأذونات:
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الخيار 2: Fine-Grained Personal Access Token
- اذهب إلى Settings > Developer settings > Personal access tokens > Fine-grained tokens
- انقر على Generate new token
- حدد المستودعات المستهدفة
- امنح هذه الأذونات:
Repository access: Selected repositoriesPermissions: Issues: Read-only Pull requests: Read-only Contents: Read-only Metadata: Read-onlyأمان الرمز
الرموز الدقيقة لها تواريخ انتهاء صلاحية. اضبط دوران الرموز قبل انتهاء الصلاحية. رموز تثبيت GitHub App تتجدد تلقائيًا ويُفضَّل استخدامها في الإنتاج.
الاتصال بـ 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_TOKENالإعداد
الإعداد الأساسي
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ربط الحقول
اربط بيانات مستخدمي GitHub بسمات جهات اتصال 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نقاط نهاية API
يتكامل Tajo مع نقاط نهاية GitHub REST API التالية:
| نقطة النهاية | الطريقة | الغرض |
|---|---|---|
/repos/{owner}/{repo}/issues | GET | عرض مشاكل المستودع |
/repos/{owner}/{repo}/pulls | GET | عرض طلبات السحب |
/repos/{owner}/{repo}/releases | GET | عرض الإصدارات |
/repos/{owner}/{repo}/contributors | GET | عرض المساهمين |
/repos/{owner}/{repo}/stargazers | GET | عرض المعجبين بالنجوم |
/repos/{owner}/{repo}/forks | GET | عرض النسخ |
/repos/{owner}/{repo}/events | GET | عرض أحداث المستودع |
/users/{username} | GET | جلب ملف المستخدم |
/orgs/{org}/members | GET | عرض أعضاء المنظمة |
/repos/{owner}/{repo}/hooks | POST | إنشاء webhook |
أمثلة البرمجة
تهيئة الموصل
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});مزامنة المساهمين إلى 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// }معالجة أحداث 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');});تشغيل حملة إصدار
// 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 } });});حدود المعدل
يفرض GitHub حدود معدل بناءً على طريقة المصادقة:
| المصادقة | حد المعدل الأساسي | Search API |
|---|---|---|
| غير مصادَق عليه | 60 طلبًا/ساعة | 10 طلبات/دقيقة |
| Personal Access Token | 5,000 طلب/ساعة | 30 طلبًا/دقيقة |
| GitHub App (تثبيت) | 5,000 طلب/ساعة | 30 طلبًا/دقيقة |
| GitHub App (من المستخدم للخادم) | 5,000 طلب/ساعة | 30 طلبًا/دقيقة |
الطلبات الشرطية
يستخدم Tajo الطلبات الشرطية (ترويسات If-None-Match / If-Modified-Since) لتقليل استهلاك API. لا تُحتسب الردود 304 Not Modified ضمن حدود المعدل.
حدود إضافية:
- حدود المعدل الثانوية: لا تزيد عن 100 طلب متزامن. لا تزيد عن 900 نقطة في الدقيقة لنقاط نهاية REST API.
- GraphQL: 5,000 نقطة/ساعة (تكلفة الاستعلام تختلف حسب التعقيد).
استكشاف الأخطاء
المشكلات الشائعة
| المشكلة | السبب | الحل |
|---|---|---|
| 401 Unauthorized | رمز منتهي الصلاحية أو بيانات اعتماد خاطئة | أعد توليد الرمز أو أعد تثبيت GitHub App |
| 403 Forbidden | أذونات غير كافية | تحقق من نطاقات الرمز أو أذونات التطبيق |
| 404 Not Found | مستودع خاص دون وصول | امنح وصول المستودع للرمز أو التطبيق |
| تجاوز حد المعدل | عدد كبير جدًا من استدعاءات API | فعّل الطلبات الشرطية وقلل تكرار المزامنة |
| Webhooks لا تصل | URL غير صحيح أو جدار حماية | تحقق من أن عنوان webhook يمكن الوصول إليه من الإنترنت |
وضع التصحيح
connectors: github: debug: true log_level: verbose log_webhooks: trueاختبار الاتصال
tajo connectors test github# ✓ API authentication successful# ✓ Repository access verified# ✓ Issue data readable# ✓ Webhook delivery active# ✓ Rate limit healthy (4,850/5,000 remaining)أفضل الممارسات
- استخدم GitHub Apps بدلاً من PATs - توفر GitHub Apps أذونات دقيقة ورموزًا تتجدد تلقائيًا
- فعّل أسرار webhook - تحقق دائمًا من توقيعات webhook باستخدام HMAC-SHA256
- استخدم الطلبات الشرطية - استفد من ETags لتجنب إهدار حصة حد المعدل
- قسّم الاستجابات الكبيرة - يُرجع GitHub كحد أقصى 100 عنصر لكل صفحة؛ كرر باستخدام ترويسات
Link - زامن في أوقات النشاط المنخفض - جدول عمليات المزامنة الكاملة خارج ساعات التطوير الذروة
- راقب ترويسات حد المعدل - تحقق من
X-RateLimit-Remainingللتحكم في الطلبات بشكل استباقي
الأمان
- مصادقة GitHub App - JWT قائم على مفتاح RSA مع رموز تثبيت قصيرة الأجل
- توقيعات Webhook - التحقق من توقيع HMAC-SHA256 على جميع حمولات webhook
- الرموز الدقيقة - محددة النطاق لمستودعات وأذونات محددة
- HTTPS فقط - جميع اتصالات API مشفرة عبر TLS 1.2+
- التخزين المشفر - المفاتيح الخاصة والرموز مشفرة في حالة السكون في Tajo
- انتهاء صلاحية الرمز - الرموز الدقيقة تنتهي صلاحيتها تلقائيًا؛ اضبط تنبيهات الدوران