قاعدة المعرفة العامة (Public KB) هي الجزء من قاعدة معرفتك المتاح بدون تسجيل الدخول عبر رابط مباشر أو أداة (widget) أو iframe. يظهر هنا فقط المقالات التي وسمتها صراحةً كعامة.

لماذا:

  • الخدمة الذاتية للعملاء — يجد العملاء الإجابات بأنفسهم، دون التواصل مع الدعم
  • تحسين محركات البحث (SEO) — تُفهرَس المقالات العامة بواسطة Google ومحركات البحث الأخرى
  • العرض التوضيحي — يقرأ العملاء المحتملون التوثيق قبل الشراء
  • الشركاء — الوصول إلى التوثيق التقني دون الحاجة لإنشاء حسابات

#كيف يصبح المقال عامًا

تُفعَّل العمومية عبر إعدادين — واحد على مستوى المقال وآخر على مستوى المؤسسة. وإلى أن يتحقق كلاهما، لن يرى الزوار المجهولون المقال.

مستوى المقال
publish_state = public
المقالات ذات public فقط تصل إلى الوصول المجهول؛ وتبقى internal / draft / inherit مخفية. يمكن وسم مقال كعام فقط في مساحة مؤسسية — وفي المساحات الخاصة والشخصية يكون النشر محظورًا.
مستوى المؤسسة
وضع الوصول = "Public"
في الإعدادات ← المؤسسة ← وضع الوصول. إذا كانت المؤسسة في وضع "Corporate"، فإن العنوان العام مغلق ولا يرى المستخدمون المجهولون شيئًا — حتى المقالات ذات حالة public.

لا يوجد نوع مساحة "عام". المساحات هي فقط Corporate / Private / Personal. لا يصبح المقال مرئيًا بنقله إلى مساحة خاصة، بل عبر علامة publish_state=public (في مساحة مؤسسية) مع تفعيل وضع الوصول العام للمؤسسة.

#حالات publish_state (ADR 0029)

يستخدم LiKE حقل publish_state (وهو يحل محل حقل visibility القديم). أربع حالات:

الحالة مَن يراها ملاحظة
draft المؤلف ومحررو المساحة فقط مسودّة — غير مرئية للفريق وغير مشمولة في البحث
inherit تُورِث مستوى الرؤية من المجموعة/المساحة الأصل ADR 0029
internal جميع أعضاء المساحة المصرَّح لهم مرئية للفريق (القيمة الافتراضية للمقالات الجديدة)
public الجميع، بما في ذلك المستخدمون المجهولون عبر قاعدة المعرفة العامة زر "نشر" في المحرر — فقط في مساحة مؤسسية

في الواجهة، يُعرَض لون الحالة بمؤشر نقطة:

مسودّة — مرئية للمؤلف والمحررين فقط
داخلية — للفريق المصرَّح له
🌐 عامة — وصول مجهول عبر قاعدة المعرفة العامة
تحتوي على تغييرات غير منشورة — تُعرَض النسخة السابقة، والجديدة في المحرر

تظهر الشارات نفسها في قائمة المقالات في إدارة المقالات.


#المساحة الافتراضية __public__

عندما يفتح مستخدم مجهول قاعدة المعرفة العامة عبر رابط مباشر أو أداة، فهو تقنيًا ليس في أي من مساحاتك. بدلًا من ذلك، يستخدم LiKE "مساحة" افتراضية __public__ — قيمة حارسة (sentinel) والتي:

  • لا توجد في قاعدة البيانات كـ ArticleCollection.type='public' حقيقية
  • تشمل جميع المقالات ذات publish_state='public' من المساحات المؤسسية للمؤسسة
  • تُستخدم للتصفية في بحث RAG للمستخدم المجهول
  • تُعرَض في SpaceSwitcher باسم "🌐 المقالات العامة" (إذا كان لدى المستخدم أيضًا مساحات خاصة)

إذا كنت عضوًا مصرَّحًا له، فبدّل إلى __public__ في SpaceSwitcher لترى مجموعة المقالات ذاتها بالضبط التي يراها الزائر المجهول — وهذا مفيد للتحقق من "ماذا نشرت عن طريق الخطأ".


#الإعداد (خطوة بخطوة)

#الخطوة 1 — ضع المقالات في مساحة مؤسسية

