انتقل إلى المحتوى الرئيسي

سير عمل n8n

يمكن لـ AI-Corporate تشغيل سير عمل n8n عبر webhook إنتاجي. وهذا مفيد عندما تريد بدء عملية مؤتمتة خارج AI-Corporate، مثل إنشاء مهمة، أو تحديث سجل CRM، أو بدء تدفق إعداد تقرير، أو تمرير بيانات نموذج إلى نظام آخر.

مثال: مقال أخبار على موقع الشركة​

افترض أن المؤسسة أنشأت سير عمل n8n ينشر مقال أخبار على موقع WordPress الخاص بالشركة. في AI-Corporate، كل ما عليك فعله هو إدخال نص قصير، مثل بضع جمل عن حالة عميل أو فعالية أو إنجاز داخلي. بهذا النص تبدأ سير العمل في n8n.

يمكن لسير عمل n8n بعد ذلك مثلاً:

  1. تحويل النص القصير إلى مسودة مرتبة باستخدام عقدة LLM ومطالبة تناسب نبرة المؤسسة.
  2. إنشاء صورة توضيحية مناسبة باستخدام عقدة LLM ثانية، مثلاً بألوان العلامة التجارية وبأسلوب توضيحي مألوف.
  3. تجهيز النص والصورة كمنشور مدونة أو نشرهما على موقع WordPress.

وهكذا يعمل AI-Corporate وn8n معًا: في AI-Corporate يختار المستخدم سير العمل ويدخل المعلومات المطلوبة. بعد ذلك ينفذ n8n الخطوات المؤتمتة ويتأكد من وصول مقال الأخبار بشكل مرتب إلى الموقع.

ماذا تفعل هذه التكاملية؟​

تبدأ سير عمل n8n من نظرة عامة على سير العمل. فقط webhook الإنتاجي وPOST وHeader Auth إلزامية. الحقول والردود القادمة من n8n اختيارية ويمكن إعدادها بشكل مستقل عن بعضها.

  • إذا لم يكن لسير العمل حقول، فسيتم استدعاء webhook مباشرة.
  • إذا كان لسير العمل حقول، فسيُفتح أولًا نموذج. يملأ المستخدم الحقول ثم يبدأ سير العمل بالزر.
  • تُرسل القيم المُدخلة كـ JSON في طلب POST إلى n8n webhook.
  • من دون ردود، يؤكد AI-Corporate فقط أن سير العمل قد بدأ ويستمر في n8n. لا تعرض النافذة مؤشر تحميل ويمكن إغلاقها مباشرة.
  • إذا كان ذلك مفعلًا عند التسجيل، يمكن لسير العمل إرسال خطوات وسيطة أو النهاية إلى AI-Corporate.
  • إذا كانت الموافقة مفعلة عند التسجيل، يمكن للمستخدم اتخاذ قرار مباشرة داخل AI-Corporate. ثم يواصل n8n من الخطوة المنتظرة.

إنشاء سير عمل n8n في AI-Corporate​

يقوم المسؤول بتسجيل سير العمل كالتالي:

  1. انتقل إلى المساعدون.
  2. افتح تبويب مساعدو سير العمل.
  3. انقر في البطاقة بالأعلى على سير عمل جديد واختر سير عمل n8n.
  4. املأ اسم سير العمل وn8n productie-url.
  5. اضبط Header authentication باستخدام اسم رأس وقيمة رأس سرية.
  6. ضمن الردود من n8n، فعّل فقط الأجزاء المبنية فعليًا في هذا سير العمل n8n: التقدم، الموافقة و/أو نهاية سير العمل.
  7. أضف عند الحاجة الحقول التي يجب إرسالها في طلب POST.
  8. احفظ سير العمل.

تكون جميع خيارات الردود الثلاثة متوقفة افتراضيًا. إذا أضفت لاحقًا callbacks أو خطوة موافقة في n8n، فقم أيضًا بتحديث التسجيل في AI-Corporate. وبذلك يعرف الحوار هل يجب أن يعرض فقط تأكيد البدء أم أن عليه انتظار إشارات إضافية.

