هل يوجد طريقة لإضافة وصف في سير العمل باستخدام واجهة برمجة التطبيقات n8n

وصف المشكلة/الخطأ/السؤال

أريد كتابة وصف للمسار العملي باستخدام واجهة برمجة التطبيقات n8n، لكنني لا أعرف كيفية القيام بذلك، حاولت كتابة متغير وصف بنفسي في كائن meta في المسار العملي، لكن الأمر ببساطة لم ينجح. إذن سؤالي هو: كيف يمكنني كتابة وصفي باستخدام واجهة برمجة التطبيقات n8n؟

شكراً مقدماً لمن يجيب، أي مساعدة مقدرة.

ما رسالة الخطأ (إن وجدت)؟

يرجى مشاركة المسار العملي الخاص بك

(حدد العقد الموجودة على لوحتك واستخدم اختصارات لوحة المفاتيح CMD+C/CTRL+C و CMD+V/CTRL+V لنسخ ولصق المسار العملي.)

شارك المخرجات التي يعيدها العقدة الأخيرة

معلومات حول إعداد n8n الخاص بك

  • إصدار n8n:
  • قاعدة البيانات (الافتراضية: SQLite):
  • إعداد n8n EXECUTIONS_PROCESS (الافتراضي: own, main):
  • تشغيل n8n عبر (Docker, npm, n8n cloud, تطبيق سطح المكتب):
  • نظام التشغيل:

مرحبا @SE-automations

السبب في فشل محاولتك السابقة هو أن الوصف يجب أن يكون في المستوى الأعلى جداً من بيانات طلبك. كنت تحاول وضعه داخل كائن “meta”، لكن n8n لا يبحث عنه هناك؛ فهو يتوقع أن يكون الوصف حقلاً منفصلاً خاصاً به في نص الرسالة الرئيسي.

عليك أيضاً التأكد من أن برنامج n8n الخاص بك محدّث. في الإصدارات الأقدم، كان هناك خطأ كان يمنع الـ API فعلياً من قبول الأوصاف على الإطلاق، مما كان يسبب في إرسال النظام رسالة خطأ. تم إصلاح هذا في الإصدار 2.16.0، لذا طالما كنت تستخدم إصدارة أحدث، سوف ينجح.

لإصلاح هذا، ما عليك سوى إرسال طلب “PATCH” إلى نقطة نهاية سير العمل وتضمين الوصف كخاصية رئيسية. بدلاً من إدراجه داخل كائن، فقط اكتب "description": "نصك هنا" في جذر كود JSON الخاص بك، وسيقوم النظام بتحديث وصف سير العمل بشكل صحيح.

فيما يلي مثال:

curl -X PATCH "https://your-n8n-instance.com/api/v1/workflows/YOUR_WORKFLOW_ID" \
  -H "X-N8N-API-KEY: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{"description": "This is my updated workflow description"}'

مرحباً @SE-automations

لتنفيذ هذا مباشرةً داخل سير عمل n8n (بدون Postman/cURL)، يمكنك استخدام عقدة “n8n” المدمجة لاستدعاء واجهة برمجة تطبيقات n8n:

  1. أضف عقدة n8n

    • في المحرر، انقر على زر “+” الكبير لإضافة عقدة جديدة.

    • في مربع البحث، اكتب n8n.

    • حدد العقدة التي تُسمى ببساطة “n8n” (الفئة: Core Nodes).

  2. اختر الإجراء الصحيح

    • في قائمة Resource / Action المنسدلة، اختر “Workflow” ثم “Update a workflow” (أو “Update workflow”، حسب إصدارك).

    • هذا يخبر العقدة أنك تريد استدعاء نقطة نهاية /workflows من واجهة برمجة تطبيقات n8n.

  3. اختر سير العمل الذي تريد تحديثه

    • في حقل Workflow ID، إما أن تحدد سير العمل الخاص بك من القائمة المنسدلة أو تلصق المعرّف يدويّاً.

    • إذا كنت لا تعرف المعرّف حتى الآن، يمكنك أولاً استخدام نفس عقدة n8n مع إجراء “Get a workflow” لجلبه.

  4. قدّم كائن سير العمل مع الوصف

    • غيّر “Workflow Object” (أو “Body”) إلى وضع JSON.

    • الصق JSON سير العمل الحالي وأضف حقل description في المستوى الأعلى، على سبيل المثال:

      json
      

      {
      "name": "My workflow",
      "nodes": [...],
      "connections": {...},
      "settings": {},
      "description": "This is my updated workflow description"
      }

    • تأكد من أن description ليس بداخل meta، يجب أن يبقى في المستوى الجذر للكائن.

  5. نفّذ العقدة

    • شغّل العقدة.

    • إذا كان JSON يطابق مخطط سير العمل وكان إصدار n8n لديك حديثاً بما يكفي لدعم description في واجهة البرمجة، فسيتم تحديث وصف سير العمل في واجهة المستخدم.

@kjooleng، أريد أن أفعلها داخل عقدة n8n نفسها لأنني أبني أتمتة يجب أن تحدّث وصف سير العمل الآخر في n8n، على أي حال شكراً لتقديمك الحل. :smiley:

طلب غير صحيح - يرجى التحقق من معاملات الطلب

request/body/settings لا يجب أن تحتوي على خصائص إضافية

أنا أتلقى هذا الخطأ داخل عقدة n8n إذا حاولت حلك، ربما لم أفهمه بشكل صحيح؟ أم أنني أخطأت في مكان ما؟

رسالة الخطأ
Bad request - please check your parameters
request/body/settings must NOT have additional properties
تعني أنك تُرسل في جسم طلبك، وتحديداً داخل كائن settings في سير العمل، مفتاحاً واحداً أو أكثر غير مسموح به بواسطة مخطط API الخاص بـ n8n.

