package main import ( "fmt" "net/http" "strings" "time" ) type Notifier struct { httpClient *http.Client channel string } func NewNotifier(channel string) *Notifier { return &Notifier{ httpClient: &http.Client{Timeout: 10 * time.Second}, channel: channel, } } func (n *Notifier) Send(msg string) error { ntfyUrl := fmt.Sprintf("https://ntfy.sh/%s", n.channel) req, err := http.NewRequest(http.MethodPost, ntfyUrl, strings.NewReader(msg)) if err != nil { return err } req.Header.Set("Content-Type", "text/plain") req.Header.Set("Title", "DoctoCheck") req.Header.Set("Tags", "medical_symbol") resp, err := n.httpClient.Do(req) if err != nil { return err } defer func() { _ = resp.Body.Close() }() if resp.StatusCode != http.StatusOK { return fmt.Errorf("unexpected status %d", resp.StatusCode) } return nil }