อีเมลและการแจ้งเตือนแบบ Push

Antimatter ส่งอีเมลสำหรับคำเชิญ การรีเซ็ตรหัสผ่าน การยืนยันตัวตน และข้อความที่พลาดไป รวมถึงการแจ้งเตือนแบบ Push ไปยังแอปมือถือผ่าน Push Proxy ทั้งสองอย่างจะทำงานไม่ได้จนกว่าคุณจะกำหนดค่า

อีเมลขาออก (SMTP)

Antimatter ส่งอีเมลผ่านเซิร์ฟเวอร์ SMTP ที่คุณจัดเตรียมให้: เซิร์ฟเวอร์อีเมลขององค์กร หรือบริการอีเมลธุรกรรม (Transactional email service) หากไม่มีสิ่งนี้ ผู้ใช้จะไม่สามารถรีเซ็ตรหัสผ่านที่ลืมได้ อีเมลคำเชิญและการยืนยันตัวตนจะไม่มาถึง และไม่มีใครได้รับอีเมลแจ้งเตือนข้อความที่พลาดไป

ตั้งค่าใน คอนโซลระบบ › สภาพแวดล้อม › 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_CONNECTIONSECURITYNone (ว่าง); หรือ TLS หรือ STARTTLS
ข้ามการตรวจสอบใบรับรองเซิร์ฟเวอร์EmailSettings.SkipServerCertificateVerificationปิด. ปล่อยให้ปิดในสภาพแวดล้อม Production

ใช้ 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 นาทีหรือทุก 1 ชั่วโมง แทนที่จะเป็นอีเมลแยกกัน
ใช้ชื่อช่องในอีเมลแจ้งเตือนEmailSettings.UseChannelInEmailNotificationsปิด
เปิดใช้งานแบนเนอร์โหมดพรีวิวEmailSettings.EnablePreviewModeBannerเปิด: ขณะการแจ้งเตือนอีเมลปิด แถบบนจะแจ้งให้ผู้ดูแลระบบทราบว่าอีเมลยังไม่ได้กำหนดค่า

ที่อยู่ From ต้องเป็นท่ีท่ี SMTP server ของคุณได้รับอนุญาตให้อีเมลในนามท่ี; ต้ังค่า SPF และ DKIM สำหรบั domain น้ัน ไม่งั้นอีเมลอาจตกไปอย่ในโฟลเดอรspam

การตั้ค่าการลงท่ีเก่ยวกบัอีเมล (เชน วาจะตองให้อคคานท่ีใหมตองยืนยันท่ีอย่ หรือวาจะส่เช่ยทางอีเมลได) อย่ใน การลงท่ีและอคคาน

การแจงเตือนผาน push สู่แอปบนโทรศัพท

ว่ push ทำงานอยางไร

