إشعارات البريد الإلكتروني والإشعارات الفورية
يرسل Antimatter رسائل بريد إلكتروني للدعوات، وإعادة تعيين كلمات المرور، والتحقق، والرسائل الفائتة، بالإضافة إلى إشعارات فورية إلى تطبيق الهاتف المحمول عبر وكيل إرسال. لا يعمل أي منهما حتى يتم إعداده.
البريد الإلكتروني الصادر (SMTP)
يرسل Antimatter رسائل بريد إلكتروني عبر خادم SMTP توفره أنت: إما خادم بريد مؤسستك، أو خدمة بريد إلكتروني معاملة. بدونه، لا يمكن للأشخاص إعادة تعيين كلمة مرور منسية، ولا تصل دعوات البريد الإلكتروني والتحقق، ولا يتلقى أي شخص إشعارات بريد إلكتروني عن الرسائل الفائتة.
قم بإعداده في وحدة التحكم بالنظام › البيئة › SMTP، أو باستخدام متغيرات:
| الإعداد | المفتاح والمتغير | الافتراضي |
|---|---|---|
| خادم SMTP | EmailSettings.SMTPServer, AM_EMAILSETTINGS_SMTPSERVER | localhost |
| منفذ خادم SMTP | EmailSettings.SMTPPort, AM_EMAILSETTINGS_SMTPPORT | 10025 |
| تفعيل المصادقة عبر SMTP | EmailSettings.EnableSMTPAuth, AM_EMAILSETTINGS_ENABLESMTPAUTH | معطَل بدون أمان الاتصال، ومُفعَّل عند وجوده |
| اسم مستخدم خادم SMTP | EmailSettings.SMTPUsername, AM_EMAILSETTINGS_SMTPUSERNAME | فارغ |
| كلمة مرور خادم SMTP | EmailSettings.SMTPPassword, AM_EMAILSETTINGS_SMTPPASSWORD | فارغ |
| أمان الاتصال | EmailSettings.ConnectionSecurity, AM_EMAILSETTINGS_CONNECTIONSECURITY | لا شيء (فارغ)؛ أو TLS أو STARTTLS |
| تخطي التحقق من شهادة الخادم | EmailSettings.SkipServerCertificateVerification | معطَل. اتركه معطلاً في بيئة الإنتاج. |
استخدم STARTTLS على المنفذ 587 أو TLS على المنفذ 465، كما يحدده مزودك. ثم انقر على اختبار الاتصال في نفس الصفحة: سيرسل Antimatter بريدًا إلكترونيًا تجريبيًا إلى عنوانك الخاص.
إعداد نموذجي باستخدام Docker Compose، في compose.override.yaml بجانب compose.yaml:
services:
antimatter:
environment:
AM_EMAILSETTINGS_SMTPSERVER: smtp.example.com
AM_EMAILSETTINGS_SMTPPORT: "587"
AM_EMAILSETTINGS_CONNECTIONSECURITY: STARTTLS
AM_EMAILSETTINGS_ENABLESMTPAUTH: "true"
AM_EMAILSETTINGS_SMTPUSERNAME: chat@example.com
AM_EMAILSETTINGS_SMTPPASSWORD: ${SMTP_PASSWORD}
AM_EMAILSETTINGS_FEEDBACKNAME: Antimatter
AM_EMAILSETTINGS_FEEDBACKEMAIL: chat@example.com
AM_EMAILSETTINGS_REPLYTOADDRESS: chat@example.com
ضع SMTP_PASSWORD في .env. يضع ملف compose الخاص بالموقع الخادم على الشبكة الافتراضية، والتي لديها وصول إلى الإنترنت، وبالتالي يمكنها الوصول إلى خادم SMTP خارجي.
إعدادات بريد المرسل والإشعارات
في وحدة التحكم بالنظام › إعدادات الموقع › الإشعارات:
| الإعداد | المفتاح | الافتراضي |
|---|---|---|
| تفعيل إشعارات البريد الإلكتروني | EmailSettings.SendEmailNotifications | مفعّل |
| الاسم المعروض للإشعارات | EmailSettings.FeedbackName | فارغ |
| عنوان المرسل للإشعارات | EmailSettings.FeedbackEmail | test@example.com: قم بتغييره |
| عنوان الرد على الإشعارات | EmailSettings.ReplyToAddress | test@example.com: قم بتغييره |
| عنوان بريد الدعم | SupportSettings.SupportEmail | فارغ |
| عنوان البريد في تذييل الإشعارات | EmailSettings.FeedbackOrganization | فارغ |
| محتوى إشعارات البريد الإلكتروني | EmailSettings.EmailNotificationContentsType | إرسال محتوى الرسالة الكامل (full)، أو وصف عام يحتوي فقط على اسم المرسل (generic) |
| تفعيل تجميع البريد الإلكتروني | EmailSettings.EnableEmailBatching | معطَل. عند تفعيله، يمكن للأشخاص اختيار استلام الرسائل الفائتة مجمعة في بريد إلكتروني واحد كل 15 دقيقة أو كل ساعة، بدلاً من بريد إلكتروني واحد لكل رسالة. |
| استخدام اسم القناة في إشعارات البريد الإلكتروني | EmailSettings.UseChannelInEmailNotifications | معطّل |
| تفعيل شريط وضع المعاينة | EmailSettings.EnablePreviewModeBanner | مُفعَّل: بينما تكون إشعارات البريد الإلكتروني معطلة، يخبر شريط إداريي النظام بأن البريد الإلكتروني غير مُعد |
يجب أن يكون عنوان المرسل (From) عنواناً يُسمح لخادم SMTP الخاص بك بالإرسال باسمه؛ قم بإعداد SPF وDKIM لنطاقه، وإلا فقد تصل الرسائل إلى مجلدات البريد المزعج.
إعدادات تسجيل الدخول المتعلقة بالبريد الإلكتروني (مثل ما إذا كان يجب على الحسابات الجديدة التحقق من عنوانها، وما إذا كان يمكن إرسال الدعوات عبر البريد الإلكتروني) موجودة في تسجيل الدخول والحسابات.
إشعارات الدفع إلى التطبيق المحمول
كيف تعمل الإشعارات الفورية
لا يتواصل Antimatter مع Apple أو Google مباشرة. لكل إشعار، يستدعي وكيلاً للإشعارات الفورية (push proxy)، الذي يحتفظ بمعلومات اعتمادات تطبيق الهاتف المحمول ويحوّل الإشعار إلى Apple (APNs) لهواتف iPhone وإلى Google (Firebase Cloud Messaging) لهواتف Android. لا تقوم Apple وGoogle بتوصيل الإشعار إلا إذا أُرسل بمعلومات اعتمادات التطبيق المخصص له. لذلك، يعمل وكيل الإشعارات الفورية مع نسخة واحدة من تطبيق الهاتف المحمول: تلك التي يحتفظ بمعلومات اعتماداتها.
- لا يشغّل Antimatter وكيل إشعارات فورية عاماً. تقوم أنت بتشغيل وكيل الإشعارات الفورية الخاص بـ Antimatter بنفسك، باستخدام معلومات اعتمادات نسخة تطبيق الهاتف المحمول التي يثبّتها مستخدموك.
- لا يرسل Antimatter أي إشعارات إلى خدمات الإشعارات الفورية الخاصة بـ Mattermost، سواء الاختبارية أو المستضافة: فهي توصل فقط إلى تطبيقات الهاتف المحمول الخاصة بـ Mattermost. إذا تم ضبط الخادم على أحد عناوينها (مثل
https://push-test.mattermost.com، الذي تستخدمه إعدادات Mattermost الأقدم)، فلن يرسل شيئاً وسيسجّل تحذيراً عند بدء التشغيل.
لا يحتوي الخادم الجديد على خادم لإشعارات فورية، لذا لا يرسل أي إشعارات فورية حتى تضبط عنوان وكيل الإشعارات الفورية الخاص بك. حتى ذلك الحين، يعمل تطبيق الهاتف المحمول لكنه لا يستقبل أي إشعارات.
تشغيل وكيل الإشعارات الفورية
يقع وكيل الإشعارات الفورية في مستودع push-proxy. يشرح ملف README كيفية الحصول على معلومات الاعتمادات الثنائية، والتي تأتي من الحسابات التي تنشر نسخة تطبيق الهاتف المحمول الخاص بك:
- Android: ملف حساب خدمة (service account file) لمشروع Firebase الذي تستخدمه نسخة Android الخاصة بك.
- iOS: مفتاح مصادقة APNs (
AuthKey_<KEY ID>.p8) لحساب مطوّر Apple الذي ينشر نسخة iOS الخاصة بك، مع معرّف المفتاح (key ID) ومعرّف الفريق (team ID).
ضعهما بجانب compose.yaml، مع ملف إعدادات الوكيل:
push-proxy/
config/antimatter-push-proxy.json
certs/AuthKey_ABCDE12345.p8
certs/firebase-service-account.json
push-proxy/config/antimatter-push-proxy.json، مع معرّف الحزمة (bundle identifier) الخاص بك، ومعرّف المفتاح، ومعرّف الفريق:
{
"ListenAddress": ":8066",
"ThrottlePerSec": 300,
"ThrottleMemoryStoreSize": 50000,
"ThrottleVaryByHeader": "X-Forwarded-For",
"EnableMetrics": false,
"SendTimeoutSec": 30,
"RetryTimeoutSec": 8,
"ApplePushSettings": [
{
"Type": "apple_rn",
"ApplePushUseDevelopment": false,
"ApplePushTopic": "chat.antimatter.app",
"AppleAuthKeyFile": "./certs/AuthKey_ABCDE12345.p8",
"AppleAuthKeyID": "ABCDE12345",
"AppleTeamID": "FGHIJ67890"
}
],
"AndroidPushSettings": [
{
"Type": "android_rn",
"ServiceFileLocation": "./certs/firebase-service-account.json"
}
],
"EnableConsoleLog": true,
"EnableFileLog": false,
"LogFormat": "plain",
"LogLevel": "info"
}
يُعد ApplePushTopic معرّف الحزمة (bundle identifier) لنسخة iOS الخاصة بك. يكون ApplePushUseDevelopment بقيمة true فقط للنسخ المثبتة من Xcode. تستقبل المكالمات على هواتف iPhone عبر إشعارات VoIP، التي تستخدم المفتاح نفسه ولا تحتاج إلى أي شيء إضافي هنا.
يتوفر على الموقع إضافة جاهزة لملف الإعداد، compose.push.example.yaml. تعمل هذه الإضافة على الصورة المنشورة ghcr.io/antimatterchat/push-proxy:latest.
curl -fsSLO https://antimatter.chat/compose.push.example.yaml
docker compose -f compose.yaml -f compose.push.example.yaml --profile push up -d
docker compose -f compose.yaml -f compose.push.example.yaml logs push-proxy
عند بدء التشغيل، يذكر سجل الوكيل كل هدف للإرسال الذي قام بإعداده، ويسجّل خطأً لأي هدف تعذّر عليه تحميل بيانات الاعتماد. لا ينشر الوكيل أي منفذ؛ بل يصل إليه Antimatter فقط عبر شبكة الإعدادات.
بدون Docker، قم بتثبيت حزمة .deb أو .rpm الخاصة بالوكيل الدافع بدلاً من ذلك: راجع حزم خدمة GIF والوكيل الدافع.
توجيه Antimatter إلى الوكيل
في وحدة التحكم بالنظام › البيئة › خادم الإشعارات الفورية، اضبط تفعيل الإشعارات الفورية على إرسال الإشعارات الفورية عبر وكيل الإرسال الخاص بك، واضبط خادم الإشعارات الفورية على http://push-proxy:8066 (أو عنوان HTTPS الخاص بالوكيل إذا كان يعمل في مكان آخر). لا يمكن حفظ الصفحة مع هذا الخيار دون عنوان. لإيقاف إرسال الإشعارات الفورية، اختر عدم إرسال الإشعارات الفورية. أو باستخدام المتغيرات في خدمة antimatter:
AM_EMAILSETTINGS_SENDPUSHNOTIFICATIONS: "true"
AM_EMAILSETTINGS_PUSHNOTIFICATIONSERVER: http://push-proxy:8066
للتحقق: سجّل الدخول باستخدام التطبيق المحمول، ثم ضعه في الخلفية واطلب من حساب آخر أن يشير إليك. إذا لم يصلك أي شيء، ابحث عن push في سجل Antimatter وسجل الوكيل؛ فهما يوضحان ما إذا كان نوع الجهاز غير معروف، أو تم رفض المفتاح، أو أن الجهاز ينتمي إلى إصدار آخر من التطبيق.
محتوى الإشعارات
وحدة التحكم بالنظام › إعدادات الموقع › الإشعارات › محتوى إشعارات الدفع (EmailSettings.PushNotificationContents):
| الخيار | القيمة |
|---|---|
| وصف عام يتضمن اسم المرسل فقط | generic_no_channel |
| وصف عام يتضمن اسم المرسل واسم القناة | generic |
| المحتوى الكامل للرسالة المُرسَل في حمولة الإشعار (الافتراضي) | full |
| المحتوى الكامل للرسالة المُسترجَع من الخادم عند الاستلام | id_loaded |
مع id_loaded، يمرر الإشعار عبر الوكيل، حيث يحمل Apple و Google معرّفاً فقط، ويسترجع التطبيق الرسالة من خادمك: فلا يمر نص الرسالة أبداً عبر خدماتهم. وهو الخيار الأفضل عندما تكون الرسائل سرية.
يحدد عتبة الإشعارات للقنوات الكبيرة، في صفحة خادم الإشعارات الفورية، (TeamSettings.MaxNotificationsPerChannel، وقيمتها الافتراضية 1000) الحد الأقصى لعدد الأعضاء الذي يمكن أن تحتويه قناة لتعمل إشارات @here و @all و @channel. في القنوات الأكبر من ذلك، تُعطَّل هذه الإشارات ومؤشرات الكتابة.