موصل SendGrid
اربط حساب SendGrid الخاص بك مع Brevo عبر Tajo لترحيل البنية التحتية للبريد الإلكتروني، ومزامنة جهات الاتصال، ونقل بيانات الحملات، وتحليلات تفاعل موحدة عبر المنصتين.
نظرة عامة
| الخاصية | القيمة |
|---|---|
| المنصة | SendGrid (Twilio) |
| الفئة | التسويق |
| تعقيد الإعداد | سهل |
| تكامل رسمي | نعم |
| البيانات المُزامَنة | جهات اتصال، حملات، بريد معاملاتي، أحداث |
| عنوان URL الأساسي لـ API | https://api.sendgrid.com/v3 |
الميزات
- ترحيل جهات الاتصال - ترحيل جهات اتصال SendGrid Marketing إلى Brevo مع الحقول المخصصة
- مزامنة البريد المعاملاتي - تتبع أحداث البريد المعاملاتي للتقارير الموحدة
- بيانات الحملات - مزامنة بيانات أداء حملات Single Send وAutomation
- webhooks الأحداث - إعادة توجيه أحداث البريد الإلكتروني (مُسلَّم، مفتوح، منقور، مرتد) إلى Brevo
- مزامنة القمع - ترحيل قوائم الارتداد والحظر وإلغاء الاشتراك للامتثال
- ترحيل القوالب - تصدير Dynamic Transactional Templates لاستخدام Brevo
- التحقق من المرسل - مزامنة هويات المرسل المُوثَّقة ومصادقة النطاق
- مزامنة الإحصائيات - استيراد إحصائيات التفاعل التاريخية إلى سمات Brevo
المتطلبات الأساسية
قبل البدء، تأكد من توفر ما يلي:
- حساب SendGrid (Free أو Essentials أو Pro أو Premier)
- مفتاح SendGrid API مع الصلاحيات المطلوبة
- حساب Brevo مع وصول إلى API
- حساب Tajo
المصادقة
مصادقة مفتاح API
يستخدم SendGrid مصادقة bearer token.
curl https://api.sendgrid.com/v3/marketing/contacts \ -H "Authorization: Bearer SG.YOUR_API_KEY" \ -H "Content-Type: application/json"أنشئ مفاتيح API في SendGrid Settings > API Keys بمستويات صلاحية محددة:
- Full Access - وصول API كامل
- Restricted Access - تحكم دقيق في الصلاحيات
- Billing Access - عمليات الفوترة فقط
الصلاحيات المطلوبة
Marketing: Full Access - Contacts (read) - Single Sends (read) - Automations (read)Mail Send: Full Access - Mail Send (read)Stats: Read AccessSuppressions: Read AccessTracking: Read Accessأمان مفتاح API
تُعرض مفاتيح SendGrid API مرة واحدة فقط عند الإنشاء. خزّنها بأمان. في حالة الفقد، يجب عليك إنشاء مفتاح جديد.
الإعداد
الإعداد الأساسي
connectors: sendgrid: enabled: true api_key: "${SENDGRID_API_KEY}"
# Data sync options sync: contacts: true campaigns: true transactional: true suppressions: true statistics: true
# List mapping to Brevo list_mapping: "All Contacts": 60 "Newsletter": 61 "Transactional": 62تعيين الحقول
ربط حقول جهات اتصال SendGrid بسمات جهات اتصال Brevo:
التعيينات الافتراضية
| Parameter | Type | Description |
|---|---|---|
email required | string | عنوان البريد الإلكتروني لجهة الاتصال (معرّف فريد) |
first_name optional | string | يُعيَّن إلى سمة FIRSTNAME |
last_name optional | string | يُعيَّن إلى سمة LASTNAME |
phone_number optional | string | يُعيَّن إلى سمة SMS |
city optional | string | مدينة جهة الاتصال |
country optional | string | دولة جهة الاتصال |
custom_fields optional | object | أزواج مفتاح-قيمة للحقول المخصصة |
list_ids optional | array | عضويات قوائم SendGrid |
تعيين الحقول المخصصة
field_mapping: # Standard fields email: email first_name: FIRSTNAME last_name: LASTNAME phone_number: SMS
# Location fields city: CITY state_province_region: STATE country: COUNTRY postal_code: POSTAL_CODE
# Engagement metrics avg_open_rate: AVG_OPEN_RATE avg_click_rate: AVG_CLICK_RATE
# Custom fields custom_fields.company: COMPANY_NAME custom_fields.plan: PLAN_TYPEنقاط نهاية واجهة البرمجة
جهات الاتصال التسويقية
| الطريقة | نقطة النهاية | الوصف |
|---|---|---|
PUT | /v3/marketing/contacts | إضافة أو تحديث جهات الاتصال |
POST | /v3/marketing/contacts/search | البحث في جهات الاتصال |
GET | /v3/marketing/contacts/count | الحصول على عدد جهات الاتصال |
POST | /v3/marketing/contacts/exports | تصدير جهات الاتصال |
DELETE | /v3/marketing/contacts | حذف جهات الاتصال |
GET | /v3/marketing/lists | سرد جميع قوائم جهات الاتصال |
البريد المعاملاتي (Mail Send)
| الطريقة | نقطة النهاية | الوصف |
|---|---|---|
POST | /v3/mail/send | إرسال بريد إلكتروني |
GET | /v3/templates | سرد Dynamic Templates |
GET | /v3/templates/{id} | الحصول على تفاصيل القالب |
الحملات (Single Sends)
| الطريقة | نقطة النهاية | الوصف |
|---|---|---|
GET | /v3/marketing/singlesends | سرد Single Sends |
GET | /v3/marketing/singlesends/{id} | الحصول على تفاصيل Single Send |
GET | /v3/marketing/automations | سرد Automations |
الإحصائيات
| الطريقة | نقطة النهاية | الوصف |
|---|---|---|
GET | /v3/stats | الحصول على إحصائيات البريد الإلكتروني العامة |
GET | /v3/categories/stats | الحصول على إحصائيات الفئات |
GET | /v3/marketing/stats/singlesends | الحصول على إحصائيات Single Send |
القمع
| الطريقة | نقطة النهاية | الوصف |
|---|---|---|
GET | /v3/suppression/bounces | سرد الرسائل المرتدة |
GET | /v3/suppression/blocks | سرد الرسائل المحظورة |
GET | /v3/suppression/spam_reports | سرد تقارير البريد العشوائي |
GET | /v3/suppression/unsubscribes | سرد إلغاءات الاشتراك العامة |
الأحداث
أحداث البريد الإلكتروني (عبر Event Webhook)
| الحدث | المحفز | حالة الاستخدام |
|---|---|---|
processed | قبل SendGrid البريد الإلكتروني | تأكيد الإرسال |
delivered | سُلِّم البريد الإلكتروني للمستلم | تتبع التسليم |
open | تم فتح البريد الإلكتروني | تسجيل التفاعل |
click | تم النقر على رابط | تتبع الاهتمام |
bounce | ارتد البريد الإلكتروني | نظافة القائمة |
dropped | تم قمع البريد الإلكتروني | مراجعة الامتثال |
deferred | تأجيل التسليم | مراقبة إعادة المحاولة |
spam_report | تم وضع علامة بريد عشوائي | إدارة السمعة |
unsubscribe | ألغى الاشتراك عبر الرابط | مزامنة التفضيلات |
أمثلة على الكود
تهيئة الموصل
import { TajoClient } from '@tajo/sdk';
const tajo = new TajoClient({ apiKey: process.env.TAJO_API_KEY, brevoApiKey: process.env.BREVO_API_KEY});
// Connect SendGridawait tajo.connectors.connect('sendgrid', { apiKey: process.env.SENDGRID_API_KEY});ترحيل جهات الاتصال إلى Brevo
// ترحيل كامل لجهات الاتصال من SendGrid إلى Brevoawait tajo.connectors.sync('sendgrid', { type: 'full', resources: ['contacts', 'suppressions'], options: { includeCustomFields: true, migrateListMemberships: true, migrateSuppressions: true }});
// التحقق من حالة الترحيلconst status = await tajo.connectors.status('sendgrid');console.log(status);// {// connected: true,// lastSync: '2024-01-15T10:30:00Z',// contactsMigrated: 45000,// suppressionsSynced: 3200,// listsMapped: 8// }إعادة توجيه أحداث البريد الإلكتروني
// التعامل مع SendGrid Event Webhookapp.post('/webhooks/sendgrid', async (req, res) => { const signature = req.get('X-Twilio-Email-Event-Webhook-Signature');
// التحقق من توقيع webhook (ECDSA) if (!verifySendGridSignature(req.body, signature)) { return res.status(401).send('Unauthorized'); }
// معالجة دفعة من الأحداث for (const event of req.body) { await tajo.connectors.handleWebhook('sendgrid', { type: event.event, email: event.email, timestamp: event.timestamp, payload: event }); }
res.status(200).send('OK');});حدود المعدل
حدود معدل SendGrid API:
| نقطة النهاية | الحد | التفاصيل |
|---|---|---|
Mail Send (/v3/mail/send) | يعتمد على الخطة | Free: 100/يوم، Essentials: بناءً على الخطة |
| Marketing Contacts PUT | 3 طلبات/ثانية | دفعة تصل إلى 30,000 جهة اتصال |
| Marketing Contacts Search | 50 طلب/ثانية | لكل مفتاح API |
| API العام | 1,000 طلب/ثانية | لكل مفتاح API |
| Event Webhook | تسليم مجمّع | حتى 1,000 حدث لكل POST |
حدود Mail Send
تعتمد حدود Mail Send على خطة SendGrid الخاصة بك. تقتصر الحسابات المجانية على 100 بريد إلكتروني/يوم. تحقق من تفاصيل خطتك لحدود الإرسال الدقيقة.
استكشاف الأخطاء وإصلاحها
المشاكل الشائعة
| المشكلة | السبب | الحل |
|---|---|---|
| 401 Unauthorized | مفتاح API غير صالح | تحقق من مفتاح API في SendGrid Settings |
| 403 Forbidden | صلاحيات مفتاح API غير كافية | أنشئ مفتاحًا جديدًا بالنطاقات المطلوبة |
| تصدير جهات الاتصال معلّق | معالجة مجموعة بيانات كبيرة | استطلع نقطة نهاية حالة التصدير حتى الاكتمال |
| مزامنة القمع غير مكتملة | التقسيم مطلوب | طبّق التقسيم بمعامل offset |
| Event webhook لم يُستلم | عنوان URL غير مُوثَّق | أكمل التحقق من عنوان URL لـ webhook في SendGrid |
وضع التصحيح
تفعيل التسجيل المفصل:
connectors: sendgrid: debug: true log_level: verbose log_webhooks: trueاختبار الاتصال
tajo connectors test sendgrid# ✓ API connection successful# ✓ Contacts readable# ✓ Lists accessible# ✓ Statistics readable# ✓ Suppressions accessibleأفضل الممارسات
- رحّل القمع أولاً - تأكد من وجود الارتدادات والحظر وإلغاءات الاشتراك في Brevo قبل الإرسال
- استخدم تحميلات جهات الاتصال المجمّعة - PUT حتى 30,000 جهة اتصال لكل طلب للكفاءة
- تحقق من Event Webhook - فعّل webhooks الموقّعة مع التحقق من ECDSA
- عيّن الحقول المخصصة - أنشئ سمات Brevo المقابلة قبل ترحيل جهات الاتصال
- زامن بيانات التفاعل - استورد الإحصائيات التاريخية للتقسيم في Brevo
- تعامل مع التصديرات غير المتزامنة - تصديرات جهات الاتصال غير متزامنة؛ استطلع للاكتمال
الأمان
- مصادقة مفتاح API - Bearer token بمستويات صلاحية دقيقة
- توقيع Event Webhook - التحقق من توقيع ECDSA لحمولات webhook
- تشفير TLS - جميع اتصالات API مشفرة عبر HTTPS
- إدارة وصول IP - قيّد وصول لوحة التحكم وAPI حسب IP
- المصادقة الثنائية - 2FA متاحة للوصول إلى الحساب