From 339151c9ccbfa5cc0f08ff1ae99b4bc4c3738bd5 Mon Sep 17 00:00:00 2001 From: Skrotdev <132808435+Skrotdev@users.noreply.github.com> Date: Tue, 14 Apr 2026 02:03:37 +0200 Subject: [PATCH] feat: add title support and summary cleanup to pushover provider (#5710) Co-authored-by: Shahar Glazner --- .../pushover-snippet-autogenerated.mdx | 7 ++- .../pushover_provider/pushover_provider.py | 56 +++++++++++++------ 2 files changed, 45 insertions(+), 18 deletions(-) diff --git a/docs/snippets/providers/pushover-snippet-autogenerated.mdx b/docs/snippets/providers/pushover-snippet-autogenerated.mdx index f485cec492..bc9e39730d 100644 --- a/docs/snippets/providers/pushover-snippet-autogenerated.mdx +++ b/docs/snippets/providers/pushover-snippet-autogenerated.mdx @@ -1,4 +1,4 @@ -{/* This snippet is automatically generated using scripts/docs_render_provider_snippets.py +{/* This snippet is automatically generated using scripts/docs_render_provider_snippets.py Do not edit it manually, as it will be overwritten */} ## Authentication @@ -21,6 +21,11 @@ actions: config: "{{ provider.my_provider_name }}" with: message: {value} # The content of the message. + title: {value} # Optional notification title. + priority: {value} # Message priority (-2 to 2, where 2 is emergency). + sound: {value} # Pushover sound name. + retry: {value} # Retry interval in seconds for emergency priority. + expire: {value} # Expiry in seconds for emergency priority. ``` diff --git a/keep/providers/pushover_provider/pushover_provider.py b/keep/providers/pushover_provider/pushover_provider.py index 22338f7dde..758c6234fb 100644 --- a/keep/providers/pushover_provider/pushover_provider.py +++ b/keep/providers/pushover_provider/pushover_provider.py @@ -47,30 +47,52 @@ def dispose(self): """ pass - def _notify(self, message=None, **kwargs: dict): + def _notify( + self, + message: str = "", + title: str | None = None, + priority: int = 0, + sound: str = "pushover", + retry: int = 60, + expire: int = 3600, + **kwargs: dict, + ): """ Notify alert message to Pushover using the Pushover API https://support.pushover.net/i44-example-code-and-pushover-libraries#python Args: message (str): The content of the message. + title (str | None): Optional notification title. + priority (int): Message priority (-2 to 2, where 2 is emergency). + sound (str): Pushover sound name. + retry (int): Retry interval in seconds for emergency priority. + expire (int): Expiry in seconds for emergency priority. """ self.logger.debug("Notifying alert message to Pushover") - sound = kwargs.get("sound", "pushover") - priority = int(kwargs.get("priority", 0)) - retry = kwargs.get("retry", 60) - expire = kwargs.get("expire", 3600) - resp = requests.post( - "https://api.pushover.net/1/messages.json", - data={ - "token": self.authentication_config.token, - "user": self.authentication_config.user_key, - "message": message, - "sound": sound, - "priority": priority, - **({"retry": retry, "expire": expire} if priority == 2 else {}), - }, - ) + sound = kwargs.get("sound", sound) + priority = int(kwargs.get("priority", priority)) + retry = int(kwargs.get("retry", retry)) + expire = int(kwargs.get("expire", expire)) + title = kwargs.get("title", title) + + if isinstance(message, str): + message = message.replace("

", "").replace("

", "") + + data = { + "token": self.authentication_config.token, + "user": self.authentication_config.user_key, + "message": message, + "sound": sound, + "priority": priority, + **({"retry": retry, "expire": expire} if priority == 2 else {}), + } + + # Add optional title if provided so Pushover shows incident name as bold title + if title: + data["title"] = title + + resp = requests.post("https://api.pushover.net/1/messages.json", data=data) resp.raise_for_status() self.logger.debug("Alert message notified to Pushover") @@ -97,4 +119,4 @@ def _notify(self, message=None, **kwargs: dict): authentication={"token": pushover_token, "user_key": pushover_user_key}, ) provider = PushoverProvider(context_manager, provider_id="pushover", config=config) - provider.notify(message="Simple alert showing context with name: John Doe") \ No newline at end of file + provider.notify(message="Simple alert showing context with name: John Doe")