يمكنك النشر خارجيًا فقط من مساحة مؤسسية (في المساحات الخاصة والشخصية يكون النشر محظورًا). إذا كانت مقالاتك في مساحة أخرى، فانقلها إلى مساحة مؤسسية: واحدًا تلو الآخر عبر قائمة سياق المقال ← نقل، أو دفعةً واحدة (مربعات الاختيار ← نقل). عند إنشاء مساحة، النوعان المتاحان هما Corporate وPrivate؛ أما "Personal" فمساحة نظامية.

#الخطوة 2 — اجعل المقالات عامة

بدّل المقالات التي تريدها إلى publish_state = public (راجع إدارة المقالات):

  • دفعةً واحدة — حدّد بمربعات الاختيار ← زر الكرة الأرضية (🌐) في شريط الإجراءات ← Public
  • مقال واحد — قائمة "⋮""الرؤية: …" ← Public؛ وفي وضع "الشجرة" — قائمة السياق ← "جعله عامًا"
  • في المحرر — زر "نشر" في الرأس

بعد ذلك، يتحول مؤشر الحالة إلى الأخضر وتظهر شارة 🌐 عامة. إذا احتوى المقال على بيانات شخصية، يُفتَح مربع حوار تأكيد — راجع "فحص البيانات الشخصية قبل النشر" أدناه.

#الخطوة 3 — فعّل وضع المؤسسة العام

الإعدادات ← المؤسسة ← وضع الوصول ← اختر "Public".

  • Public — يرى المستخدمون المجهولون، على العنوان العام، المقالات الموسومة كعامة؛ وتبقى المساحات الخاصة متاحة بالدعوة فقط.
  • Corporate — كل شيء متاح للأعضاء المسجّلين فقط؛ ولا يرى المستخدمون الخارجيون بدون تسجيل الدخول شيئًا، حتى المقالات الموسومة كعامة.

بدون تفعيل وضع "Public"، يكون العنوان العام مغلقًا — هذه الخطوة إلزامية.

#الخطوة 4 — العنوان العام والقنوات

هناك ثلاث طرق لفتح قاعدة المعرفة العامة الجاهزة:

  • البوابة العامة — جذر عنوانك https://<your-slug>.lynkora.pro: بحث وإجابات AI وقراءة المقالات دون تسجيل الدخول. المقال الفردي على /kb/<article-slug>.
  • أداة JS — مضمَّنة في موقعك؛ يُؤخَذ كود الأداة من التكاملات ← القنوات (بطاقة "JS Widget").
  • iframe — تضمين واجهة البحث الكاملة في صفحة.

لم يعد هناك تبويب "Public KB" منفصل في الإعدادات (ADR 0029): تُضبَط العمومية الآن بعلامة المقال + وضع المؤسسة، بدلًا من قائمة مصادر مسموح بها. تُدار الأدوات في التكاملات ← القنوات.


#فحص البيانات الشخصية قبل النشر

عند تحويل مقال إلى عام، يفحصه LiKE تلقائيًا بحثًا عن البيانات الشخصية (PII). إذا عُثر على أي منها، يُوقَف النشر ويظهر مربع حوار «تم اكتشاف بيانات شخصية» — قبل أن يصبح المقال متاحًا للجميع دون تسجيل الدخول.

متى يُشغَّل: فقط عند النشر (التحويل إلى public، الوصول المجهول). لا يعمل مع internal أو draft أو inherit. وينطبق على كل مسارات النشر: زر «نشر» في المحرّر، و«جعله عامًا» في القائمة/الشجرة، وتغييرات الرؤية المجمّعة، ونشر مجموعة/مساحة.

ما الذي يُكتشَف (حتمي، قائم على الأنماط):

  • البريد الإلكتروني
  • الهاتف
  • بطاقة الدفع (المجموع التحققي Luhn)
  • IBAN (متحقَّق منه بمجموع تحققي)
  • عنوان IP
  • تاريخ الميلاد

الفئات الخاصة (الصحة، والقياسات الحيوية، إلخ، GDPR Art. 9) لا تُكتشَف تلقائيًا بعد — يعرض مربع الحوار فقط تنبيهًا بشأن المسؤولية المشدَّدة عند نشرها.

ما يعرضه مربع الحوار:

  • العنوان «تم اكتشاف بيانات شخصية» وقائمة بالأنواع المكتشفة مع الأعداد (مجمّعة عبر جميع المقالات الجاري نشرها).
  • مربع اختيار إقرار إلزامي: تساعد الأداة على اكتشاف الـ PII لكنها لا تضمن الاكتمال؛ وتبقى أنت، بصفتك المتحكّم في البيانات، مسؤولًا عن مشروعية النشر وعن وجود أساس قانوني أو موافقة.
  • زرّا إلغاء ونشر (يُفعَّل زر النشر فقط بعد تحديد مربع الاختيار).

