التنبيهات
يحتفظ Libre WebUI بصندوق تنبيهات دائم خاص بكل مستخدم، كي تصل أنشطة الفريق — الإشارات والرسائل المباشرة والمشاركات وأعطال الأتمتة وتذكيرات التقويم — إلى الأشخاص حتى عند إغلاق الصفحة المعنية.
صندوق الوارد
التنبيهات صفوف في قاعدة البيانات أولًا: عنوانها ونصها مشفّران عند التخزين، ومحدودة عند 500 لكل مستخدم (تُحذف الأقدم)، ويمكن إزالة تكرارها بمفتاح مصدر اختياري كي تنهار عملية النشر المتكررة إلى إدخال واحد بدل إغراق الجرس. تتيح واجهة REST عرضها وحساب غير المقروء وتعليمها كمقروءة (واحدة أو كلها) وحذفها.
يمر التسليم المباشر عبر تدفق الأحداث الدائم لكل مستخدم notify:<userId> على
GET /api/notifications/events (SSE). تأتي هوية التدفق من الجلسة الموثقة، لا من
مدخلات العميل أبدًا، ويظل صندوق SQL مصدر الحقيقة: يُستعاد الحدث الفائت بقراءة
القائمة لا بإعادة تشغيل التدفق.
ما ينشئ التنبيهات
| النوع | وقت الإنشاء |
|---|---|
channel-dm | يرسل إليك شخص رسالة مباشرة |
channel-mention | يشير إليك شخص بـ@mentions في قناة، أو يرد على رسالتك |
channel-invite | تُضاف إلى قناة |
share | يشارك شخص موردًا معك |
automation-failed | تفشل إحدى عملياتك المؤتمتة (ما لم توقف التنبيه) |
calendar-reminder | يبلغ حدث ذو إزاحة تذكير موعد تذكيره |
work-run-finished | يكمل أحد وكلاء Work الذين وظفتهم تشغيلًا |
work-run-attention | يتوقف وكيل موظف لطلب إدخال أو يواجه خطأ |
work-takeover | يطلب منك وكيل Work تولي التحكم في شاشته |
work-approval | ينتظر تشغيل Work موافقتك على إجراء ذي أثر |
system | إعلانات على مستوى المثيل |
لا تُنشر التنبيهات إلا للمستخدم المتأثر؛ ولا ينتج شيء عن الإشارة إلى اسم مستخدم ليس عضوًا في القناة.
webhooks الصادرة
يستطيع المسؤولون تسجيل وجهات webhook تتلقى أحداث الفريق.
- حماية الخروج. تخضع الوجهات لسياسة الوجهة نفسها المستخدمة لخوادم الأدوات:
عنوان URL دقيق، بلا عمليات إعادة توجيه، ولا عناوين خاصة أو محلية للرابط إلا إذا
أضاف المسؤول مضيفًا صراحة إلى
TOOLS_PRIVATE_NETWORK_ALLOWLIST. تُحل أسماء المضيفين وتُراجع مع كل تسليم. - التوقيع. عند إعداد سر، يحمل كل تسليم
X-Libre-Signature: sha256=<hmac>محسوبًا على الجسم الدقيق. - الحجب. يتضمن الغلاف نوع الحدث ونوع التنبيه والعنوان والمعرّفات والطوابع الزمنية. لا تغادر أجسام التنبيهات أو محتوى الرسائل أو المطالبات أو المستندات المثيل أبدًا.
- الدوام. تعمل عمليات التسليم كمهام دائمة بمحاولات محدودة؛ تؤدي استجابة 5xx من المستلم إلى إعادة المحاولة، بينما تُعد 4xx حكم المستلم وتنهي العملية.
- النطاق. تشترك كل وجهة في أنواع تنبيهات محددة (أو
*).
الإشعارات الفورية للمتصفح
تسجّل الإعدادات ← التنبيهات هذا المتصفح مع Web Push، فتصل الإشارات والمشاركات والتذكيرات والعمل المكتمل إلى الجهاز حتى عند إغلاق علامة التبويب. التنفيذ قياسي ومستقل:
- VAPID (RFC 8292). يوقّع الخادم كل تسليم بزوج مفاتيح ES256 يُنشأ مرة واحدة
ويُخزّن مشفّرًا، أو يُثبّت عبر
VAPID_PUBLIC_KEY/VAPID_PRIVATE_KEY(VAPID_SUBJECTيحدد مطالبة جهة الاتصال). لا تشارك مكتبة دفع خارجية أو حساب خدمة بخلاف نقطة دفع موفّر المتصفح. - حمولات مشفّرة (RFC 8291). تُشفّر كل رسالة إلى مفاتيح الجهاز نفسه باستخدام aes128gcm قبل مغادرة المثيل؛ وتنقل خدمة الدفع نصًا مشفّرًا لا تستطيع قراءته.
- لكل جهاز ومرتبطة بالجلسة. ينتمي الاشتراك إلى المتصفح الذي أنشأه وإلى جلسة المصادقة فيه: يؤدي تسجيل الخروج من الجلسة (أو «تسجيل خروج الجلسات الأخرى») إلى إزالة تسجيل الدفع أيضًا. تُخزّن نقاط النهاية مشفّرة مع رمز بحث ذي مفتاح، ويجب أن تكون وجهات HTTPS عامة، وفق قواعد الخروج نفسها المستخدمة للـwebhooks.
- الدوام. تعمل تسليمات الدفع كمهام دائمة بمحاولات محدودة؛ وإذا أفادت خدمة الدفع بزوال الاشتراك (404/410)، يُحذف.
- تحمل الحمولة عنوان التنبيه ونصه الاختياري ونوعه ورابط الوجهة، بالحدود نفسها للحجب المطبقة على صندوق الوارد.
يتطلب الدفع تطبيق الإنتاج (فلا يُسجّل service worker إلا فيه) وأصلًا آمنًا. يقدّم service worker نفسه غلاف عدم الاتصال وقابلية التثبيت: يجعل بيان التطبيق Libre WebUI قابلًا للتثبيت، وتعود عمليات التنقل إلى الغلاف المخزّن عند انقطاع الاتصال، وتُخزّن أصول البناء ذات التجزئة بصورة ثابتة. ولا تُخزّن حركة API مؤقتًا أبدًا.
القيود
- لم تُنفذ بعد تفضيلات المستخدم لكل نوع؛ تحترم عمليات الأتمتة إعداد التنبيه الخاص بها، وتوقف مغادرة القناة تنبيهاتها.