ইমেইল এবং পুশ নোটিফিকেশন

Antimatter আমন্ত্রণ, পাসওয়ার্ড রিসেট, ভেরিফিকেশন এবং মিসড ম্যাসেজের জন্য ইমেইল পাঠায়, এবং একটি পুশ প্রক্সির মাধ্যমে মোবাইল অ্যাপে পুশ নোটিফিকেশন পাঠায়। আপনি এটি কনফিগার না করা পর্যন্ত এগুলোর কোনোটিই কাজ করবে না।

আউটগোয়িং ইমেইল (SMTP)

Antimatter আপনার প্রদান করা একটি SMTP সার্ভারের মাধ্যমে ইমেইল পাঠায়: আপনার সংস্থার মেইল সার্ভার, বা একটি ট্রানজ্যাকশনাল ইমেইল সার্ভিস। এটি ছাড়া মানুষ ভুলে যাওয়া পাসওয়ার্ড রিসেট করতে পারে না, ইমেইল আমন্ত্রণ এবং ভেরিফিকেশন পৌঁছায় না, এবং মিসড ম্যাসেজের ইমেইল নোটিফিকেশন কেউ পায় না।

এটি সিস্টেম কনসোল › এনভাইরনমেন্ট › SMTP-এ সেট করুন, অথবা ভ্যারিয়েবল ব্যবহার করে:

সেটিংকী এবং ভেরিয়েবলডিফল্ট
SMTP সার্ভারEmailSettings.SMTPServer, AM_EMAILSETTINGS_SMTPSERVERlocalhost
SMTP সার্ভার পোর্টEmailSettings.SMTPPort, AM_EMAILSETTINGS_SMTPPORT10025
SMTP Authentication সক্রিয় করুনEmailSettings.EnableSMTPAuth, AM_EMAILSETTINGS_ENABLESMTPAUTHকানেকশন সিকিউরিটি ছাড়া অফ, থাকলে অন
SMTP সার্ভার ইউজারনেমEmailSettings.SMTPUsername, AM_EMAILSETTINGS_SMTPUSERNAMEখালি
SMTP সার্ভার পাসওয়াডEmailSettings.SMTPPassword, AM_EMAILSETTINGS_SMTPPASSWORDখালি
কানেকশন সিকিউরিটিEmailSettings.ConnectionSecurity, AM_EMAILSETTINGS_CONNECTIONSECURITYNone (খালি); অথবা TLS বা STARTTLS
সার্ভার সার্টিফিকেট যাচাই বাদ দিনEmailSettings.SkipServerCertificateVerificationঅফ। প্রোডাকশনে এটি অফ রাখুন।

আপনার প্রোভাইডারের নির্দেশ অনুযায়ী পোর্ট 587-এ STARTTLS বা পোর্ট 465-এ TLS ব্যবহার করুন। এরপর একই পেজে কানেকশন টেস্ট ক্লিক করুন: Antimatter আপনার নিজের ঠিকানায় একটি টেস্ট ইমেল পাঠাবে।

Docker Compose-এর একটি সাধারণ সেটআপ, compose.yaml-এর পাশে compose.override.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-এ। সাইটের কম্পোজ ফাইল সার্ভারটি ডিফল্ট নেটওয়ার্কে রাখে, যার ইন্টারনেট অ্যাক্সেস আছে, তাই এটি একটি বাইরের SMTP সার্ভারে পৌঁছাতে পারে।

সেন্ডার এবং নোটিফিকেশন ইমেইল সেটিংস

সিস্টেম কনসোল › সাইট কনফিগারেশন › নোটিফিকেশনসমূহ-এ:

সেটিংকীডিফল্ট
ইমেল নোটিফিকেশন চালু করুনEmailSettings.SendEmailNotificationsঅন
নোটিফিকেশন ডিসপ্লে নামEmailSettings.FeedbackNameখালি
নোটিফিকেশন ফ্রম ঠিকানাEmailSettings.FeedbackEmailtest@example.com: এটি পরিবর্তন করুন
নোটিফিকেশন রিপ্লাই-টু ঠিকানাEmailSettings.ReplyToAddresstest@example.com: এটি পরিবর্তন করুন
সাপোর্ট ইমেল ঠিকানাSupportSettings.SupportEmailখালি
নোটিফিকেশন ফুটার মেইলিং ঠিকানাEmailSettings.FeedbackOrganizationখালি
ইমেল নোটিফিকেশন কনটেন্টEmailSettings.EmailNotificationContentsTypeসম্পূর্ণ ম্যাসেজ কনটেন্ট পাঠান (full), অথবা শুধুমাত্র সেন্ডারের নামসহ একটি জেনেরিক বর্ণনা (generic)
ইমেল ব্যাচিং সক্রিয় করুনEmailSettings.EnableEmailBatchingঅফ। অন করলে, মানুষ প্রতি ১৫ মিনিটে বা প্রতি ঘণ্টায় একটি ইমেইলে মিসড ম্যাসেজগুলো গ্রুপ করা পেতে বেছে নিতে পারে, প্রতিটি ম্যাসেজের জন্য আলাদা ইমেইলের পরিবর্তে।
ইমেল নোটিফিকেশনে চ্যানেলের নাম ব্যবহার করুনEmailSettings.UseChannelInEmailNotificationsবন্ধ
প্রিভিউ মোড ব্যানার সক্রিয় করুনEmailSettings.EnablePreviewModeBannerঅন: ইমেইল নোটিফিকেশন বন্ধ থাকাকালীন, একটি ব্যানার অ্যাডমিনদেরকে জানায় যে ইমেইল কনফিগার করা নেই

