يتكامل n8n مع أدواتك بثلاث طرق: عقدة جاهزة مخصّصة لخدمة معروفة (مثل Slack أو Gmail)، أو عقدة HTTP Request العامة لأي خدمة لها API حتى لو لم تكن لها عقدة، أو Webhook لاستقبال البيانات من الخارج. أيًّا كانت الطريقة، يبدأ كل تكامل من الاعتماد (Credential): مكان آمن مركزي تُخزَّن فيه مفاتيح API أو ربط OAuth2 مرّة واحدة وتُعاد استخدامه في كل العُقد. ستتعلّم في هذا الدليل الفرق بين أنواع المصادقة (مفتاح API مقابل OAuth2 مقابل Basic/Header)، ومتى تختار كل مُشغّل (Webhook فوري، Polling دوري، Schedule مجدول، Manual للاختبار)، وكيف تبني عقدة HTTP Request بدقّة، وتمرّر البيانات بين العُقد بالتعبيرات {{ }}، وتتحكّم في التدفّق، وتعالج الأخطاء بأمان — مع أمثلة عملية لربط Slack وGoogle Sheets والبريد وقواعد البيانات.
التكامل هو جوهر n8n. فالأداة بحدّ ذاتها لا تفعل شيئًا مفيدًا حتى تربطها بالعالم الخارجي: تقرأ من خدمة، تحوّل البيانات، ثم تكتب إلى خدمة أخرى. إتقان آلية الربط — كيف تُخزَّن المفاتيح، وكيف تُصادِق، وكيف تتدفّق البيانات — هو ما يفصل بين من يبني workflow هشّ يتعطّل عند أول خطأ، ومن يبني أتمتة إنتاجية يُعتمَد عليها. إن كنت لم تبدأ بعد، راجع أولًا دليل الأتمتة بـn8n من الصفر لفهم المفاهيم العامة، ثم عُد إلى هنا للتعمّق في التكاملات.
ما الطرق الثلاث التي يتكامل بها n8n مع أدواتك؟
قبل أي تفصيل، افهم الصورة الكبيرة: n8n لا يربط أداة معيّنة بطريقة سحرية واحدة، بل يوفّر ثلاث آليات تكامل تغطّي تقريبًا أي خدمة على الإنترنت. اختيارك بينها يحدّد سهولة البناء وحدوده.
الطريقة الأولى: العقدة الجاهزة المخصّصة (Native/App Node). لكل خدمة شائعة عقدة جاهزة بنتها n8n أو المجتمع — Slack وGmail وGoogle Sheets وNotion وHTTP وغيرها بالمئات. العقدة تخفي تفاصيل الـAPI خلف قوائم وحقول واضحة: تختار العملية (مثل "Send Message")، وتملأ الحقول، وتُسند اعتمادًا، فينطلق الطلب. هذه أسرع وأأمن طريقة لأنها مُختبَرة وتعالج المصادقة وتجديد الرموز نيابةً عنك.
الطريقة الثانية: عقدة HTTP Request العامة. ماذا لو لم تكن للخدمة عقدة جاهزة، أو أردت endpoint غير مدعوم في العقدة؟ تستخدم عقدة HTTP Request — وهي "العقدة الأم" التي تُرسل أي طلب HTTP إلى أي API. بها تربط n8n عمليًا بأي خدمة في العالم لها واجهة REST. هي أقوى وأكثر مرونة، لكنها تتطلّب منك قراءة توثيق الـAPI وضبط الترويسات والجسم يدويًا.
الطريقة الثالثة: Webhook لاستقبال البيانات. الطريقتان السابقتان تجعلان n8n يبادر بالطلب (outbound). أما Webhook فيقلب الاتجاه: يعطيك n8n رابطًا (URL) تضعه في خدمة خارجية، فترسل تلك الخدمة بياناتها إليك لحظة وقوع حدث (دفعة جديدة، نموذج مُرسَل، رسالة واردة). هذا أساس التكاملات الفورية (real-time).
| الطريقة | الاتجاه | متى تستخدمها | الجهد المطلوب |
|---|---|---|---|
| عقدة جاهزة مخصّصة | n8n يبادر (outbound) | الخدمة لها عقدة جاهزة | منخفض |
| عقدة HTTP Request | n8n يبادر (outbound) | أي API بلا عقدة، أو endpoint متقدّم | متوسط–مرتفع |
| Webhook | الخارج يبادر (inbound) | استقبال أحداث فورية من خدمة | منخفض–متوسط |
القاعدة العملية: ابدأ دائمًا بالبحث عن عقدة جاهزة. إن لم تجدها، استعمل HTTP Request. وإن أردت أن تتفاعل n8n لحظيًا مع حدث خارجي، استعمل Webhook كمُشغّل.
ما الاعتمادات (Credentials) ولماذا هي قلب كل تكامل؟
الاعتماد في n8n هو سجلّ آمن يحتوي على بيانات المصادقة لخدمة معيّنة: مفتاح API، أو اسم مستخدم وكلمة مرور، أو ربط OAuth2 كامل. الفكرة الجوهرية: تُدخل بيانات المصادقة مرّة واحدة في الاعتماد، ثم تُسنده إلى أي عدد من العُقد دون إعادة كتابة المفتاح في كل مرة.
هذا الفصل بين "بيانات المصادقة" و"منطق الـworkflow" ليس راحةً فقط، بل ضرورة أمنية. فلو وضعت مفتاح API نصًّا صريحًا داخل حقل في عقدة، لتسرّب عند تصدير الـworkflow أو مشاركته أو في النسخ الاحتياطية. أما الاعتمادات فتُخزَّن مشفّرة في قاعدة بيانات n8n بمفتاح تشفير (N8N_ENCRYPTION_KEY)، ولا تظهر قيمتها مجددًا في الواجهة بعد الحفظ.
كيف تُنشئ اعتمادًا؟
هناك مساران لإنشاء اعتماد:
- من داخل العقدة: عند إضافة عقدة Slack مثلًا، يطلب منك حقل "Credential to connect with" اختيار اعتماد موجود أو إنشاء جديد. تضغط "Create New"، فيفتح نموذجًا بالحقول التي تحتاجها تلك الخدمة تحديدًا.
- من قائمة Credentials المركزية: في القائمة الجانبية، تنشئ الاعتماد مسبقًا ثم تُسنده لاحقًا للعُقد. مفيد عند إعداد فريق أو تجهيز عدّة خدمات دفعة واحدة.
بعد الإدخال، يوفّر n8n لكثير من الاعتمادات زرّ "Test" يتحقّق من صحّة البيانات بإجراء طلب تجريبي. اعتد الضغط عليه قبل بناء أي منطق — أكثر من نصف مشاكل التكامل سببها اعتماد خاطئ، واكتشافه مبكرًا يوفّر ساعات تصحيح.
قواعد أساسية للاعتمادات
- اعتماد واحد لكل حساب/بيئة: افصل بين اعتماد بيئة الاختبار (sandbox) وبيئة الإنتاج (production) حتى لا ترسل بيانات تجريبية لعملاء حقيقيين.
- سمِّ الاعتمادات بوضوح:
Slack — تنبيهات المبيعاتأفضل بكثير منSlack credential 1. - شارك بحذر: في النسخة المدفوعة يمكن مشاركة الاعتمادات مع أعضاء الفريق دون كشف القيمة؛ امنح أقل صلاحية ممكنة.
ما الفرق بين طرق المصادقة؟ ومتى تختار كل واحدة؟
طريقة المصادقة هي "اللغة" التي تثبت بها خدمتك أنك مخوَّل بالوصول. تدعم عقد n8n عدّة طرق، وفهم الفرق بينها يجنّبك ساعات من الحيرة.
| طريقة المصادقة | كيف تعمل | مستوى الأمان | متى تستخدمها |
|---|---|---|---|
| API Key | مفتاح ثابت يُرسَل في ترويسة أو معامل | متوسط | معظم الـAPIs البسيطة (server-to-server) |
| OAuth2 | تفويض عبر تسجيل دخول + رمز يُجدَّد تلقائيًا | عالٍ | الوصول لحساب مستخدم (Google, Slack) |
| Basic Auth | اسم مستخدم + كلمة مرور مُرمَّزة base64 | منخفض–متوسط | APIs قديمة أو داخلية فقط |
| Header Auth | قيمة مخصّصة في ترويسة بأي اسم | متوسط | APIs تتطلّب ترويسة غير قياسية |
مفتاح API (API Key)
أبسط الطرق وأكثرها شيوعًا. تنشئ مفتاحًا في لوحة تحكّم الخدمة، ثم تضعه في الاعتماد، فيُرسله n8n مع كل طلب — إمّا في ترويسة (مثل Authorization: Bearer <key> أو X-API-Key: <key>) أو كمعامل في الرابط (?api_key=<key>). مناسب للاتصال بين الخوادم (server-to-server) حيث لا يوجد مستخدم بشري يسجّل الدخول.
ميزته البساطة؛ وعيبه أن المفتاح طويل العمر، فإن تسرّب بقي صالحًا حتى تلغيه يدويًا. لذا تعامل معه كأنه كلمة مرور: لا تضعه في الكود، ولا تشاركه، ودوّره دوريًا.
OAuth2
أكثر تعقيدًا لكنه الأأمن للوصول إلى حساب مستخدم نيابةً عنه. بدل أن تعطي n8n مفتاحًا دائمًا، يفتح n8n نافذة تسجيل دخول للخدمة (مثل "اسمح لـn8n بالوصول إلى Google Sheets")، فتوافق، فتحصل n8n على رمز وصول (access token) قصير العمر ورمز تجديد (refresh token) يُجدّد الأول تلقائيًا عند انتهائه. ميزته الكبرى: لا تتعامل مع كلمة مرور المستخدم مباشرة، ويمكن سحب التفويض في أي لحظة من إعدادات الخدمة دون تغيير شيء عندك.
العقد الجاهزة (Slack, Gmail, Google Sheets) تتولّى رقصة OAuth2 كاملةً نيابةً عنك — تضغط زرًّا، تسجّل الدخول، وانتهى. أمّا إن استعملت HTTP Request مع OAuth2 يدويًا فستحتاج إدخال Client ID وClient Secret وAuthorization URL وToken URL وScopes.
Basic Auth و Header Auth
Basic Auth ترسل اسم مستخدم وكلمة مرور مُرمَّزَين بـbase64 في كل طلب. ضعيفة نسبيًا (base64 ليس تشفيرًا)، فلا تستخدمها إلا عبر HTTPS ومع APIs قديمة أو داخلية. Header Auth هي الأكثر مرونة: تضع أي قيمة في ترويسة باسم تختاره أنت — مفيدة عندما تطلب الخدمة ترويسة غير قياسية لا تقع تحت الأنماط السابقة.
ما المُشغّلات (Triggers)؟ ومتى تختار كلًّا منها؟
كل workflow يبدأ بعقدة مُشغّل (trigger) تحدّد متى يعمل. اختيار المُشغّل الصحيح يؤثّر على الفورية والموثوقية واستهلاك الموارد بقدر تأثير أي شيء آخر.
| المُشغّل | متى ينطلق | الفورية | الاستهلاك | مثال |
|---|---|---|---|---|
| Webhook | عند وصول طلب خارجي | فوري | منخفض (لا انتظار) | استقبال دفعة جديدة من بوابة دفع |
| Polling (App Trigger) | يفحص الخدمة كل فترة | شبه فوري (دقائق) | متوسط (طلبات متكرّرة) | صف جديد في Google Sheets |
| Schedule | في وقت/تكرار محدّد | مجدول | منخفض | تقرير يومي 8 صباحًا |
| Manual | عند ضغطك زر التنفيذ | عند الطلب | لا شيء | الاختبار والتطوير |
Webhook مقابل Polling: الفرق الجوهري
هذان أكثر مُشغّلَين يُخلَط بينهما، والفرق بينهما حاسم:
| المعيار | Webhook | Polling |
|---|---|---|
| من يبادر | الخدمة الخارجية تدفع إليك | n8n يسحب من الخدمة دوريًا |
| الفورية | فوري (لحظة الحدث) | يتأخّر بمقدار فترة الفحص |
| الحِمل | لا طلبات مهدورة | طلبات متكرّرة حتى لو لا جديد |
| المتطلّبات | URL عام + دعم الخدمة للـwebhooks | لا شيء خاص |
| الموثوقية عند التعطّل | قد تُفقَد أحداث وقت التوقّف | يلتقط الفائت عند العودة |
القاعدة: إن كانت الخدمة تدعم webhooks واحتجت فورية حقيقية، فالـWebhook هو الخيار الأمثل. إن لم تدعمها الخدمة، أو احتجت ضمان عدم فقدان أي عنصر، فالـPolling أبسط وأكثر تسامحًا. كثير من العقد الجاهزة في n8n توفّر مُشغّل polling مدمجًا (مثل "Google Sheets Trigger") يتولّى تتبّع آخر صف فُحص نيابةً عنك.
المُشغّل المجدول (Schedule) والمهام الدورية
المُشغّل المجدول (Schedule Trigger) ينفّذ الـworkflow في أوقات محدّدة سلفًا دون أي حدث خارجي: كل ساعة، كل يوم في توقيت معيّن، أو حسب تعبير cron مخصّص. هو الخيار الأمثل للمهام الدورية المنتظمة: تقرير مبيعات يومي 8 صباحًا، مزامنة بيانات كل 6 ساعات، أو تنظيف سجلّات أسبوعي. الرسم التالي يوضّح كيف ينطلق الـworkflow المجدول ويمرّ بمراحله حتى الإشعار:
عند إعداد Schedule Trigger، تختار إمّا فترة بسيطة (مثل "كل يوم 08:00") أو تكتب تعبير cron للتحكّم الدقيق. أمثلة على تعابير cron شائعة:
0 8 * * * → كل يوم الساعة 8:00 صباحًا
0 */6 * * * → كل 6 ساعات
0 9 * * 1 → كل اثنين الساعة 9:00 (تقرير أسبوعي)
*/15 * * * * → كل 15 دقيقة
نقطة مهمّة في الاستضافة الذاتية: المُشغّل المجدول يعتمد على المنطقة الزمنية (timezone) المضبوطة في n8n عبر متغيّر البيئة GENERIC_TIMEZONE. اضبطه على منطقتك (مثل Asia/Riyadh) وإلا ستنطلق المهام بتوقيت UTC، فيختلّ موعد التقارير بساعات. وللمهام المجدولة الحرجة، تأكّد أن الخادم يعمل 24/7 فعليًا — فإن توقّف الخادم وقت الجدولة، يُفوَّت التنفيذ ولا يُعوَّض تلقائيًا.
مثال حمولة Webhook
عند إنشاء عقدة Webhook، يعطيك n8n رابطين: واحد للاختبار (/webhook-test/...) وآخر للإنتاج (/webhook/...). الخدمة الخارجية ترسل إليه حمولة JSON تصل إلى n8n هكذا:
{
"headers": {
"content-type": "application/json",
"x-signature": "sha256=..."
},
"params": {},
"query": { "source": "checkout" },
"body": {
"event": "order.created",
"order_id": "ORD-10293",
"amount": 349.00,
"customer": { "email": "buyer@example.com" }
}
}
تصل إليك البيانات الفعلية تحت body، وتصل الترويسات تحت headers (مفيدة للتحقّق من توقيع الأمان)، والمعاملات في الرابط تحت query. هذا التنظيم ثابت تعتمد عليه في التعبيرات لاحقًا.
كيف تُبنى عقدة HTTP Request بدقّة؟
عقدة HTTP Request هي مفتاح الربط بأي خدمة لا عقدة لها. إتقانها يحرّرك من حدود العقد الجاهزة. بنيتها تعكس بنية أي طلب HTTP:
| الجزء | الوصف | مثال |
|---|---|---|
| Method | نوع العملية | GET, POST, PUT, PATCH, DELETE |
| URL | عنوان الـendpoint | https://api.service.com/v1/contacts |
| Headers | ترويسات الطلب | Content-Type, Authorization |
| Query Parameters | معاملات في الرابط | ?page=2&limit=50 |
| Body | جسم الطلب (للـPOST/PUT) | JSON أو form-data |
| Authentication | الاعتماد المُسنَد | API Key / OAuth2 |
الترويسات (Headers)
معظم الـAPIs تتطلّب ترويسة Content-Type تخبر الخدمة بصيغة الجسم، وترويسة مصادقة. مثال على ترويسات طلب POST يرسل JSON:
Content-Type: application/json
Accept: application/json
Authorization: Bearer {{$credentials.apiKey}}
نصيحة مهمّة: لا تكتب المفتاح صراحةً في الترويسة. اختر نوع المصادقة من حقل Authentication في العقدة واربط الاعتماد، فيحقن n8n المفتاح آمنًا دون ظهوره في الـworkflow.
الجسم (Body)
لطلبات POST/PUT/PATCH، تختار صيغة الجسم (JSON أو Form-Urlencoded أو Form-Data للملفات). مثال جسم JSON لإنشاء جهة اتصال، مع تمرير قيم من عقدة سابقة عبر التعبيرات:
{
"name": "{{ $json.full_name }}",
"email": "{{ $json.email }}",
"tags": ["lead", "{{ $json.source }}"],
"created_at": "{{ $now.toISO() }}"
}
الترقيم (Pagination)
كثير من الـAPIs تُرجِع النتائج على صفحات (مثلًا 50 عنصرًا في المرة). عقدة HTTP Request في n8n تدعم Pagination مدمجًا: تفعّل "Pagination" وتحدّد كيف يُحسَب الرابط أو المعامل للصفحة التالية (عبر page متزايد، أو رمز cursor/next يأتي في الردّ). فيجمع n8n كل الصفحات تلقائيًا في مخرجات واحدة دون أن تبني حلقة يدويًا. هذا ضروري عند سحب قوائم كبيرة (عملاء، طلبات، رسائل).
سحابة الأتمتة n8n من wpressly
شغّل n8n على سحابة wpressly بموارد مخصّصة وحماية ودعم عربي — اربط أدواتك وأتمت مهامك بلا إدارة سيرفر معقّدة.
ابدأ مع سحابة الأتمتةكيف تتدفّق البيانات بين العُقد؟ التعبيرات وعقدة Set
التكامل لا يكتمل بالربط فقط، بل بـتحويل البيانات لتلائم الخدمة التالية. هنا يأتي دور التعبيرات وعقدة Set.
التعبيرات {{ }}
كل قيمة في أي حقل يمكن أن تكون ثابتة أو تعبيرًا ديناميكيًا يقرأ من العُقد السابقة. التعبير يُكتب بين قوسين مزدوجين {{ }} ويستخدم JavaScript مبسّطًا. أهم المتغيّرات:
| التعبير | ماذا يُرجِع |
|---|---|
{{ $json.field }} | قيمة حقل من بيانات العقدة السابقة |
{{ $json["field name"] }} | حقل اسمه يحوي مسافات أو رموزًا |
{{ $node["Webhook"].json.body.email }} | قيمة من عقدة محدّدة بالاسم |
{{ $now.toISO() }} | الوقت الحالي بصيغة ISO |
{{ $json.amount * 1.15 }} | عملية حسابية (مثل إضافة ضريبة) |
{{ $json.email.toLowerCase() }} | تحويل نصّي |
أمثلة عملية تجمع وتنسّق:
// دمج الاسم الأول والأخير
{{ $json.first_name + " " + $json.last_name }}
// قيمة افتراضية إن كان الحقل فارغًا
{{ $json.country || "غير محدّد" }}
// تنسيق تاريخ قابل للقراءة
{{ $now.format("yyyy-MM-dd HH:mm") }}
عقدة Set (Edit Fields)
عندما تريد تشكيل البيانات صراحةً — إنشاء حقول جديدة، إعادة تسمية، أو حذف ما لا تحتاجه قبل إرساله للخدمة التالية — تستخدم عقدة Set (تُسمّى أيضًا "Edit Fields"). تحدّد فيها الحقول التي تريد إبقاءها وقيمها (ثابتة أو تعبيرات)، فتُخرِج بنية نظيفة ومتوقّعة. هذا يجعل الـworkflow أسهل قراءةً وأقلّ عرضةً للأخطاء، خاصةً عندما تأتي البيانات من مصدر فوضوي.
كيف تتحكّم في تدفّق الـworkflow؟
نادرًا ما يكون التكامل خطًّا مستقيمًا. غالبًا تحتاج قرارات (إن تحقّق شرط) أو دمج مسارات أو تكرار. عقد التحكّم في التدفّق توفّر ذلك:
| العقدة | وظيفتها | مثال استخدام |
|---|---|---|
| IF | فرع شرطي ثنائي (true/false) | إن كان المبلغ > 1000 → تنبيه المدير |
| Switch | فروع متعدّدة حسب قيمة | توجيه حسب نوع الطلب (شراء/استرجاع/استفسار) |
| Merge | دمج بيانات من مسارين | جمع نتائج عقدتين متوازيتين |
| Loop / SplitInBatches | المعالجة على دفعات | إرسال 100 بريد على دفعات 10 |
| Filter | تمرير العناصر المطابقة فقط | إبقاء العملاء النشطين فقط |
IF مقابل Switch
استخدم IF عندما يكون القرار ثنائيًا: شرط واحد ينتج عنه مسار "صحيح" أو "خطأ". استخدم Switch عندما يكون لديك أكثر من مسارين بناءً على قيمة واحدة (مثل توجيه التذاكر حسب الأولوية: عاجل/عادي/منخفض). Switch أنظف بكثير من تشعيب عدّة عقد IF متتالية.
SplitInBatches و Rate Limits
عند معالجة قوائم كبيرة، إرسال مئات الطلبات دفعةً واحدة سيصطدم بـحدود المعدّل (rate limits) للخدمة — تردّ بخطأ 429 Too Many Requests. الحلّ: عقدة SplitInBatches تقسّم العناصر لدفعات صغيرة وتعالجها على دورات، ويمكنك إضافة عقدة Wait بين الدفعات لإبطاء الوتيرة. مثلًا: لإرسال 500 رسالة عبر API يسمح بـ60 طلب/دقيقة، عالجها بدفعات 10 مع انتظار ثانية بين كل دفعة.
أمثلة تكامل عملية
النظرية تترسّخ بالتطبيق. إليك أنماط ربط شائعة لأبرز الأدوات. لمزيد من السيناريوهات الكاملة، راجع أمثلة workflows عملية.
ربط Slack: إشعارات فورية
عقدة Slack الجاهزة من أبسط التكاملات. بعد إنشاء اعتماد (OAuth2 أو Bot Token):
- أضف عقدة Slack بعد منطق الـworkflow.
- اختر العملية Send Message.
- حدّد القناة (
#salesمثلًا) أو مستخدمًا. - اكتب الرسالة بتعبير ديناميكي:
طلب جديد بقيمة {{ $json.amount }} ريال
من {{ $json.customer.email }} — رقم {{ $json.order_id }}
هذا النمط (حدث → معالجة → إشعار Slack) هو العمود الفقري لعشرات الأتمتات.
ربط Google Sheets: تسجيل البيانات
Google Sheets قاعدة بيانات الفقراء المثالية للتسجيل والتقارير. عقدتها تدعم: قراءة صفوف، إضافة صف (Append)، تحديث، وحذف. لإضافة صفّ جديد لكل دفعة واردة:
- اعتماد Google عبر OAuth2.
- عملية Append Row.
- اختر الملف وورقة العمل.
- اربط الأعمدة بالقيم عبر التعبيرات (
Date ← {{$now}},Email ← {{$json.email}},Amount ← {{$json.amount}}).
ولأتمتة تنطلق من Sheets نفسها (صفّ جديد يُشغّل العملية)، استخدم Google Sheets Trigger (نوع polling).
ربط البريد (Gmail / SMTP)
لإرسال بريد، أمامك خياران: عقدة Gmail الجاهزة (عبر OAuth2، مناسبة لحسابات Google) أو عقدة Send Email العامة (عبر SMTP لأي مزوّد بريد). الثانية تحتاج اعتماد SMTP:
Host: smtp.yourprovider.com
Port: 587
User: notifications@yourdomain.com
Password: ********
SSL/TLS: STARTTLS
بعدها تحدّد المُرسِل والمستقبِل والموضوع والجسم (نصّ أو HTML)، مع تعبيرات لتخصيص المحتوى لكل مستلم.
ربط قاعدة بيانات (Postgres / MySQL)
للقراءة من قاعدة بيانات أو الكتابة إليها مباشرة، استخدم عقدة Postgres أو MySQL. اعتمادها يتطلّب host وport واسم القاعدة ومستخدمًا وكلمة مرور. ثم تنفّذ استعلامًا — مع استخدام المعاملات (parameters) لا الدمج النصّي لتجنّب حقن SQL:
-- الصحيح: معامل آمن
INSERT INTO leads (email, source, created_at)
VALUES ($1, $2, NOW());
تمرّر القيم عبر حقل Query Parameters في العقدة (مثل {{$json.email}}, {{$json.source}}) فيتولّى n8n الترميز الآمن. لا تبنِ الاستعلام بدمج {{$json.email}} داخل نصّ SQL مباشرة.
ربط CRM أو متجر عبر API عام
إن لم تكن لـCRM أو متجرك (مثل WooCommerce أو متجر مخصّص) عقدة جاهزة كافية، تربطه بعقدة HTTP Request. اقرأ توثيق الـAPI، أنشئ اعتماد API Key/OAuth2، ثم استدعِ الـendpoints مباشرة (إنشاء عميل، جلب طلبات، تحديث حالة). هذه المرونة هي ما يجعل n8n قادرًا على ربط أي شيء عمليًا.
كيف تعالج الأخطاء بأمان؟
في الإنتاج، التكاملات تفشل: الـAPI يتعطّل، الشبكة تنقطع، حدّ المعدّل يُتجاوَز. workflow بلا معالجة أخطاء سيتوقّف صامتًا وتكتشف ذلك متأخّرًا. n8n يوفّر ثلاث آليات تكميلية:
| الآلية | ماذا تفعل | متى تستخدمها |
|---|---|---|
| Retry On Fail | يعيد محاولة العقدة تلقائيًا عند الفشل | أخطاء عابرة (شبكة، 429، 503) |
| Continue On Fail | يتابع الـworkflow رغم فشل العقدة | عندما الخطأ غير حرج ويُعالَج لاحقًا |
| Error Trigger | workflow منفصل ينطلق عند أي فشل | إشعار مركزي بكل الأخطاء |
Retry On Fail
في إعدادات أي عقدة (تبويب Settings)، فعّل Retry On Fail وحدّد عدد المحاولات (مثلًا 3) والفاصل بينها (مثلًا 5 ثوانٍ). مثالي للأخطاء العابرة: انقطاع شبكة لحظي أو 429 أو 503. غالبًا تنجح المحاولة الثانية أو الثالثة دون أي تدخّل.
Continue On Fail
أحيانًا فشل عقدة لا يجب أن يوقف كل شيء. مثلًا: عند معالجة 100 عميل، فشل تحديث عميل واحد لا يجب أن يلغي الـ99 الباقين. فعّل Continue On Fail فتُمرَّر العناصر الفاشلة على مسار الخطأ لتعالجها لاحقًا (تسجّلها أو تنبّه عنها) بينما يكمل الباقي.
Error Trigger: شبكة الأمان المركزية
الممارسة الأمتن: أنشئ workflow مستقلًّا يبدأ بعقدة Error Trigger. يربط n8n هذا الـworkflow بأي workflow آخر يفشل (عبر إعداد "Error Workflow")، فيلتقط كل الأخطاء في مكان واحد ويرسل لك إشعارًا (Slack أو بريد) بتفاصيل العطل: اسم الـworkflow، العقدة، ورسالة الخطأ. هكذا تعرف بالمشكلة لحظة وقوعها بدل اكتشافها بعد أيام.
أفضل الممارسات الأمنية للاعتمادات
التكامل يعني تسليم n8n مفاتيح الوصول إلى أنظمتك. حمايتها مسؤولية جوهرية، خاصةً في الاستضافة الذاتية على VPS بالـDocker.
| الممارسة | السبب |
|---|---|
| لا تضع مفاتيح صراحةً في العُقد | تتسرّب عند التصدير/المشاركة/النسخ الاحتياطي |
| استخدم الاعتمادات دائمًا | تُخزَّن مشفّرة بـN8N_ENCRYPTION_KEY |
احفظ N8N_ENCRYPTION_KEY بأمان وانسخه احتياطيًا | فقدانه = فقدان كل الاعتمادات نهائيًا |
| امنح أقلّ صلاحية (least privilege) | مفتاح بصلاحيات محدودة يقلّل ضرر التسرّب |
| دوّر المفاتيح دوريًا | يحدّ من خطر مفتاح قديم مسرَّب |
| افصل بيئة الاختبار عن الإنتاج | يمنع تسريب/إفساد بيانات حقيقية |
| فعّل HTTPS على واجهة n8n | يحمي المفاتيح أثناء النقل |
| تحقّق من توقيع الـWebhooks | يمنع طلبات مزوّرة من جهات مجهولة |
نقطة شديدة الأهمية: متغيّر البيئة N8N_ENCRYPTION_KEY هو المفتاح الذي يشفّر كل اعتماداتك. عند إعداد n8n عبر Docker، اضبطه صراحةً واحفظ نسخة آمنة منه:
# في ملف .env بجانب docker-compose
N8N_ENCRYPTION_KEY=ضع-هنا-سلسلة-عشوائية-طويلة-وآمنة
N8N_BASIC_AUTH_ACTIVE=true
N8N_BASIC_AUTH_USER=admin
N8N_BASIC_AUTH_PASSWORD=كلمة-مرور-قوية
WEBHOOK_URL=https://n8n.yourdomain.com/
إن فقدت N8N_ENCRYPTION_KEY بعد تخزين اعتمادات، لن يستطيع n8n فكّ تشفيرها وستُضطر لإعادة إدخالها كلها. لذا انسخه احتياطيًا في مكان آمن منفصل عن الخادم.
أمان تكاملاتك يبدأ من أمان الخادم نفسه: تشغيل n8n على بيئة معزولة ومحدّثة بعنوان عام ثابت وشهادة SSL هو ما يحمي اعتماداتك ويبقي webhooks تعمل.
سحابة الأتمتة n8n من wpressly
شغّل n8n على سحابة wpressly بموارد مخصّصة وحماية ودعم عربي — اربط أدواتك وأتمت مهامك بلا إدارة سيرفر معقّدة.
ابدأ مع سحابة الأتمتةحلّ المشكلات الشائعة (Troubleshooting)
أكثر مشاكل التكامل تتكرّر بأنماط معروفة. هذا الجدول يربط العَرَض بالسبب الأرجح والحلّ:
| العَرَض | السبب المحتمل | الحلّ |
|---|---|---|
401 Unauthorized | مفتاح/رمز خاطئ أو منتهٍ | أعد إنشاء المفتاح وحدّث الاعتماد واضغط Test |
403 Forbidden | صلاحيات (scopes) ناقصة | أضف الـscopes المطلوبة وأعد التفويض |
429 Too Many Requests | تجاوز حدّ المعدّل | فعّل Retry، أبطئ بـSplitInBatches وWait |
| Webhook لا يصل | استخدام رابط الاختبار، أو لا URL عام | استخدم رابط الإنتاج وتأكّد من WEBHOOK_URL |
| الحقل يصل فارغًا | مسار التعبير خاطئ | افحص بنية البيانات في تبويب الـoutput |
ECONNREFUSED لقاعدة البيانات | host/port خطأ أو جدار ناري | تحقّق من الاتصال والـIP المسموح |
| OAuth2 يفشل في الربط | Redirect URI غير مسجّل | سجّل رابط OAuth الخاص بـn8n في الخدمة |
| العقدة تعمل يدويًا لا تلقائيًا | الـworkflow غير مُفعّل (inactive) | فعّل الـworkflow من المفتاح أعلى اليمين |
نصيحة عامّة للتشخيص: نفّذ الـworkflow يدويًا وافحص مخرجات كل عقدة (تبويب JSON) خطوة بخطوة. غالبًا ترى تمامًا أين تتوقّف البيانات أو تتشوّه، فيتّضح السبب فورًا.
نصائح خبير لتكاملات أمتن
- اختبر الاعتماد أولًا دائمًا: قبل بناء أي منطق، اضغط Test على الاعتماد. توفّر عليك ساعات.
- ابدأ بعقدة Manual Trigger أثناء التطوير: نفّذ يدويًا مرارًا حتى يستقرّ المنطق، ثم بدّل للمُشغّل الحقيقي.
- استعمل Set مبكرًا لتنظيف البيانات: بنية نظيفة في البداية تقلّل أخطاء العُقد اللاحقة.
- لا تثق بالبيانات الواردة من Webhook: تحقّق من التوقيع والحقول المطلوبة قبل المعالجة.
- سمِّ العُقد بوضوح:
جلب الطلباتأفضل منHTTP Request1عند التصحيح بعد شهور. - وثّق الـworkflow بعُقد Sticky Note: ملاحظات مرئية تشرح المنطق لك ولفريقك.
- راقب حدود المعدّل من البداية: اقرأ توثيق الـAPI لمعرفة الحدّ، وصمّم بـSplitInBatches قبل أن تصطدم بها.
الأسئلة الشائعة
ما الفرق بين العقدة الجاهزة وعقدة HTTP Request؟ العقدة الجاهزة مبنية مسبقًا لخدمة معيّنة وتخفي تفاصيل الـAPI خلف حقول واضحة وتعالج المصادقة نيابةً عنك، فهي أسرع وأأمن. عقدة HTTP Request عامة تُرسل أي طلب لأي API، فتربط بها خدمات بلا عقدة جاهزة أو endpoints متقدّمة، لكنها تتطلّب ضبطًا يدويًا. ابدأ بالعقدة الجاهزة، واستعمل HTTP Request عند الحاجة.
هل أحتاج إلى معرفة برمجية لربط الأدوات في n8n؟
لا للحالات الأساسية: معظم التكاملات تُبنى بالعقد الجاهزة والقوائم دون كود. لكن معرفة أساسيات JSON والتعبيرات {{ }} تفتح إمكانات أوسع، وعقدة Code (JavaScript/Python) تتيح منطقًا متقدّمًا عند الحاجة فقط.
أين تُخزَّن مفاتيح API؟ وهل هي آمنة؟
تُخزَّن داخل الاعتمادات (Credentials) مشفّرة في قاعدة بيانات n8n باستخدام N8N_ENCRYPTION_KEY، ولا تظهر قيمتها في الواجهة بعد الحفظ ولا في تصدير الـworkflow. هذا أأمن بكثير من كتابتها صراحةً في العُقد. احفظ مفتاح التشفير احتياطيًا في مكان منفصل.
متى أستخدم Webhook ومتى Polling؟ استخدم Webhook إن دعمته الخدمة واحتجت فورية حقيقية، فهو لحظي ولا يهدر طلبات. استخدم Polling إن لم تدعم الخدمة webhooks أو احتجت ضمان عدم فقدان أي عنصر، فهو أبسط ويلتقط ما فات أثناء التوقّف. الفرق: Webhook تدفعه الخدمة إليك، وPolling يسحبه n8n دوريًا.
كيف أربط خدمة ليس لها عقدة جاهزة في n8n؟ عبر عقدة HTTP Request: اقرأ توثيق الـAPI، أنشئ اعتماد المصادقة المناسب (API Key أو OAuth2)، ثم اضبط الطريقة والرابط والترويسات والجسم. عمليًا تستطيع ربط أي خدمة لها واجهة REST بهذه الطريقة.
كيف أمرّر بيانات من عقدة إلى أخرى؟
عبر التعبيرات {{ }}. تقرأ من العقدة السابقة بـ{{ $json.field }} أو من عقدة محدّدة بـ{{ $node["اسم العقدة"].json.field }}. ولتشكيل البيانات صراحةً (إنشاء/إعادة تسمية/حذف حقول) استخدم عقدة Set قبل إرسالها للخدمة التالية.
ماذا أفعل عند خطأ 429 (تجاوز حدّ المعدّل)؟ هذا يعني أنك ترسل طلبات أسرع مما تسمح به الخدمة. فعّل Retry On Fail على العقدة، وأبطئ المعالجة بعقدة SplitInBatches لتقسيم العناصر لدفعات، وأضف عقدة Wait بين الدفعات. اقرأ توثيق الـAPI لمعرفة الحدّ المسموح وصمّم وفقه.
ما الفرق بين OAuth2 و API Key؟ وأيّهما أفضل؟ API Key مفتاح ثابت طويل العمر بسيط الإعداد، مناسب للاتصال بين الخوادم. OAuth2 أكثر أمانًا للوصول إلى حساب مستخدم: يستخدم رموزًا قصيرة العمر تُجدَّد تلقائيًا ويمكن سحب تفويضها بسهولة. إن وفّرت العقدة OAuth2 لخدمة مستخدم (Google, Slack) فهو الأفضل؛ وإلا فمفتاح API كافٍ للحالات البسيطة.
كيف أتعامل مع أخطاء التكامل في الإنتاج؟ بثلاث آليات معًا: Retry On Fail لإعادة المحاولة عند الأخطاء العابرة، Continue On Fail لمتابعة الباقي عند فشل غير حرج، وError Trigger في workflow مركزي يلتقط أي فشل ويرسل لك إشعارًا فوريًا بالتفاصيل. هكذا لا تمرّ الأعطال صامتةً.
هل يمكن ربط n8n بقاعدة بيانات مباشرة؟ نعم، عبر عقد مثل Postgres وMySQL. تنشئ اعتمادًا بالـhost وport واسم القاعدة وبيانات الدخول، ثم تنفّذ استعلامات قراءة/كتابة. استخدم معاملات الاستعلام (Query Parameters) دائمًا بدل دمج القيم نصًّا لتجنّب حقن SQL.
لماذا لا يصل Webhook رغم صحّة الإعداد؟
الأسباب الشائعة: استخدام رابط الاختبار (/webhook-test/) بدل رابط الإنتاج، أو أن الـworkflow غير مُفعّل (الرابط الإنتاجي يعمل فقط عند تفعيل الـworkflow)، أو عدم ضبط WEBHOOK_URL بعنوانك العام في الاستضافة الذاتية، أو جدار ناري يحجب الوصول. تحقّق من هذه الأربعة بالترتيب.
الخلاصة
ربط n8n بأدواتك يقوم على أسس واضحة: ثلاث طرق تكامل (عقدة جاهزة، HTTP Request، Webhook)، تبدأ كلها من اعتماد آمن، وتُصادِق بالطريقة المناسبة (API Key أو OAuth2 أو Basic/Header)، وتنطلق بالمُشغّل الأنسب (Webhook فوري، Polling دوري، Schedule مجدول). أضف إليها تمرير البيانات بالتعبيرات، والتحكّم في التدفّق، ومعالجة الأخطاء بثلاث آليات، والأمان حول الاعتمادات — وستبني تكاملات إنتاجية موثوقة لا تتعطّل عند أول مفاجأة.
ابدأ صغيرًا: اربط خدمة واحدة، اختبر اعتمادها، نفّذ يدويًا حتى يستقرّ، ثم وسّع. وكلما احتجت تشغيل n8n على خادم دائم 24/7 بعنوان عام ودومين وSSL، تذكّر أن استضافة موثوقة هي الأساس الذي تقوم عليه كل تكاملاتك.
سحابة الأتمتة n8n من wpressly
شغّل n8n على سحابة wpressly بموارد مخصّصة وحماية ودعم عربي — اربط أدواتك وأتمت مهامك بلا إدارة سيرفر معقّدة.
ابدأ مع سحابة الأتمتة