الحقول​

  • الحقول اختيارية.
  • لكل حقل اسم حقل واحد ونوع.
  • أنواع الحقول المدعومة هي: نص قصير، نص طويل، رقم، نعم/لا، تاريخ، اختيار واحد، واختيارات متعددة.
  • في اختيار واحد واختيارات متعددة تضيف الخيارات المتاحة. يُعرض اختيار واحد كقائمة اختيار مضغوطة؛ أما الاختيارات المتعددة فتظهر كمربعات اختيار. تُرسل القيمة أو القيم المختارة ضمن JSON body.
  • يجب ملء الحقول الإلزامية قبل أن يمكن بدء سير العمل.
  • يصبح اسم الحقل هو المفتاح في JSON body الذي يُرسل إلى n8n.

إنشاء سير عمل متوافق في n8n​

  1. أنشئ سير عمل جديدًا في n8n.
  2. أضف أولًا عقدة Webhook.
  3. سمِّ هذه العقدة بالضبط Start workflow. التعبيرات النموذجية أدناه تستخدم هذا الاسم.
  4. اجعل HTTP Method على POST.
  5. اختر Authentication: Header Auth واستخدم نفس اسم الرأس والقيمة السرية كما في AI-Corporate.
  6. اضبط Respond أو Response Mode على Immediately.
  7. انسخ Production URL إلى الحقل n8n productie-url في AI-Corporate. لا تستخدم test-url مع /webhook-test/.
  8. فعّل سير العمل.

البيانات المستلمة تكون تحت body; أما بيانات التكامل التقنية فتكون تحت body.integration. لا تحذفها في عقدة Edit Fields أو Set أو Code.

مثال على JSON body​

إذا عرّفت حقولًا بالأسماء prompt, klantnaam, doelgroepen وdatum، فسيستقبل n8n مثلًا هذا JSON body. يضيف AI-Corporate كائن integration تلقائيًا.

{
"prompt": "Maak een korte samenvatting van de aanvraag.",
"klantnaam": "Voorbeeldorganisatie",
"doelgroepen": ["medewerkers", "klanten"],
"datum": "2026-09-22",
"integration": {
"runId": "chat-document-id",
"tenant": "default",
"callbackUrl": "https://europe-west1-ai-corporate.cloudfunctions.net/n8nWorkflowCallback",
"callbackToken": "tijdelijk-token-voor-deze-uitvoering"
}
}

يخص callbacktoken تنفيذًا واحدًا فقط. لا تحفظه في السجلات أو الإعدادات الثابتة أو الأنظمة الأخرى.

اختياري: إرسال التقدم والانتهاء​

يمكن لـ AI-Corporate عرض ما يرسله n8n فقط. استخدم هذه callbacks فقط إذا كنت قد فعّلت عند التسجيل تسجيل التقدم الوسيط و/أو الإبلاغ عن نهاية سير العمل.

اضبط كل عقدة callback كما يلي:

  1. اختر Method: POST.

  2. انقر عند URL على Expression والصق:

    {{ $('Start workflow').first().json.body.integration.callbackUrl }}
  3. اختر Authentication: None.

  4. فعّل Send Headers وأضف الرؤوس أدناه.

  5. فعّل Send Body واختر Body Content Type: JSON وSpecify Body: Using JSON.

استخدم هذه الرؤوس:

Authorization: Bearer {{ $('Start workflow').first().json.body.integration.callbackToken }}
Content-Type: application/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."
}
  • استخدم eventId فريدًا لكل حدث ضمن نفس التنفيذ.
  • استخدم step.label هولنديًا واضحًا؛ فهذا النص سيظهر في التطبيق.
  • إذا فعّلت الإبلاغ عن نهاية سير العمل، فأرسل دائمًا في النهاية type: "completed" أو type: "failed" أو type: "rejected".
  • أضف عند completed كائن output مع النتيجة إن لزم.
  • عند failed أرسل رسالة خطأ مفهومة. يتوقف التنفيذ عندها أيضًا في التطبيق.

اختياري: طلب الموافقة داخل التطبيق​

استخدم عقدة n8n Wait مع On Webhook Call عندما لا يجب أن يكمل سير العمل إلا بعد اختيار. أرسل قبل عقدة Wait callback بنوع type: "approval_required":

اضبط عقدة Wait على Resume: On Webhook Call وHTTP Method: POST وAuthentication: Header Auth. اختر نفس اعتماد Header Auth المستخدم في Start workflow. أضف بعد عقدة Wait عقدة Switch وتحقق فيها من {{ $json.body.decision }}.

{
"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" }
]
}
}

يرى المستخدم الخيارات في نافذة التنفيذ. بعد الاختيار تستقبل عقدة Wait من بين أمور أخرى decision. استخدم بعدها مثلًا عقدة Switch لتحديد المسار الصحيح.

