---
title: "موصل Supabase"
description: "دليل تكامل Supabase الشامل لمزامنة سجلات قاعدة البيانات، ومصادقة المستخدمين، وتخزين الملفات، والأحداث الآنية مع منصة التفاعل الخاصة بك."
url: https://tajo.io/ar/docs/connectors/custom/supabase/
markdown: https://tajo.io/ar/docs/connectors/custom/supabase.md
lang: ar-SA
robots: noindex
---

اطلب الوصول المبكر

أدخل اسمك الأول وعنوان بريدك الإلكتروني للعمل. سنرسل إليك رابطًا لتأكيد طلب الوصول إلى Tajo.

# موصل Supabase

حالة الموصل: مخطط له لم يُبنَ بعد. لا يشغّل Tajo هذا الموصل اليوم.

| حقل المصدر | حقل الوجهة | قيمة نموذجية |
| --- | --- | --- |
| `record.id` | `source_id` | `record_1042` |
| `record.updated_at` | `updated_at` | `2026-10-18T08:00:00Z` |
| `record.value` | `value` | `sample_value` |

اربط مشروع Supabase الخاص بك لمزامنة سجلات قاعدة البيانات، وبيانات مصادقة المستخدمين، وأحداث تخزين الملفات، والتغييرات الآنية لأتمتة تفاعل العملاء.

## نظرة عامة

