تدفقات n8n
يمكن لـ AI-School بدء تدفقات n8n عبر webhook إنتاجي. هذا مفيد عندما تريد بدء عملية آلية خارج AI-School، مثل إنشاء مهمة أو تحديث سجل CRM أو بدء تدفق تقارير أو تمرير بيانات نموذج إلى نظام آخر.
مثال: مقالة إخبارية على موقع المدرسة
افترض أن المدرسة أنشأت تدفق n8n ينشر مقالة إخبارية على موقع WordPress الخاص بالمدرسة. في AI-School تقوم أنت فقط بإدخال مقطع نصي قصير، على سبيل المثال بضعة جمل عن أسبوع مشروع أو يوم رياضي أو يوم مفتوح. باستخدام هذا النص تبدأ تدفق العمل في n8n.
بعدها قد يقوم تدفق n8n بما يلي:
- من النص القصير إنشاء نص مسودة أنيق باستخدام عقدة LLM وموجه يتناسب جيدًا مع نبرة المدرسة.
- إنشاء رسم توضيحي مناسب بعقدة LLM ثانية، مثلاً بألوان المدرسة وبأسلوب توضيحي مألوف.
- تجهيز النص والصورة كمنشور مدونة جاهز أو نشره على موقع WordPress.
هكذا تعمل AI-School وn8n معاً: في AI-School يختار المستخدم تدفق العمل ويدخل المعلومات اللازمة. ثم تنفذ n8n الخطوات الآلية وتضمن أن يظهر خبر المقالة بشكل أنيق على الموقع.
ماذا تفعل هذه التكامل؟
تبدأ تدفق n8n من خلال عرض التدفق. وحدها webhook الإنتاجي، POST وHeader Auth إلزامية. الحقول والتعليقات الراجعة من n8n اختيارية ويمكن تعيينها بشكل مستقل.
- إذا لم يكن لدى التدفق أي حقول، فسيتم استدعاء الـ webhook فوراً.
- إذا كان لدى التدفق حقول، فسيظهر نموذج أولاً. يملأ المستخدم الحقول ثم يبدأ التدفق بالزر.
- تُرسل القيم المدخلة كـ JSON في طلب POST إلى webhook الخاص بـ n8n.
- بدون تعليقات راجعة، يؤكد AI-School فقط أن التدفق قد بدأ وأنه سيستمر في n8n. لا يعرض النافذة برنامج تشغيل، ويمكن إغلاقها فوراً.
- إذا تم تفعيل ذلك أثناء التسجيل، يمكن للتدفق إرسال خطوات وسيطة أو نهاية إلى AI-School.
- إذا تم تفعيل الموافقة أثناء التسجيل، يمكن للمستخدم اختيار ذلك مباشرة في AI-School. سيكمل n8n بعد ذلك من خطوة الانتظار.
إنشاء تدفق n8n في AI-School
يقوم المسؤول بتسجيل التدفق كما يلي:
- اذهب إلى المساعدون.
- افتح التدفقات العمل.
- اختر تدفق n8n جديد.
- املأ اسم التدفق وURL الإنتاجي لـ n8n.
- اضبط توثيق العنوان باستخدام اسم رأس وقيمة رأس مخفية.
- ضع علامة في أسفل التعليقات من n8n فقط على العناصر التي تم بناؤها فعلاً في هذا التدفق: التقدم، الموافقة و/أو نهاية التدفق.
- أضف الحقول إن لزم الأمر والتي يجب إرسالها في طلب POST.
- احفظ التدفق.
جميع خيارات التعليقات الثلاثة مطفأة افتراضيًا. إذا أضفت لاحقًا إشعارات عودة أو خطوة موافقة في n8n، فاعمل أيضًا على تسجيل AI-School. الحوار بالتالي يعرف ما إذا كان يجب عرض تأكيد بدء فقط أو الانتظار لمزيد من الإشارات.
الحقول
- الحقول اختيارية.
- كل حقل له اسم حقل ونوع واحد.
- أنواع الحقول المدعومة هي نص قصير، نص طويل، رقم، نعم/لا، تاريخ، اختيار واحد واختيارات متعددة.
- في اختيار واحد واختيارات متعددة أضف الخيارات المتاحة. يعرض اختيار واحد كقائمة اختيار مضغوطة؛ تُظهر اختيارات متعددة مربعات اختيار. تُرسل القيمة المختارة أو القيم المختارة في جسم JSON.
- الحقول الإلزامية يجب أن تُملأ قبل أن يبدأ التدفق.
- اسم الحقل يصبح المفتاح في جسم JSON المرسل إلى n8n.
إنشاء تدفق عمل متوافق في n8n
- أنشئ تدفق عمل جديد في n8n.
- أضف في البداية عقدة Webhook.
- منح هذه العقدة الاسم بالضبط Start workflow. ستستخدم الأمثلة لاحقًا هذا الاسم.
- اضبط HTTP Method على POST.
- اختر Authentication لـ Header Auth وحدد اعتماد Header Auth.
- أدخل في تلك الاعتماد نفس اسم الرأس والقيمة السرية كما في التدفق في AI-School.
- اضبط Respond أو Response Mode على Immediately. ستحصل التطبيق على تأكيد بدء ناجح على الفور، بينما يستمر n8n في العمل.
- انسخ Production URL لعقدة Webhook إلى الحقل n8n productie-url في AI-School. لا تستخدم عنوان الاختبار مع
/webhook-test/. - فعّل التدفق في n8n.
البيانات من AI-School موجودة في n8n تحت body. لذا تكون بيانات التكامل تحت body.integration. لا تحذف هذه البيانات في عقدة Edit Fields أو Set أو Code. أمثلة أدناه تقرأها دائماً من عقدة Start workflow.
مثال على جسم JSON
إذا قمت بتعريف الحقول بأسماء prompt، klantnaam، doelgroepen وdatum، فسيستلم n8n على سبيل المثال هذا الجسم JSON. يضيف AI-School كائن integration تلقائياً.
{
"prompt": "Maak een korte samenvatting van de aanvraag.",
"klantnaam": "Voorbeeldorganisatie",
"doelgroepen": ["medewerkers", "ouders"],
"datum": "2026-09-22",
"integration": {
"runId": "chat-document-id",
"tenant": "default",
"callbackUrl": "https://europe-west1-ai-school-pro.cloudfunctions.net/n8nWorkflowCallback",
"callbackToken": "tijdelijk-token-voor-deze-uitvoering"
}
}
يخص CallbackToken تنفيذ واحد. لا تسجله في السجلات أو التكوين الثابت أو الأنظمة الأخرى.
اختياري: إرسال التحديثات والتكليل
يمكن لـ AI-School عرض ما تعيده n8n فقط. استخدم هذه الاستدعاءات المرتجعة فقط إذا قمت بتمكين في التسجيل خيارين: إبلاغ التقدم الوسيط و/أو إبلاغ نهاية التدفق.
إعداد عقدة HTTP Request
-
أضف عقدة HTTP Request وسمّها مثلًا إبلاغ التقدم.
-
اضبط Method على POST.
-
انقر عند URL على Expression.
-
انسخ تمامًا هذا التعبير:
{{ $('Start workflow').first().json.body.integration.callbackUrl }} -
اختر عند Authentication خيار None. سيُضاف الرمز المؤقت في الخطوة التالية كرأس.
-
شغّل خيار Send Headers وأضف هذين الرأسين:
Name Value AuthorizationBearer {{ $('Start workflow').first().json.body.integration.callbackToken }}Content-Typeapplication/json -
شغّل خيار Send Body.
-
اختر Body Content Type: JSON وSpecify Body: Using JSON.
-
الصق JSON التالي في الحقل JSON:
{
"tenant": "{{ $('Start workflow').first().json.body.integration.tenant }}",
"runId": "{{ $('Start workflow').first().json.body.integration.runId }}",
"eventId": "document-maken-gestart",
"type": "progress",
"executionId": "{{ $execution.id }}",
"step": {
"id": "document_maken",
"label": "Document maken"
},
"message": "Het document wordt gemaakt."
}
- اختر Execute step أثناء اختبار التدفق عبر التطبيق. من المفترض أن تعود العقدة بحالة 200.
انسخ هذه العقدة HTTP Request لكل حالة إشعار حالة. اضبط في كل نسخه على الأقل eventId، step.id، step.label وmessage.
إعداد آخر callback
إذا كان خيار إبلاغ نهاية التدفق مفعلاً، يجب وجود callback أخير في نهاية كل مسار ممكن. استخدم type: "completed" عند النجاح، type: "failed" عند خطأ تتولى أنت معالجته وtype: "rejected" عندما يرفض المستخدم التدفق.
لتنفيذ ناجح، يمكن أن يبدو الجسم كالتالي:
{
"tenant": "{{ $('Start workflow').first().json.body.integration.tenant }}",
"runId": "{{ $('Start workflow').first().json.body.integration.runId }}",
"eventId": "workflow-afgerond",
"type": "completed",
"executionId": "{{ $execution.id }}",
"step": {
"id": "afronding",
"label": "Workflow afgerond"
},
"message": "الاعتماد قد اكتمل.",
"output": {
"resultaat": "Korte omschrijving of link naar het resultaat"
}
}
استخدم في كل تنفيذ لـ callback مختلف eventId. كما يجب أن يظهر نص واضح في step.label للمستخدم في نافذة التنفيذ.
اختياري: طلب الموافقة في التطبيق
إعداد عقدة Wait
- أضف عقدة Wait في المكان الذي تحتاج فيه الموافقة.
- اختر في Resume خيار On Webhook Call.
- اضبط HTTP Method على POST.
- اختر Authentication لـ Header Auth.
- اختر نفس اعتماد Header Auth كما في عقدة Start workflow.
- ضع قبل عقدة Wait نسخة من عقدة HTTP Request التي تم إعدادها سابقاً وسمّها طلب الموافقة.
- استخدم في هذه العقدة نفس URL الديناميكي ورؤوس HTTP. استبدل فقط جسم JSON بـ:
{
"tenant": "{{ $('Start workflow').first().json.body.integration.tenant }}",
"runId": "{{ $('Start workflow').first().json.body.integration.runId }}",
"eventId": "controle-document",
"type": "approval_required",
"executionId": "{{ $execution.id }}",
"step": {
"id": "controle_document",
"label": "Document controleren"
},
"approval": {
"question": "Mag de workflow doorgaan?",
"context": "Controleer eerst het gegenereerde document.",
"resumeUrl": "{{ $execution.resumeUrl }}",
"choices": [
{ "value": "approve", "label": "Goedkeuren" },
{ "value": "reject", "label": "Afwijzen" }
]
}
}
قوم بربط Vraag goedkeuring مع عقدة Wait. سيعرض المستخدم الأزرار في AI-School. عنوان الاستئناف السري لن يُعرض للمستعرض؛ سيرسل الخادم الاختيار بأمان إلى عقدة Wait.
معالجة الاختيار بعد عقدة Wait
-
أضف عقدة Switch بعد عقدة Wait.
-
استخدم القيمة التي يجب التحقق منها:
{{ $json.body.decision }} -
أنشئ مساراً مثلاً لـ
approveومساراً لـreject. -
اجعل كل مسار ينتهي بـ callback مناسب من
completed،rejectedأوfailed.
يمكن لقيمة الاختيار أن تحتوي فقط على حروف وأرقام و_ و-. يجب أن يحتوي عنوان التسمية على نص مفهوم للقارئ.
ضبط عنوان callback الإنتاجي
عنوان callback الإنتاجي لـ AI-School هو:
https://europe-west1-ai-school-pro.cloudfunctions.net/n8nWorkflowCallback
لا تضع هذا الرابط كنص ثابت في كل عقدة callback. اختر في حقل URL لعقدة طلب HTTP التعبير واستخدم:
{{ $('Start workflow').first().json.body.integration.callbackUrl }}
AI-School يزوّد بكل بدء URL إنتاجي صحيح تلقائياً. تستخدم العنوان الثابت أعلاه فقط عند الاختبار للتحقق من أن التعبير يشير إلى AI-School.
الدوال triggerCustomN8nWorkflow وtriggerN8nWorkflow وresumeN8nWorkflow يتم استدعاؤها بواسطة التطبيق نفسه. لا تحتاج لإعداد هذه URLs في n8n.
إرسال أخطاء غير متوقعة
استدعاء فشل عادي يعمل فقط عندما تصل التدفق إلى عقدة HTTP Request المعنية. استخدم أيضًا مسار Error Workflow مركزي لأي أخطاء عقدة غير متوقعة.
إنشاء Error Workflow مركزي
-
أنشئ في n8n تدفق عمل منفصل باسم AI-School - أخطاء لإرسالها.
-
أضف عقدة Error Trigger.
-
ثم أضف عقدة HTTP Request.
-
اضبط Method على POST.
-
ضع في URL هذا عنوان الإنتاج الثابت:
https://europe-west1-ai-school-pro.cloudfunctions.net/n8nWorkflowExecutionFailed -
اختر Authentication: None.
-
شغّل خيار Send Headers وأضف:
Name Value n8n-handihow-nameالقيمة السرية الافتراضية التي تتلقاها من مشرف المنصة Content-Typeapplication/json -
شغّل خيار Send Body، اختر JSON والصق هذه الجسم:
{
"executionId": "{{ $json.execution.id }}",
"workflowId": "{{ $json.workflow.id }}",
"workflowName": "{{ $json.workflow.name }}",
"lastNode": "{{ $json.execution.lastNodeExecuted }}",
"message": "{{ $json.execution.error.message }}"
}
- فعّل Error Workflow.
- افتح إعدادات التدفق العادي واختر في Error Workflow هذه ال Error Workflow الجديدة.
أرسل مباشرة بعد Start workflow على الأقل استدعاء تتابعي واحد مع executionId: "{{ $execution.id }}". وبذلك تعرف التطبيق في أي تنفيذ ينتمي خطأ n8n غير المتوقع.
القيود الهامة
- فقط تحفيزات webhook مدعومة.
- فقط عناوين webhook إنتاجية مدعومة.
- رفض عناوين webhook للاختبار التي تحتوي على
/webhook-test/. - فقط POST مدعوم.
- فقط توثيق رأس عام مدعوم.
- قيمة الرأس تُعامل كسرى في التطبيق.
- رموز الاستدعاء وتواريخ الاستئناف تُعالج فقط على جانب الخادم وليست متاحة مباشرة للمستخدمين.
- يتم تحديد المستأجر من جانب الخادم بناءً على المستخدم المسجل الدخول، وليس من قيمة يرسلها المستعرض.
حل المشاكل
- 404 أو webhook غير مسجل: فعّل التدفق في n8n واستخدم عنوان الإنتاج.
- خطأ المصادقة: تحقق من أن اسم الرأس والقيمة في كلا النظامين متطابقان تماماً.
- البيانات المفقودة: تحقق من أن أسماء الحقول في التطبيق تتطابق مع المفاتيح التي يتوقعها n8n.
- لا يوجد طلب في n8n: تحقق من أن التدفق يبدأ بمحفز webhook ويستخدم POST.
- نافذة التنفيذ تدور: إذا قمت بتفعيل إبلاغ نهاية التدفق، تحقق مما إذا أرسلت n8n أخيراً callback من نوع
completed،failedأوrejected. إذا لم تتوقع تعليقات راجعة، فقم بإيقاف جميع الخيارات الثلاثة في التسجيل. - لا يظهر التقدم: تحقق من أن خيار إبلاغ التقدم الوسيط في التسجيل مُفعل، أو استمرارية كائن
integrationموجودة، وتأكد من أن كل callback يحتوي علىeventIdفريد. - أزرار الموافقة لا تعمل: تحقق من عقدة Wait، وresumeUrl، ومصادقة الرؤوس، والرموز المسموح بها في
choices[].value.