وفقاً لتوثيق API، يقبل settings مجموعة محددة فقط من الحقول. يبدو مثال مختصر كما يلي:

"settings": {
"saveExecutionProgress": true,
"saveManualExecutions": false,
"saveDataErrorExecution": "all",
"saveDataSuccessExecution": "all",
"executionTimeout": 3600,
"errorWorkflow": "VzqKEW0ShTXA5vPj",
"timezone": "America/New_York",
"executionOrder": "v1",
"callerPolicy": "workflowsFromSameOwner",
"callerIds": "14, 18, 23",
"timeSavedPerExecution": 5,
"redactionPolicy": "none",
"availableInMCP": false,
"customTelemetryTags": [
{ "key": "env", "value": "prod" }
]
}

إذا كان كائن settings الخاص بك يحتوي على أي مفاتيح إضافية أو مخصصة (على سبيل المثال myCustomSetting، أو حقول تمت إضافتها بواسطة إصدارات أقدم / بيانات واجهة المستخدم وليست جزءاً من المخطط الحالي)، ستستجيب API بالضبط:

request/body/settings must NOT have additional properties

كيفية إصلاحه:

  1. تحقق من JSON الذي تُرسله (سواء من خلال عقدة n8n، أو عقدة HTTP Request، أو عميل خارجي).

  2. داخل "settings": { ... }، احذف أي مفاتيح غير موجودة في توثيق API.

  3. أرسل الطلب مرة أخرى مع كائن settings “نظيف”.

إذا كنت تأخذ JSON من GET /workflows/{id} ثم تستخدمه في PUT/التحديث، تأكد من أن:

  • على مستوى الجذر، احتفظ فقط بالحقول الصالحة مثل name و nodes و connections و settings و staticData و tags و description، وما إلى ذلك.

  • داخل settings، احتفظ فقط بالحقول المعرّفة في مخطط API الحالي، وإلا ستستمر في مواجهة خطأ “must NOT have additional properties”.

أنت قريب جداً، بمجرد إزالة تلك المفاتيح غير المدعومة من settings، يجب أن يبدأ الطلب نفسه في العمل كما هو متوقع. إذا كنت تريد لصق JSON الحالي لديك، يسعدني أن أشير إلى الخصائص التي تسبب المشكلة بالضبط.

لا، لم أرسل أي شيء مخصص في حقل الإعدادات الخاص بـ JSON، كما قلت، لقد قمت فقط بتعيين حقل الوصف الخاص بـ JSON على مستوى الجذر، هل أنا أفتقد شيئاً ما، أم أنني لا أفعل ذلك بشكل صحيح؟

هل يمكنك إرسال JSON الخاص بعقدة الخطأ في n8n؟ يمكنني أن أرى المشكلة بوضوح.

Sure, here you go,

Let try with this:

لا، الوصف لا يزال فارغًا، لم يتم تحديثه، أنا أستخدم أحدث إصدار من n8n، ما الذي أفعله بشكل خاطئ؟ هل يدعم n8n تحرير الوصف من خلال العقدة؟

@SE-automations

جرّب هذا

يتعين عليك تكوين عقدة «Set Parameters» بـ workflowId و apiKey و baseUrl الخاصة بك.

طلب غير صحيح - يرجى التحقق من معاملات البحث

request/body/settings يجب ألا يحتوي على خصائص إضافية

هذا هو الخطأ في آخر عقدة طلب http، هل أفعل شيئاً خاطئاً؟

@SE-automations

لقد أجريت تعديلات على آخر عقدتين. إنها تعمل الآن

الوصف ليس جزءاً من meta — بل هو حقل خاص به في جذر كائن سير العمل، يقف جنباً إلى جنب مع name وnodes وconnections وsettings. إذاً: GET سير العمل من /api/v1/workflows/{id}، أضف “description”: “نصك” على المستوى الأعلى (وليس داخل meta، وليس داخل settings)، ثم أرسل الكائن بأكمله مرة أخرى باستخدام PUT إلى نفس الـ Endpoint.

هناك شيئان أربكاني عندما فعلت هذا: الـ API العام صارم ويريد كائن سير العمل الكامل في المقابل، لذلك قد يفشل PATCH مع { “description”: “…” } فقط في التحقق من صحة المخطط — GET → أضف الحقل → PUT الشيء بأكمله. وإذا كانت نقطة النهاية /api/v1 العامة لا تزال لن تقبله، فإن نقطة النهاية الداخلية التي يستخدمها المحرر نفسه (/rest/workflows/{id}) تقبل الوصف بدون تذمر. يجب أن يؤدي ذلك إلى حفظه.

الوصف

الأوصاف الواضحة تساعد المستخدمين الآخرين وعملاء MCP على فهم الغرض من سير العمل الخاص بك

الوصف لا يزال فارغاً، لكن سير العمل الذي أعطيته لي تم تنفيذه بدون أي خطأ.

شكراً على حلك، حاولت تطبيقه، أعتقد أنك كنت تقصد سير العمل الذي قدمه @kjooleng، أنا آسف جداً، لكنني لم أفهمه، حاولت سير عمل @kjooleng وتم تنفيذه بنجاح لكنه لم يحدّث وصف سير العمل، هل كنت تقصد حلاً آخر أم أنك اقترحت تغييرات على سير العمل؟

تحتاج إلى فتح سير العمل بشكل جديد من لوحة التحكم.
لن يظهر إذا كان سير العمل مفتوحًا حاليًا

نعم، نجح الحل! شكراً @kjooeng على الحل، وشكراً لجميع الآخرين الذين حاولوا حل المشكلة!