Skip to main content
Nextcloud Talk هو plugin قناة قابل للتنزيل (@openclaw/nextcloud-talk) يربط OpenClaw بمثيل Nextcloud مستضاف ذاتيًا عبر روبوت Webhook في Talk. تُدعم الرسائل المباشرة والغرف والتفاعلات ورسائل Markdown؛ وتُرسل الوسائط على هيئة عناوين URL.

التثبيت

استخدم محدد الحزمة المجرّد لمتابعة وسم الإصدار الرسمي الحالي. ثبّت إصدارًا محددًا بدقة فقط عندما تحتاج إلى تثبيت قابل لإعادة الإنتاج. من نسخة محلية من المستودع (مسارات عمل التطوير):
أعد تشغيل Gateway بعد التثبيت. التفاصيل: Plugins

الإعداد السريع (للمبتدئين)

  1. ثبّت plugin (أعلاه).
  2. أنشئ روبوتًا على خادم Nextcloud:
    احتفظ بـ --feature response: من دونه، تفشل الردود الصادرة بالخطأ 401. أصلح روبوتًا موجودًا باستخدام ./occ talk:bot:state --feature webhook --feature response --feature reaction <botId> 1.
  3. فعّل الروبوت في إعدادات الغرفة المستهدفة.
  4. اضبط OpenClaw:
    • الإعداد: channels.nextcloud-talk.baseUrl + channels.nextcloud-talk.botSecret
    • أو متغيرات البيئة: NEXTCLOUD_TALK_BOT_SECRET (للحساب الافتراضي فقط)
    إعداد CLI (يُعدّ --url/--token اسمين بديلين للحقول الصريحة؛ ويعمل nc-talk وnc كاسمين بديلين للقناة):
    الحقول الصريحة المكافئة:
    سر مخزّن في ملف:
  5. أعد تشغيل Gateway (أو أكمل الإعداد).
الحد الأدنى من الإعداد:

ملاحظات

  • لا يمكن للروبوتات بدء رسائل مباشرة. يجب أن يراسل المستخدم الروبوت أولًا.
  • يجب أن يكون عنوان URL الخاص بـ Webhook قابلًا للوصول من خادم Nextcloud؛ اضبط webhookPublicUrl عندما يكون Gateway خلف وكيل. تُوقّع طلبات Webhook باستخدام HMAC-SHA256 وسر الروبوت؛ وتُرفض التوقيعات غير الصالحة ويُطبّق عليها حد لمعدل الطلبات.
  • لا تدعم API الروبوت رفع الوسائط؛ وتُلحق الوسائط الصادرة كسطر Attachment: <url>.
  • لا تميّز حمولة Webhook بين الرسائل المباشرة والغرف؛ اضبط apiUser + apiPassword لتمكين عمليات البحث عن نوع الغرفة (تُخزّن مؤقتًا لنحو 5 دقائق). من دونهما، تُعامل كل محادثة على أنها غرفة.
  • تمر الطلبات الصادرة عبر أداة الحماية من SSRF. بالنسبة إلى مضيف Nextcloud على شبكة خاصة/داخلية موثوقة، اشترك صراحةً باستخدام channels.nextcloud-talk.network.dangerouslyAllowPrivateNetwork: true.
  • عند ضبط apiUser/apiPassword وwebhookPublicUrl، يفحص openclaw channels status الروبوت ويحذّر عند غياب ميزة response.

التحكم في الوصول (الرسائل المباشرة)

  • الافتراضي: channels.nextcloud-talk.dmPolicy = "pairing". يحصل المرسلون غير المعروفين على رمز إقران.
  • الموافقة عبر:
    • openclaw pairing list nextcloud-talk
    • openclaw pairing approve nextcloud-talk <CODE>
  • الرسائل المباشرة العامة: channels.nextcloud-talk.dmPolicy="open" مع channels.nextcloud-talk.allowFrom=["*"].
  • يطابق allowFrom معرّفات مستخدمي Nextcloud فقط (بأحرف صغيرة)؛ وتُتجاهل أسماء العرض.

الغرف (المجموعات)

  • الافتراضي: channels.nextcloud-talk.groupPolicy = "allowlist" (يتطلب الإشارة).
  • اسمح بالغرف عبر قائمة السماح channels.nextcloud-talk.rooms، والمفهرسة برمز الغرفة؛ ويضبط "*" قيمة افتراضية عامة:
  • المفاتيح الخاصة بكل غرفة: requireMention (الافتراضي true)، وenabled (تعطّل القيمة false الغرفة)، وallowFrom (قائمة السماح بالمرسلين لكل غرفة)، وtools (تجاوزات السماح بالأدوات/منعها)، وskills (تقييد Skills المحمّلة)، وsystemPrompt.
  • لعدم السماح بأي غرف، أبقِ قائمة السماح فارغة أو اضبط channels.nextcloud-talk.groupPolicy="disabled".

