From b408ebc2b725f41bcfc84d3659b4b0127e8c5c74 Mon Sep 17 00:00:00 2001 From: James Date: Thu, 19 Feb 2026 03:29:17 -0500 Subject: [PATCH] Suppress Fully alerts for silent senders (win alerts, loss alerts, instrumentation, salesforce) --- connector_m365.go | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/connector_m365.go b/connector_m365.go index cd2ab0b..61fd221 100644 --- a/connector_m365.go +++ b/connector_m365.go @@ -589,10 +589,29 @@ func (c *M365Connector) pollEmail() bool { seenSet[id] = true } + // Senders whose emails are silently tracked (marked seen) but never posted to Fully dashboard. + silentSenders := []string{ + "winalert@kaseya.com", + "lostalert@kaseya.com", + "standard.instrumentation@kaseya.com", + "noreply@salesforce.com", + } + isSilent := func(addr string) bool { + addr = strings.ToLower(strings.TrimSpace(addr)) + for _, s := range silentSenders { + if addr == s { + return true + } + } + return false + } + type emailDetail struct { From string `json:"from"` + Address string `json:"address"` Subject string `json:"subject"` BodyPreview string `json:"bodyPreview"` + Silent bool `json:"silent"` } var newEmails []string var summaries []string @@ -600,15 +619,18 @@ func (c *M365Connector) pollEmail() bool { for _, msg := range result.Value { if !seenSet[msg.ID] { newEmails = append(newEmails, msg.ID) + addr := strings.ToLower(strings.TrimSpace(msg.From.EmailAddress.Address)) from := msg.From.EmailAddress.Name if from == "" { - from = msg.From.EmailAddress.Address + from = addr } summaries = append(summaries, fmt.Sprintf("%s: %s", from, msg.Subject)) details = append(details, emailDetail{ From: from, + Address: addr, Subject: msg.Subject, BodyPreview: truncateStr(msg.BodyPreview, 200), + Silent: isSilent(addr), }) } } @@ -643,8 +665,13 @@ func (c *M365Connector) pollEmail() bool { summary := fmt.Sprintf("%d new unread email(s): %s", len(newEmails), strings.Join(summaries, "; ")) log.Printf("[m365] %s", summary) c.sendM365WebhookRich("email", summary, details) - // Post AI-summarized alerts to Fully per email; track alert IDs for auto-removal + // Post AI-summarized alerts to Fully per email; track alert IDs for auto-removal. + // Silent senders (noise/automated) are skipped — tracked as seen but never shown on tablet. for i, d := range details { + if d.Silent { + log.Printf("[m365] Suppressing Fully alert for silent sender: %s", d.Address) + continue + } msg := summarizeM365("📧", d.From, d.Subject, d.BodyPreview) alertID := postFullyAlert(msg, "info", "email:"+d.From) if alertID != "" && i < len(newEmails) {