N8n وsimplex.chat

مرحبا،

أستخدم نسخة ذاتية التوسيط من N8n تحت #yunohost.

تعمل بشكل جيد جداً بدون مشاكل. باستثناء عقد SimpleX التي قمت بتثبيتها من الحزمة n8n-nodes-simplexity.

قمت بتثبيت simplex-chat-cli على الخادم، وأستطيع التبادل بشكل جيد عبر واجهة سطر الأوامر مع حساب آخر على هاتفي الذكي.

لكن لتكوين حساب simplex للخادم في عقدة N8n، إنها قصة أخرى، سواء بالنسبة لجزء المشغّل أو جزء إرسال الرسالة، لا أرى كيفية تكوين العنوان.

إذا كان لديك شخص ما استخدم هذه العقد من قبل، فسأكون سعيداً بالحصول على يد العون.

شكراً مقدماً.

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

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

مرحباً @gchilloux، بينما تنتظر الرد، إليك بعض الأشياء التي قد تساعدك:

الموارد المقترحة

تم مطابقتها تلقائياً مع سؤالك.

المستندات:

المنتدى:

@rbreen، @jcuypers - لقد ساعدتم في مشاكل مماثلة من قبل، هل يمكنكم إلقاء نظرة؟

اقتراح تلقائي من روبوت المجتمع في n8n. إنه مشروع تجريبي - يرجى مشاركة ملاحظاتك هنا.

مرحباً @gchilloux

بيانات الاعتماد لا تطلب عنوان SimpleX، بل تطلب مكان الوصول إلى واجهة سطر الأوامر (CLI)، وهذا هو الجزء المفقود على خادمك. يتصل العقدة بـ simplex-chat عبر WebSocket، لذا يجب بدء واجهة سطر الأوامر كخادم وليس كدردشة تفاعلية تكتب فيها:

simplex-chat -p 5225

بعد ذلك في بيانات اعتماد SimpleXity، عيّن Host إلى localhost، وPort إلى 5225، واترك Bot Address فارغاً، حيث ستنشئ العقدة واحداً عند أول اتصال. حافظ على هذه العملية قيد التشغيل تحت systemd أو tmux، لأن المشغّل ينطلق فقط أثناء تشغيلها، ولاحظ أنها تستخدم نفس الملف الشخصي الذي اختبرته، لذا تنقل جهات اتصالك الحالية.

للإرسال، تريد عقدة Action معرّف جهة الاتصال الرقمي بدلاً من عنوان SimpleX. أسهل طريقة للحصول عليه هي إرسال رسالة إلى الروبوت من هاتفك مرة واحدة، واتركه ينطلق المشغّل، واقرأ contactId من إخراجه، ثم استخدمه في عقدة الإرسال.

مرحباً @gchilloux أهلاً وسهلاً!
هذا هو الإعداد الصحيح. الجزء الذي يتركه مفتوحاً هو العنوان نفسه: إنه رابط جهة الاتصال SimpleX للبوت ويوجد في ملف تعريف CLI، وليس في n8n. اكتب /show_address في CLI للحصول عليه، أو اكتب /address مرة واحدة إذا كان يقول إنه ليس لديك أي واحد، وشارك هذا الرابط مع أي هاتف يجب أن يصل إلى البوت. المشغل ينشئ عنواناً عند التفعيل عندما لا يكون للملف الشخصي أي واحد، لكنه يكتبه فقط في سجل n8n، ويفعّل القبول التلقائي بحيث تتصل جهات الاتصال الجديدة دون استخدام /accept يدوي. هاتفك الخاص هو بالفعل جهة اتصال لهذا الملف الشخصي من اختبار CLI الخاص بك، لذلك لا يحتاج إلى رابط، رسالة واحدة منه تفعّل المشغل برقم معرّفه.

مرحبا @Lopez و @Anshul_Namdev ، لقد تمكنت من جعل جزء إرسال الرسالة يعمل بشكل صحيح، العقدة تعمل بشكل صحيح.

لكن جزء المُشغِّل قصة أخرى، إنه لا يعمل. هل حاول أحد ما بنجاح جعله يعمل.

مرحبا @gchilloux

هناك نقطتان من كود المشغل. ليس لديه دالة مشغل يدوية، فقط trigger() طويل الأجل، لذا ستدور خطوة التنفيذ إلى الأبد ولن تعرض شيئاً. يعمل فقط عندما يكون سير العمل نشطاً، وتتحقق من قائمة التنفيذات بدلاً من لوحة العمل. ثم المحتمل أن يكون هناك عائق: عقدة الإرسال تفتح عميل ChatClient خاص بها لنفس WebSocket ولا تغلقه أبداً، لذا يتنافس مشغل نشط وعقدة إرسال على مقبس CLI الواحد، وعندما ينقطع حلقة المشغل، يذهب الخطأ فقط إلى console.error.

  1. فعّل سير العمل وتحقق من سجلات n8n الخاصة بك عن Connecting to SimpleXity at localhost:5225. عدم وجود سطر يعني أن المشغل لم يبدأ أبداً، وError in message processing loop يعني أنه بدأ وانقطع.
  2. اختبر المشغل وحده، في سير عمل بدون عقدة إرسال.
  3. أرسل رسالة مباشرة من هاتفك، الرسائل الجماعية يتم تخطيها بالتصميم.
  4. أعد تشغيل CLI بين الاختبارات حتى لا يبقى أي مقبس نصف ميت مرتبطاً.

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

بناءً على سؤالك، تقول السجلات العامة أنه لم يفعلها أحد. المشكلة 2 في المستودع هي شخص يسأل بالضبط عن كيفية استقبال الرسائل، مفتوحة وبدون إجابة منذ ديسمبر، ولم تكن هناك إصدارة جديدة منذ 0.2.0 في أغسطس 2025.
لا يوجد إعادة اتصال ولا إنهاء اتصال في مصدر الحزمة، لذا لا شيء تقوم بتكوينه من جانب n8n يغيره. افتح المشكلة مع سطور السجل الخاصة بك واعتبر المشغل محظوراً في المتابع.
للرسائل الواردة في الوقت الراهن، اعكس الأمر. قم بتشغيل نص برمجي صغير كوحدة systemd يحتفظ بـ WebSocket بـ CLI ويرسل كل رسالة إلى عقدة Webhook في n8n. ثم تجلس منطق إعادة الاتصال في شيء تتحكم فيه، وعقدة Webhook هي أموثق مشغل لديه n8n.

هذا منطقي. إذا كان المُشغِّل نفسه لا يتعامل مع إعادة الاتصال أو الحفاظ على استقرار اتصال websocket، فإن نقل معالجة الرسائل الواردة إلى خدمة خارجية صغيرة + webhook من n8n يبدو أنه الحل العملي الأكثر فعالية في الوقت الحالي.

شكراً على إجاباتك، يجب أن أجد الوقت لاختبار webhooks. لم أحاول القيام بذلك من قبل…