ایمیل و اعلانهای push
Antimatter برای دعوتنامهها، بازنشانی گذرواژه، تأیید و پیامهای از دست رفته ایمیل میفرستد و از طریق push proxy اعلانهای push را به اپلیکیشن موبایل ارسال میکند. تا زمانی که پیکربندی نکنید، هیچکدام کار نمیکنند.
ایمیل خروجی (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 را برای دامنهاش پیکربندی کنید، وگرنه ایمیلها ممکن است در پوشههای اسپم قرار بگیرند.
تنظیمات ورود مرتبط با ایمیل (مانند اینکه آیا حسابهای جدید باید نشانی خود را تأیید کنند یا دعوتنامهها میتوانند از طریق ایمیل ارسال شوند) در بخش ورود و حسابها قرار دارد.
اعلانهای push به اپلیکیشن موبایل
نحوه عملکرد push
Antimatter هرگز مستقیماً با Apple یا Google ارتباط برقرار نمیکند. برای هر اعلان، یک push proxy را فراخوانی میکند که اعتبارنامههای اپلیکیشن موبایل را در اختیار دارد و اعلان را برای آیفونها به Apple (APNs) و برای گوشیهای اندروید به Google (Firebase Cloud Messaging) ارسال میکند. Apple و Google فقط زمانی اعلانی را تحویل میدهند که با اعتبارنامههای همان اپلیکیشن ارسال شده باشد. بنابراین یک push proxy فقط با یک نسخه (build) از اپلیکیشن موبایل کار میکند: همان نسخهای که اعتبارنامههای آن را در اختیار دارد.
- Antimatter یک push proxy عمومی اجرا نمیکند. شما خودتان باید push proxy Antimatter را با اعتبارنامههای نسخه اپلیکیشن موبایلی که کاربران شما نصب میکنند، اجرا کنید.
- Antimatter هرگز اعلانهایی را به سرویسهای push Mattermost (چه آزمایشی و چه میزبانیشده) ارسال نمیکند؛ زیرا این سرویسها فقط برای اپلیکیشنهای موبایل خود Mattermost اعلان تحویل میدهند. اگر سرور روی یکی از نشانیهای آنها (مانند
https://push-test.mattermost.comکه در پیکربندیهای قدیمیتر Mattermost استفاده میشود) تنظیم شده باشد، چیزی ارسال نمیکند و هنگام راهاندازی یک هشدار در لاگ ثبت میشود.
یک سرور جدید، سرور اعلان push ندارد، بنابراین تا زمانی که نشانی push proxy خود را تنظیم نکنید، هیچ اعلان push ارسال نمیشود. تا آن زمان، اپلیکیشن موبایل کار میکند اما اعلانی دریافت نمیکند.
اجرای push proxy
push proxy در مخزن push-proxy قرار دارد. فایل README آن توضیح میدهد که چگونه دو اعتبارنامه را به دست آورید که از حسابهایی که نسخه اپلیکیشن موبایل شما را منتشر میکنند، میآیند:
- Android: یک فایل حساب سرویس (service account) از پروژه Firebase که نسخه اندرویدی شما از آن استفاده میکند.
- iOS: یک کلید احراز هویت APNs (
AuthKey_<KEY ID>.p8) از حساب توسعهدهنده Apple که نسخه iOS شما را منتشر میکند، همراه با شناسه کلید (key ID) و شناسه تیم (team ID).
آنها را در کنار compose.yaml و فایل پیکربندی proxy قرار دهید:
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 فقط برای نسخههایی که از Xcode نصب شدهاند true است. مکالمهها (calls) روی آیفونها از طریق pushهای VoIP فعال میشوند که از همان کلید استفاده میکنند و در اینجا به چیزی دیگر نیاز ندارند.
این سایت افزودهای آماده به فایل compose دارد: 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
در هنگام راهاندازی، لاگ پروکسی نام هر هدف push را که پیکربندی کرده است ذکر میکند و برای هر هدفی که نمیتواند اعتبارنامههای آن را بارگذاری کند، خطایی ثبت میکند. پروکسی هیچ پورتی را به بیرون منتشر نمیکند؛ تنها Antimatter میتواند از طریق شبکه compose به آن دسترسی پیدا کند.
در صورت عدم استفاده از Docker، به جای آن بسته .deb یا .rpm پروکسی پوش را نصب کنید: به بستههای سرویس GIF و پروکسی پوش مراجعه کنید.
Antimatter را به پروکسی متصل کنید
در کنسول سیستم › محیط › Push Notification Server، گزینه فعال کردن Push Notifications را روی ارسال اعلانهای فوری از طریق پروکسی اعلان اختصاصی شما و Push Notification Server را روی http://push-proxy:8066 (یا آدرس HTTPS پروکسی اگر در جای دیگری اجرا میشود) تنظیم کنید. صفحه با این گزینه و بدون آدرس ذخیره نمیشود. برای توقف ارسال اعلانهای فوری، گزینه اعلان فشار ارسال نکنید را انتخاب کنید. یا با متغیرها روی سرویس antimatter:
AM_EMAILSETTINGS_SENDPUSHNOTIFICATIONS: "true"
AM_EMAILSETTINGS_PUSHNOTIFICATIONSERVER: http://push-proxy:8066
برای بررسی: با اپلیکیشن موبایل وارد شوید، آن را به پسزمینه ببرید و حساب دیگری شما را Mention کند. اگر چیزی دریافت نشد، در لاگ Antimatter و لاگ پروکسی به دنبال push بگردید: آنها مشخص میکنند که آیا نوع دستگاه ناشناخته است، کلیدی رد شده است، یا دستگاه به بیلد دیگری از اپلیکیشن تعلق دارد.
محتوای اعلانها
کنسول سیستم › پیکربندی سایت › اعلانها › محتویات Push Notification (EmailSettings.PushNotificationContents):
| گزینه | مقدار |
|---|---|
| توصیف عمومی با نام فرستنده | generic_no_channel |
| توصیف عمومی با نام فرستنده و کانال | generic |
| محتوای کامل پیام ارسالشده در payload اعلان (پیشفرض) | full |
| محتوای کامل پیام که هنگام دریافت از سرور بازیابی میشود | id_loaded |
با id_loaded، اعلان از طریق پروکسی، Apple و Google فقط یک id را حمل میکند و اپلیکیشن پیام را از سرور شما بازیابی میکند: متن پیام هرگز از طریق سرویسهای آنها عبور نمیکند. این بهترین انتخاب زمانی است که پیامها محرمانه باشند.
حداکثر اعلان ها در هر کانال، روی صفحه Push Notification Server، (TeamSettings.MaxNotificationsPerChannel، بهطور پیشفرض 1000) بیشترین تعداد اعضایی است که یک کانال میتواند داشته باشد تا @here، @all و @channel کار کنند. در کانالهای بزرگتر، این اشارهها و نشانگرهای تایپ غیرفعال میشوند.