| الخاصية | القيمة |
| --- | --- |
| **المنصة** | Supabase |
| **الفئة** | قاعدة بيانات وخلفية |
| **تعقيد الإعداد** | سهل |
| **تكامل رسمي** | لا |
| **البيانات المُزامَنة** | مستخدمون، جداول، تخزين، أحداث |
| **المهارات المتاحة** | 11 |
| **نوع واجهة البرمجة** | REST (PostgREST) + Realtime WebSocket |
| **الوثائق الرسمية** | [supabase.com/docs](https://supabase.com/docs) |

## الميزات

- **واجهة REST API المُولَّدة تلقائيًا**, عمليات CRUD على أي جدول Postgres عبر PostgREST، بدون كود
- **مزامنة مستخدمي Auth**, مزامنة مستخدمي Supabase Auth (البريد الإلكتروني، الهاتف، تسجيلات الدخول الاجتماعية) مع منصة التفاعل الخاصة بك
- **الاشتراكات الآنية**, الاستماع إلى أحداث INSERT وUPDATE وDELETE على أي جدول في الوقت الفعلي
- **أمان مستوى الصف**, يحترم جميع الوصول إلى API سياسات RLS في Postgres لبيانات آمنة متعددة المستأجرين
- **تكامل التخزين**, تتبع تحميل الملفات وإدارة الأصول عبر دلاء التخزين
- **وظائف Edge**, استدعاء وظائف Deno بدون خادم لمنطق مخصص وwebhooks
- **البحث النصي الكامل**, الاستفادة من إمكانيات البحث النصي الكامل في Postgres عبر API

## المتطلبات الأساسية

قبل البدء، تأكد من توفر ما يلي:

1. مشروع Supabase ([app.supabase.com](https://app.supabase.com/))
2. **عنوان URL الخاص بـ API** و**مفاتيح API** لمشروعك (موجودة في Settings → API)
3. حساب Tajo مع وصول إلى API

مفاتيح API

يوفر Supabase مفتاحين: `anon` (عام، يحترم RLS) و`service_role` (يتجاوز RLS، وصول مسؤول). استخدم `service_role` للتكاملات من جانب الخادم و`anon` من جانب العميل.

## المصادقة

يستخدم Supabase مصادقة مفتاح API. يتطلب كل طلب ترويسة `apikey` واختياريًا رمز Authorization bearer للوصول المُقيد بالمستخدم.

```bash
# Using anon key (respects RLS)
curl 'https://<project_ref>.supabase.co/rest/v1/customers' \
  -H "apikey: <SUPABASE_ANON_KEY>" \
  -H "Authorization: Bearer <SUPABASE_ANON_KEY>"

# Using service_role key (bypasses RLS)
curl 'https://<project_ref>.supabase.co/rest/v1/customers' \
  -H "apikey: <SUPABASE_SERVICE_ROLE_KEY>" \
  -H "Authorization: Bearer <SUPABASE_SERVICE_ROLE_KEY>"
```

## الإعداد

### الإعداد الأساسي

```yaml
connectors:
  supabase:
    enabled: true
    project_url: "https://xyzcompany.supabase.co"
    api_key: "${SUPABASE_SERVICE_ROLE_KEY}"

    # Data sync options
    sync:
      users: true
      tables:
        - customers
        - orders
        - products
      storage: true
      realtime: true

    # Map Supabase Auth users to contacts
    user_mapping:
      email: email
      phone: SMS
      user_metadata.full_name: FIRSTNAME
      created_at: SIGNUP_DATE
```

### تعيين الحقول

ربط أعمدة جداول Supabase بسمات منصة التفاعل:

#### تعيينات المستخدم الافتراضية

| Parameter | Type | Description |
| --- | --- | --- |
| `email` required | string | البريد الإلكتروني للمستخدم من Supabase Auth (معرّف فريد) |
| `phone` optional | string | رقم الهاتف لتفاعل SMS/WhatsApp |
| `user_metadata.full_name` optional | string | اسم العرض من البيانات الوصفية لمستخدم Auth |
| `user_metadata.avatar_url` optional | string | عنوان URL لصورة الملف الشخصي |
| `created_at` optional | timestamp | الطابع الزمني لإنشاء الحساب |
| `last_sign_in_at` optional | timestamp | أحدث تسجيل دخول لتقييم التفاعل |
| `app_metadata.provider` optional | string | مزود Auth (email، google، github، إلخ) |
| `confirmed_at` optional | timestamp | الطابع الزمني لتأكيد البريد الإلكتروني |

#### تعيين جدول مخصص

```yaml
table_mapping:
  customers:
    # Column → Attribute mapping
    email: email
    full_name: FIRSTNAME
    company: COMPANY
    plan: SUBSCRIPTION_PLAN
    mrr: MONTHLY_REVENUE
    created_at: SIGNUP_DATE

  orders:
    # Track as events
    sync_as: events
    event_name: "order_placed"
    properties:
      total: amount
      status: order_status
      items: line_items
```

## نقاط نهاية واجهة البرمجة

تُولَّد واجهة REST API الخاصة بـ Supabase تلقائيًا من مخطط قاعدة البيانات في `https://<ref>.supabase.co/rest/v1/`.

| نقطة النهاية | الطريقة | الوصف |
| --- | --- | --- |
| `/rest/v1/{table}` | `GET` | استعلام الصفوف بالتصفية والترتيب والتقسيم |
| `/rest/v1/{table}` | `POST` | إدراج الصفوف (يدعم الجملة والإدراج أو التحديث) |
| `/rest/v1/{table}` | `PATCH` | تحديث الصفوف المطابقة لعوامل التصفية |
| `/rest/v1/{table}` | `DELETE` | حذف الصفوف المطابقة لعوامل التصفية |
| `/rest/v1/rpc/{function}` | `POST` | استدعاء وظيفة Postgres |
| `/auth/v1/signup` | `POST` | إنشاء مستخدم جديد |
| `/auth/v1/token?grant_type=password` | `POST` | تسجيل الدخول بكلمة مرور |
| `/auth/v1/user` | `GET` | الحصول على المستخدم الحالي |
| `/auth/v1/admin/users` | `GET` | سرد جميع المستخدمين (service\_role) |
| `/storage/v1/object/{bucket}/{path}` | `POST` | تحميل ملف |
| `/storage/v1/object/list/{bucket}` | `POST` | سرد الملفات في الدلو |
| `/functions/v1/{function_name}` | `POST` | استدعاء وظيفة Edge |

### عوامل التصفية

| العامل | الوصف | مثال |
| --- | --- | --- |
| `eq` | يساوي | `?status=eq.active` |
| `neq` | لا يساوي | `?status=neq.deleted` |
| `gt`, `gte` | أكبر من | `?amount=gt.100` |
| `lt`, `lte` | أصغر من | `?created_at=lt.2024-01-01` |
| `like`, `ilike` | مطابقة النمط | `?name=ilike.%john%` |
| `in` | ضمن المصفوفة | `?status=in.(active,trial)` |
| `is` | التحقق من Null | `?deleted_at=is.null` |

## الأحداث

### أحداث Auth

| الحدث | المحفز | حالة الاستخدام |
| --- | --- | --- |
| `user.signed_up` | تسجيل مستخدم جديد | سلسلة ترحيب |
| `user.signed_in` | تسجيل دخول المستخدم | تتبع النشاط |
| `user.updated` | تغييرات الملف الشخصي | مزامنة البيانات |
| `user.deleted` | حذف الحساب | سير عمل التنظيف |

### أحداث قاعدة البيانات (Realtime)

| الحدث | المحفز | حالة الاستخدام |
| --- | --- | --- |
| `INSERT` | تمت إضافة صف جديد | إشعارات الطلبات/العملاء الجديدة |
| `UPDATE` | تم تعديل الصف | سير عمل تغيير الحالة |
| `DELETE` | تمت إزالة الصف | اكتشاف الفقد |

### أحداث Webhook

| الحدث | المحفز | حالة الاستخدام |
| --- | --- | --- |
| `auth.user.created` | تسجيل مستخدم عبر webhook | تشغيل التأهيل |
| `storage.object.created` | تم تحميل ملف | معالجة الأصول |

## أمثلة على الكود

### تهيئة الموصل

```javascript
import { TajoClient } from '@tajo/sdk';
import { createClient } from '@supabase/supabase-js';

const tajo = new TajoClient({
  apiKey: process.env.TAJO_API_KEY,
});

// Connect Supabase project
await tajo.connectors.connect('supabase', {
  projectUrl: process.env.SUPABASE_URL,
  serviceRoleKey: process.env.SUPABASE_SERVICE_ROLE_KEY,
});
```

### مزامنة المستخدمين مع جهات الاتصال

```javascript
// مزامنة جميع مستخدمي Supabase Auth كجهات اتصال
await tajo.connectors.sync('supabase', {
  type: 'full',
  resources: ['users'],
});

// مزامنة تزايدية (المستخدمون الجدد/المتغيرون فقط)
await tajo.connectors.sync('supabase', {
  type: 'incremental',
  resources: ['users'],
  since: '2024-01-01T00:00:00Z',
});
```

### الاستماع إلى التغييرات الآنية

```javascript
// الاشتراك في الطلبات الجديدة لمحفزات التفاعل
const supabase = createClient(
  process.env.SUPABASE_URL,
  process.env.SUPABASE_SERVICE_ROLE_KEY
);

supabase
  .channel('orders')
  .on('postgres_changes',
    { event: 'INSERT', schema: 'public', table: 'orders' },
    async (payload) => {
      // إعادة توجيه إلى Tajo كحدث
      await tajo.events.track({
        email: payload.new.customer_email,
        event: 'order_placed',
        properties: {
          order_id: payload.new.id,
          total: payload.new.total,
          items: payload.new.line_items,
        },
      });
    }
  )
  .subscribe();
```

### الاستعلام والتقسيم

```javascript
// استعلام العملاء حسب الخطة للحملات المستهدفة
const { data: proUsers } = await supabase
  .from('customers')
  .select('email, full_name, plan, mrr')
  .eq('plan', 'pro')
  .gt('mrr', 100)
  .order('mrr', { ascending: false });

// المزامنة مع قائمة Brevo لاستهداف الحملات
await tajo.lists.addContacts(PRO_LIST_ID, proUsers);
```

## حدود المعدل

حدود معدل API

تعتمد حدود معدل Supabase على خطتك. الطبقة المجانية: 500 طلب/دقيقة. Pro: 1,000 طلب/ثانية. اتصل بـ Supabase لحدود المؤسسات.

| الخطة | حد المعدل | اتصالات Realtime |
| --- | --- | --- |
| مجاني | 500 طلب/دقيقة | 200 متزامن |
| Pro | 1,000 طلب/ثانية | 500 متزامن |
| Team | 2,000 طلب/ثانية | 1,000 متزامن |
| Enterprise | مخصص | مخصص |

## استكشاف الأخطاء وإصلاحها

### المشاكل الشائعة

| المشكلة | السبب | الحل |
| --- | --- | --- |
| 401 Unauthorized | مفتاح API غير صالح أو منتهي | تحقق من مفاتيح API في لوحة Supabase → Settings → API |
| 403 Forbidden | سياسة RLS تحظر الوصول | استخدم مفتاح `service_role` لعمليات المسؤول، أو تحقق من سياسات RLS |
| لا توجد أحداث realtime | Realtime غير مفعَّل للجدول | فعّله في Database → Replication → أضف الجدول إلى النشر |
| نتائج استعلام فارغة | RLS يصفِّي جميع الصفوف | تحقق من أن سياسات RLS تسمح للدور المصادق عليه بالقراءة |
| فشل تحميل التخزين | سياسات الدلو | تحقق من أن دلو التخزين مُعَد كعام أو لديه سياسات RLS صحيحة |

### وضع التصحيح

```yaml
connectors:
  supabase:
    debug: true
    log_level: verbose
    log_queries: true
    log_realtime: true
```

### اختبار الاتصال

```bash
tajo connectors test supabase
# ✓ API connection successful
# ✓ Auth endpoint accessible
# ✓ Tables readable (12 tables found)
# ✓ Storage accessible (3 buckets)
# ✓ Realtime connection established
# ✓ Edge Functions available (4 functions)
```

## أفضل الممارسات

1. **استخدم مفتاح service\_role من جانب الخادم فقط**, لا تكشف عنه أبدًا في كود العميل
2. **فعّل RLS على جميع الجداول**, حتى مع service\_role، صمّم بـ RLS للدفاع المتعمق
3. **استخدم Realtime للمزامنة القائمة على الأحداث**, أكثر كفاءة من الاستطلاع للتغييرات
4. **عمليات مُجمّعة**, استخدم الإدراجات بالجملة وعامل `in` للعمليات عالية الحجم
5. **عيّن البيانات الوصفية للمستخدم**, خزّن الحقول ذات الصلة بالتفاعل في `user_metadata` أثناء التسجيل
6. **استخدم Edge Functions لـ webhooks**, عالج webhooks الواردة باستخدام Supabase Edge Functions لمعالجة منخفضة الكمون

## الأمان

- **مصادقة مفتاح API**, تتطلب جميع الطلبات مفاتيح API صالحة
- **أمان مستوى الصف (RLS)**, تحكم في الوصول أصلي في Postgres لكل صف
- **التحقق من JWT**, رموز Auth هي JWTs موقّعة يتم التحقق منها في كل طلب
- **SSL/TLS**, جميع الاتصالات مشفرة أثناء النقل
- **SOC 2 Type II**, Supabase متوافق مع SOC 2
- **قيود الشبكة**, قائمة IP المسموح بها الاختيارية في الخطط المدفوعة

## موارد ذات صلة

- [موصل Shopify](https://tajo.io/ar/docs/connectors/ecommerce/shopify)
- [موصل Stripe](https://tajo.io/ar/docs/connectors/ecommerce/stripe)
- [موصل Auth0](https://tajo.io/ar/docs/connectors/custom/auth0)
- [وثائق Supabase الرسمية](https://supabase.com/docs)
- [دليل Supabase REST API](https://supabase.com/docs/guides/api)
- [دليل Supabase Auth](https://supabase.com/docs/guides/auth)