لا يجوز أن تحتوي قيمة الخيار إلا على الحروف والأرقام و_ و-. أما التسمية فيمكن أن تكون نصًا عاديًا مقروءًا.

إعداد callback-url الإنتاجي​

callback-url الإنتاجي لـ AI-Corporate هو:

https://europe-west1-ai-corporate.cloudfunctions.net/n8nWorkflowCallback

لا تلصق هذا العنوان كنص ثابت في كل عقدة callback. اختر في حقل URL لعقدة HTTP Request Expression واستخدم:

{{ $('Start workflow').first().json.body.integration.callbackUrl }}

بهذا يزوّد AI-Corporate تلقائيًا في كل بدء عنوان الإنتاج الصحيح. استخدم العنوان الثابت أعلاه للتحقق أثناء الاختبار من أن التعبير يشير إلى AI-Corporate وليس إلى AI-School أو AI-Public.

تستدعي التطبيق نفسه دوال triggerCustomN8nWorkflow وtriggerN8nWorkflow وresumeN8nWorkflow. لا تحتاج إلى إعداد هذه الـ URL's داخل n8n.

معالجة الأخطاء​

أرسل الأخطاء المتوقعة عبر callback من النوع failed. ولأخطاء العقد غير المتوقعة، أنشئ كذلك Error Workflow مركزيًا:

  1. أنشئ سير عمل جديدًا مع عقدة Error Trigger.

  2. أضف بعدها عقدة HTTP Request مع Method: POST.

  3. املأ في URL عنوان الإنتاج الثابت هذا:

    https://europe-west1-ai-corporate.cloudfunctions.net/n8nWorkflowExecutionFailed
  4. اختر Authentication: None وأضف الرأس n8n-handihow-name مع القيمة السرية الافتراضية لمسؤول المنصة.

  5. اختر JSON body والصق:

{
"executionId": "{{ $json.execution.id }}",
"workflowId": "{{ $json.workflow.id }}",
"workflowName": "{{ $json.workflow.name }}",
"lastNode": "{{ $json.execution.lastNodeExecuted }}",
"message": "{{ $json.execution.error.message }}"
}
  1. فعّل Error Workflow.
  2. افتح إعدادات سير العمل العادي وحدد هذا في Error Workflow.

أرسل مباشرة بعد Start workflow على الأقل callback واحدًا مع executionId: "{{ $execution.id }}". عندها فقط يمكن لـ AI-Corporate ربط خطأ غير متوقع بالتنفيذ الصحيح.

قيود مهمة​

  • يتم دعم webhooks فقط.
  • يتم دعم عناوين webhook الإنتاجية فقط.
  • تُرفض test-webhook-urls مع /webhook-test/.
  • يتم دعم POST فقط.
  • يتم دعم generic header authentication فقط.
  • تُعامل قيمة الرأس كسرّ داخل التطبيق.
  • تُعالج callbacktokens وresume-url's على جهة الخادم فقط وليست متاحة مباشرة للمستخدمين.
  • يتم تحديد tenant من جهة الخادم انطلاقًا من المستخدم المسجّل دخوله، وليس من قيمة يرسلها المتصفح.

استكشاف المشكلات​

  • 404 أو webhook غير مسجل: فعّل سير العمل في n8n واستخدم عنوان الإنتاج.
  • خطأ في المصادقة: تحقق من أن اسم الرأس والقيمة متطابقان تمامًا في النظامين.
  • بيانات مفقودة: تحقق من أن أسماء الحقول في التطبيق تطابق المفاتيح التي يتوقعها n8n.
  • لا يوجد request في n8n: تحقق من أن سير العمل يبدأ بـ webhook trigger ويستخدم POST.
  • نافذة التنفيذ تستمر بالدوران: إذا كنت قد فعّلت الإبلاغ عن نهاية سير العمل، فتحقق من أن n8n يرسل callback أخيرًا من نوع completed أو failed أو rejected. إذا كنت لا تتوقع أي ردود، فقم بإيقاف الخيارات الثلاثة كلها عند التسجيل.
  • لا يظهر أي تقدم: تحقق من أن تسجيل التقدم الوسيط مفعّل عند التسجيل، وأن كائن integration محفوظ، وأن لكل callback قيمة eventId فريدة.
  • أزرار الموافقة لا تعمل: تحقق من عقدة Wait، وresumeUrl، ومصادقة الرأس، والأحرف المسموح بها في choices[].value.