إشعارات البريد الإلكتروني والإشعارات الفورية

يرسل Antimatter رسائل بريد إلكتروني للدعوات، وإعادة تعيين كلمات المرور، والتحقق، والرسائل الفائتة، بالإضافة إلى إشعارات فورية إلى تطبيق الهاتف المحمول عبر وكيل إرسال. لا يعمل أي منهما حتى يتم إعداده.

البريد الإلكتروني الصادر (SMTP)

يرسل Antimatter رسائل بريد إلكتروني عبر خادم SMTP توفره أنت: إما خادم بريد مؤسستك، أو خدمة بريد إلكتروني معاملة. بدونه، لا يمكن للأشخاص إعادة تعيين كلمة مرور منسية، ولا تصل دعوات البريد الإلكتروني والتحقق، ولا يتلقى أي شخص إشعارات بريد إلكتروني عن الرسائل الفائتة.

قم بإعداده في وحدة التحكم بالنظام › البيئة › SMTP، أو باستخدام متغيرات:

الإعدادالمفتاح والمتغيرالافتراضي
خادم SMTPEmailSettings.SMTPServer, AM_EMAILSETTINGS_SMTPSERVERlocalhost
منفذ خادم SMTPEmailSettings.SMTPPort, AM_EMAILSETTINGS_SMTPPORT10025
تفعيل المصادقة عبر SMTPEmailSettings.EnableSMTPAuth, AM_EMAILSETTINGS_ENABLESMTPAUTHمعطَل بدون أمان الاتصال، ومُفعَّل عند وجوده
اسم مستخدم خادم SMTPEmailSettings.SMTPUsername, AM_EMAILSETTINGS_SMTPUSERNAMEفارغ
كلمة مرور خادم SMTPEmailSettings.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.FeedbackEmailtest@example.com: قم بتغييره
عنوان الرد على الإشعاراتEmailSettings.ReplyToAddresstest@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 والوكيل الدافع.

لا يتحقق الوكيل من هوية من يستدعيه. لا تعرّضه للإنترنت. إذا كان يعمل على مضيف آخر، فوضعه خلف HTTPS وحدّد من يمكنه الوصول إليه، إذ قد تحتوي الإشعارات على نص الرسائل.

توجيه 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. في القنوات الأكبر من ذلك، تُعطَّل هذه الإشارات ومؤشرات الكتابة.