الإمكانات

مرجع الإعداد (Nextcloud Talk)

الإعداد الكامل: الإعداد خيارات المزوّد:
  • channels.nextcloud-talk.enabled: تمكين/تعطيل بدء تشغيل القناة.
  • channels.nextcloud-talk.baseUrl: عنوان URL لمثيل Nextcloud.
  • channels.nextcloud-talk.botSecret: السر المشترك للروبوت (سلسلة نصية أو مرجع سر).
  • channels.nextcloud-talk.botSecretFile: مسار سر في ملف عادي. تُرفض الروابط الرمزية.
  • channels.nextcloud-talk.apiUser: مستخدم API لعمليات البحث عن الغرف (اكتشاف الرسائل المباشرة) وفحص الحالة.
  • channels.nextcloud-talk.apiPassword: كلمة مرور API/التطبيق لعمليات البحث عن الغرف.
  • channels.nextcloud-talk.apiPasswordFile: مسار ملف كلمة مرور API.
  • channels.nextcloud-talk.webhookPort: منفذ مستمع Webhook (الافتراضي: 8788).
  • channels.nextcloud-talk.webhookHost: مضيف Webhook (الافتراضي: 0.0.0.0).
  • channels.nextcloud-talk.webhookPath: مسار Webhook (الافتراضي: /nextcloud-talk-webhook).
  • channels.nextcloud-talk.webhookPublicUrl: عنوان URL لـ Webhook يمكن الوصول إليه خارجيًا.
  • channels.nextcloud-talk.dmPolicy: pairing | allowlist | open | disabled (الافتراضي: الإقران). يتطلب open ضبط allowFrom=["*"].
  • channels.nextcloud-talk.allowFrom: قائمة السماح بالرسائل المباشرة (معرّفات المستخدمين).
  • channels.nextcloud-talk.groupPolicy: allowlist | open | disabled (الافتراضي: قائمة السماح).
  • channels.nextcloud-talk.groupAllowFrom: قائمة السماح بمرسلي الغرف (معرّفات المستخدمين)؛ وتعود إلى allowFrom عند عدم ضبطها.
  • channels.nextcloud-talk.rooms: إعدادات كل غرفة وقائمة السماح (راجع أعلاه).
  • يمكن الإشارة إلى مجموعات وصول المرسلين الثابتة من allowFrom وgroupAllowFrom باستخدام accessGroup:<name>.
  • channels.nextcloud-talk.historyLimit: حد سجل المجموعة (تعطّله القيمة 0).
  • channels.nextcloud-talk.dmHistoryLimit: حد سجل الرسائل المباشرة (تعطّله القيمة 0).
  • channels.nextcloud-talk.dms: تجاوزات لكل رسالة مباشرة مفهرسة بمعرّف المستخدم (historyLimit).
  • channels.nextcloud-talk.textChunkLimit: حجم مقطع النص الصادر بالأحرف (الافتراضي: 4000).
  • channels.nextcloud-talk.streaming.chunkMode: length (الافتراضي) أو newline للتقسيم عند الأسطر الفارغة (حدود الفقرات) قبل التقسيم حسب الطول.
  • channels.nextcloud-talk.streaming.block.enabled: تمكين أو تعطيل البث الكتلي لهذه القناة.
  • channels.nextcloud-talk.streaming.block.coalesce: ضبط دمج البث الكتلي.
  • channels.nextcloud-talk.responsePrefix: بادئة الرد الصادر.
  • channels.nextcloud-talk.markdown.tables: وضع عرض جداول Markdown (off | bullets | code | block).
  • channels.nextcloud-talk.mediaMaxMb: الحد الأقصى للوسائط الواردة (MB).
  • channels.nextcloud-talk.network.dangerouslyAllowPrivateNetwork: السماح لمضيفي Nextcloud الخاصين/الداخليين بتجاوز أداة الحماية من SSRF.
  • channels.nextcloud-talk.accounts.<id>: تجاوزات لكل حساب (المفاتيح نفسها)؛ ويختار defaultAccount الحساب الافتراضي. تنطبق متغيرات البيئة NEXTCLOUD_TALK_BOT_SECRET / NEXTCLOUD_TALK_API_PASSWORD على الحساب الافتراضي فقط.

ذو صلة