موصل Supabase

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

نظرة عامة

الخاصيةالقيمة
المنصةSupabase
الفئةقاعدة بيانات وخلفية
تعقيد الإعدادسهل
تكامل رسمينعم
البيانات المُزامَنةمستخدمون، جداول، تخزين، أحداث
المهارات المتاحة11
نوع واجهة البرمجةREST (PostgREST) + Realtime WebSocket
الوثائق الرسمية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)
  2. عنوان URL الخاص بـ API ومفاتيح API لمشروعك (موجودة في Settings → API)
  3. حساب Tajo مع وصول إلى API

مفاتيح API

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

المصادقة

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

Terminal window
# 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>"

الإعداد

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

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

الطابع الزمني لتأكيد البريد الإلكتروني

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

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/signupPOSTإنشاء مستخدم جديد
/auth/v1/token?grant_type=passwordPOSTتسجيل الدخول بكلمة مرور
/auth/v1/userGETالحصول على المستخدم الحالي
/auth/v1/admin/usersGETسرد جميع المستخدمين (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تم تحميل ملفمعالجة الأصول

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

تهيئة الموصل

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,
});

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

// مزامنة جميع مستخدمي 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',
});

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

// الاشتراك في الطلبات الجديدة لمحفزات التفاعل
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();

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

// استعلام العملاء حسب الخطة للحملات المستهدفة
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 متزامن
Pro1,000 طلب/ثانية500 متزامن
Team2,000 طلب/ثانية1,000 متزامن
Enterpriseمخصصمخصص

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

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

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

وضع التصحيح

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

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

Terminal window
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 المسموح بها الاختيارية في الخطط المدفوعة

موارد ذات صلة

Subscribe to updates

developer-docs

Drop your email or phone number — we'll send you what matters next.

auto-detect
مساعد AI

مرحباً! اسألني أي شيء عن الوثائق.