From ঠিকানাটি এমন হতে হবে যার হিসেবে আপনার SMTP সার্ভার থেকে ইমেইল পাঠানোর অনুমতি আছে; এর ডোমেইনের জন্য SPF এবং DKIM কনফিগার করুন, নয়তো ইমেইলগুলো স্প্যাম ফোল্ডারে পৌঁছাতে পারে।

ইমেইল-সম্পর্কিত সাইন-ইন সেটিংস (যেমন নতুন অ্যাকাউন্টগুলোর ঠিকানা যাচাই করা আবশ্যক কি না, ইমেইলের মাধ্যমে আমন্ত্রণ পাঠানো যাবে কি না) সাইন-ইন এবং অ্যাকাউন্টসমূহ পেজে রয়েছে।

মোবাইল অ্যাপে পুশ নোটিফিকেশন

পুশ কীভাবে কাজ করে

Antimatter কখনোই Apple বা Google-এর সাথে সরাসরি যোগাযোগ করে না। প্রতিটি নোটিফিকেশনের জন্য এটি একটি পুশ প্রক্সি-কে কল করে, যা মোবাইল অ্যাপের ক্রেডেনশিয়ালসহ রাখে এবং আইফোনগুলোর জন্য Apple (APNs)-এর কাছে এবং অ্যান্ড্রয়েড ফোনগুলোর জন্য Google (Firebase Cloud Messaging)-এর কাছে নোটিফিকেশনটি ফরওয়ার্ড করে। Apple এবং Google শুধুমাত্র সেই অ্যাপের ক্রেডেনশিয়াল দিয়ে পাঠানো নোটিফিকেশন ডেলিভারি করে। তাই একটি পুশ প্রক্সি মোবাইল অ্যাপের একটি নির্দিষ্ট বিল্ডের সাথে কাজ করে: যার ক্রেডেনশিয়াল সে রাখে।

  • Antimatter কোনো পাবলিক পুশ প্রক্সি চালায় না। আপনি নিজেই Antimatter পুশ প্রক্সি চালাবেন, আপনার ব্যবহারকারীরা যে মোবাইল অ্যাপের বিল্ড ইনস্টল করে তার ক্রেডেনশিয়ালসহ।
  • Antimatter কখনোই Mattermost-এর পুশ সার্ভিসে (টেস্ট বা হোস্টেড) নোটিফিকেশন পাঠায় না: তারা শুধুমাত্র Mattermost-এর নিজস্ব মোবাইল অ্যাপগুলিতে ডেলিভারি করে। যদি সার্ভারটি তাদের ঠিকানাগুলোর একটিতে সেট করা থাকে (যেমন https://push-test.mattermost.com, যা পুরনো Mattermost কনফিগারেশনগুলো ব্যবহার করে), তবে এটি কিছুই পাঠাবে না এবং স্টার্টআপের সময় একটি ওয়ার্নিং লগ করবে।

একটি নতুন সার্ভারে কোনো পুশ নোটিফিকেশন সার্ভার নেই, তাই আপনি আপনার পুশ প্রক্সির ঠিকানা সেট না করা পর্যন্ত এটি কোনো পুশ নোটিফিকেশন পাঠাবে না। সেই পর্যন্ত মোবাইল অ্যাপটি কাজ করবে, তবে নোটিফিকেশন পাবে না।

পুশ প্রক্সি চালান

পুশ প্রক্সিটি push-proxy রিপোজিটরিতে রয়েছে। এর README-তে দুটি ক্রেডেনশিয়াল কীভাবে পাওয়া যায় তা ব্যাখ্যা করা হয়েছে, যা আপনার মোবাইল অ্যাপের বিল্ড প্রকাশকারী অ্যাকাউন্টগুলোর থেকে আসে:

  • অ্যান্ড্রয়েড: আপনার অ্যান্ড্রয়েড বিল্ড যে Firebase প্রজেক্ট ব্যবহার করে, তার একটি সার্ভিস অ্যাকাউন্ট ফাইল।
  • iOS: আপনার iOS বিল্ড প্রকাশকারী Apple ডেভেলপার অ্যাকাউন্টের একটি APNs অথেনটিকেশন কী (AuthKey_<KEY ID>.p8), যার সাথে এর কী আইডি এবং টিম আইডি থাকবে।

এগুলো 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, আপনার বান্ডল আইডেন্টিফায়ার, কী আইডি এবং টিম আইডিসহ:

{
    "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 হলো আপনার বিল্ডের iOS বান্ডল আইডেন্টিফায়ার। ApplePushUseDevelopment শুধুমাত্র Xcode-এর মাধ্যমে ইনস্টল করা বিল্ডগুলোর জন্য true হবে। কলগুলো আইফোনগুলোতে 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 compose নেটওয়ার্কের মাধ্যমে এটির সাথে যোগাযোগ করতে পারে।

Docker ছাড়া, পুশ প্রক্সির .deb বা .rpm প্যাকেজ ইনস্টল করুন: GIF সার্ভিস এবং পুশ প্রক্সি প্যাকেজসমূহ দেখুন।

পুশ প্রক্সি কীভাবে কল করা হয়েছে তা যাচাই করে না। এটিকে ইন্টারনেটে এক্সপোজ করবেন না। যদি এটি অন্য হোস্টে চলে, তবে এটিকে HTTPS-এর পেছনে রাখুন এবং কে এটির সাথে যোগাযোগ করতে পারে তা সীমাবদ্ধ করুন: নোটিফিকেশনে মেসেজের টেক্সট থাকতে পারে।

Antimatter-কে প্রক্সির দিকে নির্দেশ করুন

সিস্টেম কনসোল › এনভাইরনমেন্ট › পুশ নোটিফিকেশন সার্ভার-এ, পুশ নোটিফিকেশন চালু করুন অপশনে আপনার নিজস্ব পুশ প্রক্সির মাধ্যমে পুশ নোটিফিকেশন পাঠান নির্বাচন করুন, এবং পুশ নোটিফিকেশন সার্ভার-এ http://push-proxy:8066 (অথবা অন্য জায়গায় চললে প্রক্সির HTTPS ঠিকানা) দিন। এই অপশন নির্বাচন করে ঠিকানা ছাড়া পেজটি সেভ করা যাবে না। পুশ নোটিফিকেশন পাঠানো বন্ধ করতে পুশ নোটিফিকেশন পাঠান না নির্বাচন করুন। অথবা antimatter সার্ভিসে ভ্যারিয়েবল ব্যবহার করে:

AM_EMAILSETTINGS_SENDPUSHNOTIFICATIONS: "true"
AM_EMAILSETTINGS_PUSHNOTIFICATIONSERVER: http://push-proxy:8066

যাচাই করতে: মোবাইল অ্যাপ দিয়ে সাইন ইন করুন, এটিকে ব্যাকগ্রাউন্ডে রাখুন এবং অন্য একাউন্ট থেকে আপনাকে মেনশন করান। যদি কিছু না আসে, Antimatter-এর লগ এবং প্রক্সির লগে push খুঁজুন: তারা বলবে ডিভাইসের টাইপ অজানা, কি রিজেক্ট হয়েছে, অথবা ডিভাইসটি অন্য অ্যাপ বিল্ডের অংশ।

নোটিফিকেশনে কী থাকে

সিস্টেম কনসোল › সাইট কনফিগারেশন › নোটিফিকেশনসমূহ › পুশ নোটিফিকেশন কনটেন্টস (EmailSettings.PushNotificationContents):

অপশনমান
শুধুমাত্র সেন্ডারের নাম সহ জেনেরিক বর্ণনাgeneric_no_channel
সেন্ডার এবং চ্যানেলের নাম সহ জেনেরিক বর্ণনাgeneric
নোটিফিকেশন পেইলোডে পাঠানো সম্পূর্ণ মেসেজ কনটেন্ট (ডিফল্ট)full
প্রাপ্তির সময় সার্ভার থেকে ফেচ করা সম্পূর্ণ মেসেজ কনটেন্টid_loaded

id_loaded এর সাথে, প্রক্সির মাধ্যমে যাওয়া নোটিফিকেশনে Apple এবং Google শুধুমাত্র একটি আইডি বহন করে, এবং অ্যাপটি আপনার সার্ভার থেকে মেসেজ ফেচ করে: মেসেজের টেক্সট কখনোই তাদের সার্ভিসের মাধ্যমে যায় না। মেসেজ গোপনীয় হলে এটি সেরা পছন্দ।

পুশ নোটিফিকেশন সার্ভার পেজে বড় চ্যানেলের নোটিফিকেশন থ্রেশহোল্ড (TeamSettings.MaxNotificationsPerChannel, ডিফল্ট 1000) হলো @here, @all এবং @channel কাজ করার জন্য একটি চ্যানেলে থাকতে পারে এমন সদস্যদের সর্বোচ্চ সংখ্যা। বড় চ্যানেলে এই মেনশনগুলো এবং টাইপিং ইন্ডিকেটর বন্ধ থাকে।