بعد التأكيد: يُنشَر المقال، ويُسجَّل الإقرار في سجل النشاط (pii_public_ack) مع أنواع البيانات المكتشفة — دون تخزين نص الـ PII نفسه (الخصوصية بالتصميم). يرتبط الإقرار بالنسخة الحالية من المقال: إذا حرّرت النص لاحقًا، فستحتاج إلى التأكيد مجددًا.

من يمكنه الإقرار: الأدوار نفسها التي يمكنها النشر — Editor وأعلى في مساحة المقال (Owner وAdmin دائمًا). نشر جميع مقالات مصدر ما دفعةً واحدة مقصور على Owner/Admin.


#أدوات قاعدة المعرفة العامة (dual-auth، ADR 0032)

يدعم LiKE وضعَي مصادقة للأدوات — يُختاران عند إنشاء أداة في التكاملات ← الأدوات:

#الوضع 1 — المسارات المسموح بها (للمواقع العامة)

أداة مضمَّنة في الموقع العام للشركة (صفحة هبوط، صفحات تسويقية، مركز مساعدة). لا حاجة إلى مصادقة — الأداة متاحة لأي زائر.

الحماية من إساءة الاستخدام:

  • قائمة عناوين URL المسموح بها (allowed paths) — حيث يكون هذا الـ api-key صالحًا. على سبيل المثال، https://yoursite.com/* وhttps://docs.yoursite.com/*. تُرفَض الطلبات من نطاقات أخرى (CORS + فحص).
  • نطاق عام شامل (public umbrella scope) — تصل الأداة فقط إلى مساحة __public__ + مجموعات محددة من تلك المساحة، تُعرَّف عند الإنشاء.
  • حدّ المعدل (Rate limit) على الـ api-key — حماية من الروبوتات.

#الوضع 2 — جلسة JWT (لموقع مؤسسي بمصادقة)

أداة مضمَّنة في البوابة الداخلية للشركة، حيث يكون لدى المستخدمين مصادقة بالفعل. تقبل الأداة جلسة JWT وترى تمامًا ما يراه ذلك المستخدم.

حالات الاستخدام:

  • أداة على إنترانت مؤسسي ← يرى كل موظف مساحاته الخاصة
  • التضمين في تطبيق SaaS (على سبيل المثال، في CRM) — يرى المستخدم التوثيق الخاص بدوره

#تعدد الأدوات لكل مستأجر (ADR 0029 Stage 4)

داخل مؤسسة يمكنك إنشاء عدة أدوات بنطاقات مختلفة:

  • واحدة — عامة، للموقع التسويقي (allowed paths)
  • أخرى — مؤسسية، للإنترانت (session JWT)
  • ثالثة — لمجموعة محددة (على سبيل المثال، الأسئلة الشائعة فقط لمركز الدعم)

لكل أداة الـ api-key الخاص بها، ونطاقها، ووضع مصادقتها. راجع التكاملات ← الأدوات وAPI والأداة للتفاصيل.


#ما يراه الزوار المجهولون

العنصر مرئي؟
المقالات ذات publish_state=public في المساحات المؤسسية ✅ نعم
بحث AI عبر تلك المقالات ✅ نعم
كتالوج المجموعات العامة ✅ نعم
رابط مشاركة / تضمين قصير (إن كان مفعّلًا للمقال) ✅ نعم
لافتة "سجّل الدخول للوصول الكامل" (إن كانت الأداة مجهولة) ✅ نعم
مقالات internal وdraft وinherit ❌ لا
المقالات من المساحات الخاصة ❌ لا
سجل الاستعلامات / التوصيات (الشخصية) ❌ لا
لوحة الإدارة، سلة المهملات، السجل، التحليلات ❌ لا

يستخدم البحث المجهول افتراضيًا ملف تعريف ارتباط ببصمة العميل (client-fingerprint) لحدّ المعدل الأساسي، لكنه لا يربط الطلب بحساب مستخدم.


#إخفاء مجموعات فردية

في مساحة عامة، ليس بالضرورة أن تكون جميع المجموعات مرئية للمستخدمين المجهولين. يمكنك إخفاء مجموعات محددة:

  1. قائمة سياق المجموعة ← الخصائص
  2. حقل publish_state للمجموعة:
    • inherit — يُورَث من المساحة (افتراضي)
    • internal — مخفي عن المستخدمين المجهولين، مرئي للفريق
    • public — عام صراحةً (فقط في مساحة مؤسسية، وإلا فمحظور)