Antimatter ไมไดทักทาม Apple หรือ Google โดยตรง สำหรบัแตละการแจงเตือน จะเรียก push proxy ท่ีเกบ credential ของแอปบนโทรศัพทและส่การแจงเตือนไปยง Apple (APNs) สำหรบั iPhone และ Google (Firebase Cloud Messaging) สำหรบั Android ท่ี Apple และ Google จะส่การแจงเตือนก็ตอเมอไดส่พรอม credential ของแอปท่ีเก่ยวกัน ดวยอยางน้ push proxy จะทำงานพรอมกับ build เดียวของแอปบนโทรศัพท: ท่ี credential ของน้ันอย

  • Antimatter ไมได run push proxy สาธารณะ คุณตอง run Antimatter push proxy เอง พรอม credential ของ build แอปบนโทรศัพทท่ีผใขงานของคณตองลง
  • Antimatter ไมไดส่การแจงเตือนไปยง push services ของ Mattermost ท้ท่ี test และท่ี hosted: ท่ีน้จะส่ไปยงแอปบนโทรศัพทของ Mattermost เองเทาน้ ถา server ต้ังค่าไปยงท่ีอย่ของน้ (เชน https://push-test.mattermost.com ท่ีการต้งค่าของ Mattermost ท่ีเกาใช) จะไมส่อะไรและ log warning ตอน start up

server ใหมไมมี push notification server ดวยอยางน้ จะไมส่ push notification จนตอเมอคุณต้งค่าท่ีอย่ของ push proxy ของคณ จนตอเมอน้ แอปบนโทรศัพทจะทำงานได แตจะไมไดรบัการแจงเตือน

Run push proxy

push proxy อย่ใน repository push-proxy README ของน้จะอธบายว่จะได credential ท้สองอยางไร ท่ีมาจากอคคานท่ี publish build ของแอปบนโทรศัพทของคณ:

  • Android: ไฟล service account ของ Firebase project ท่ี build Android ของคณใช
  • iOS: APNs authentication key (AuthKey_<KEY ID>.p8) ของ Apple developer account ท่ี publish build 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, key ID และ team ID ของคณ:

{
    "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 ของ build ของคณ ApplePushUseDevelopment จะเปน true ก็ตอเมอ build ท่ีลงจาก Xcode การโทรจะ ring บน iPhone ผาน VoIP push ท่ีใช key เดียวกนและไมตองต้งค่าอะไรเพิ่มาท่ีน้

ไซต์นี้มีส่วนเพิ่มเติมสำหรับไฟล์ 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

เมื่อเริ่มทำงาน log ของ proxy จะระบุชื่อ push target แต่ละตัวที่ตั้งค่าไว้ และบันทึกข้อผิดพลาดสำหรับตัวใดก็ตามที่ไม่สามารถโหลดข้อมูลรับรองได้ Proxy ไม่เปิด port: มีเพียง Antimatter เท่านั้นที่เข้าถึงได้ผ่านเครือข่าย compose

หากไม่มี Docker ให้ติดตั้งแพ็กเกจ .deb หรือ .rpm ของ push proxy แทน: ดู แพ็กเกจบริการ GIF และ push proxy

Push proxy ไม่ตรวจสอบว่าใครเป็นผู้เรียกใช้งาน อย่าเปิดเผยให้เข้าถึงจากอินเทอร์เน็ต หากทำงานบนโฮสต์อื่น ให้วางไว้เบื้องหลัง HTTPS และจำกัดสิทธิ์การเข้าถึง: การแจ้งเตือนอาจมีข้อความของข้อความ

กำหนดค่าให้ Antimatter ชี้ไปยัง proxy

ใน คอนโซลระบบ › สภาพแวดล้อม › เซิร์ฟเวอร์การแจ้งเตือนแบบพุช ตั้งค่า เปิดใช้งานการแจ้งเตือนแบบพุช เป็น ส่งการแจ้งเตือนแบบพุชผ่านพุชพร็อกซีของคุณเอง และ เซิร์ฟเวอร์การแจ้งเตือนแบบพุช เป็น http://push-proxy:8066 (หรือที่อยู่ HTTPS ของพร็อกซีหากทำงานที่อื่น) หน้าเพจนี้ไม่สามารถบันทึกได้หากเลือกตัวเลือกนี้โดยไม่มีที่อยู่ หากต้องการหยุดส่งการแจ้งเตือนแบบพุช ให้เลือก ไม่ส่งการแจ้งเตือนแบบพุช หรือใช้ตัวแปรบนบริการ antimatter:

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

เพื่อตรวจสอบ: เข้าสู่ระบบด้วยแอปมือถือ วางแอปไว้เบื้องหลังแล้วให้บัญชีอื่นเมนชันคุณ หากไม่มีอะไรมาถึง ให้ค้นหา push ใน log ของ Antimatter และ log ของ proxy: ซึ่งจะบอกว่าเป็นประเภทอุปกรณ์ที่ไม่รู้จัก กุญแจถูกปฏิเสธ หรืออุปกรณ์นั้นเป็นของแอปเวอร์ชันอื่น

สิ่งที่การแจ้งเตือนประกอบด้วย

คอนโซลระบบ › การตั้งค่าไซต์ › การแจ้งเตือน › เนื้อหาการแจ้งเตือน Push (EmailSettings.PushNotificationContents):

ตัวเลือกค่า
คำอธิบายทั่วไปที่มีเพียงชื่อผู้ส่งgeneric_no_channel
คำอธิบายทั่วไปที่มีชื่อผู้ส่งและชื่อช่องgeneric
เนื้อหาข้อความเต็มใน payload ของการแจ้งเตือน (ค่าเริ่มต้น)full
เนื้อหาข้อความเต็มที่ได้รับจากเซิร์ฟเวอร์เมื่อมีการรับid_loaded

เมื่อใช้ id_loaded การแจ้งเตือนที่ผ่าน proxy, Apple และ Google จะส่งเฉพาะ id และแอปจะดึงข้อความจากเซิร์ฟเวอร์ของคุณ: เนื้อหาข้อความจะไม่ผ่านบริการของพวกเขาเลย เป็นตัวเลือกที่ดีที่สุดเมื่อข้อความมีความลับ

เกณฑ์การแจ้งเตือนสำหรับช่องขนาดใหญ่ บนหน้าเพจเซิร์ฟเวอร์การแจ้งเตือนแบบพุช (TeamSettings.MaxNotificationsPerChannel ค่าเริ่มต้นคือ 1000) คือจำนวนสมาชิกสูงสุดที่ช่องสามารถมีได้เพื่อให้ @here, @all และ @channel ทำงานได้ ในช่องที่ใหญ่กว่านั้น เมนชันเหล่านี้และตัวบ่งชี้การพิมพ์จะถูกปิด