Skip to content

SIGNL4 Plugin#1379

Merged
caronc merged 1 commit intocaronc:masterfrom
rons4:apprise-signl4
Aug 1, 2025
Merged

SIGNL4 Plugin#1379
caronc merged 1 commit intocaronc:masterfrom
rons4:apprise-signl4

Conversation

@rons4
Copy link
Contributor

@rons4 rons4 commented Aug 1, 2025

Description:

SIGNL4 plugin added.

ServiceName Notifications

SIGNL4 offers critical alerting, incident response and service dispatching for operating critical infrastructure. It alerts you persistently via app push, SMS text, voice calls, and email including tracking, escalation, on-call duty scheduling and collaboration.

🛠️ Setup Instructions

  1. Visit signl4.com and sign up for a new free trial if you do not already have an account.
  2. Once logged in, get your SIGNL4 team or integration secret as described here.
  3. Use your team secret as hostname in your Apprise URL to send the notification.

✅ Apprise Support

Syntax

Valid syntax is as follows:

  • service://{secret}

🔐 Parameter Breakdown

Variable Required Description
service No Assigns the alert to the service/system category with the specified name.
location No Transmit location information (‘latitude, longitude’) with your event and display a map in the mobile app.
alerting_scenario No If this event triggers an alert, allows to control how SIGNL4 notifies the team. single_ack: Only one person needs to acknowledge this alert. multi_ack: The alert must be confirmed by the number of people who are on duty at the time this alert is created. emergency: All people in the team are notified regardless of their duty status and must acknowledge the alert, which is also assigned to the built-in emergency category.
filtering No Specify a boolean value of true or false to apply event filtering for this event, or not. If set to true, the event will only trigger a notification to the team, if it contains at least one keyword from one of your services and system categories (i.e. it is whitelisted).
external_id No If the event originates from a record in a 3rd party system, use this parameter to pass the unique ID of that record. That ID will be communicated in outbound webhook notifications from SIGNL4, which is great for correlation/synchronization of that record with the alert.
status No If you want to resolve an existing alert by an external id (external_id), you can add this status parameter. It has three possible values: new: Default value which means that this event triggers a new alert. acknowledged: If you want to acknowledge a previously triggered alert (e.g. someone responded in the 3rd party system and not in the mobile app during business hours), set the "status" to "acknowledged" and provide an external ID via the "external_id" parameter for the alert you want to acknowledge. It is only possible to acknowledge an alert with a provided external id that initially triggered it. resolved: If you want to resolve a previously triggered alert (e.g. monitoring system has auto-closed the event), make sure to set the X-S4-Status to ‘resolved’ and provide an external ID via the "external_id" parameter for the alert(s) you want to resolve. It is only possible to resolve a alert with a provided external id that initially triggered it.

You can find more information here.


📦 Examples

Sends a simple example

apprise -vv --title 'Alert from Apprise' --body 'Hello world.'
apprise -vv --title 'Alert from Apprise' --body 'Hello world.' 'signl4://secret?service=IoT&location=52.3984235,13.0544149&external_id=a2&status=new'

The "secret" is your SIGNL4 team or integration secret.

New Service Completion Status

  • apprise/plugins/signl4.py
  • pypackage.toml (pyproject.toml I guess) update keywords section to identify our new service
    • add new service into this file (alphabetically).
  • README.md
    • add entry for new service to table (as a quick reference)
  • packaging/redhat/python-apprise.spec
    • add new service into the %global common_description

Checklist

  • The code change is tested and works locally.
  • There is no commented out code in this PR.
  • [?] No lint errors (use tox -e lint) - Some warning, e.g. I should remove "import requests" but it would not work if I do so
  • 100% test coverage (use tox -e minimal) - There are errors but as far as I can see not related to the SIGNL4 plugin.

Testing

Anyone can help test this source code as follows:

# Create a virtual environment to work in as follows:
python3 -m venv apprise

# Change into our new directory
cd apprise

# Activate our virtual environment
source bin/activate

# Install the branch
pip install git+https://github.com/caronc/apprise.git@<this.branch-name>

# Test out the changes with the following command:
apprise -t "Test Title" -b "Test Message" \
  <apprise url related to ticket>

To repair the previous attempt.
@rons4 rons4 mentioned this pull request Aug 1, 2025
7 tasks
@codecov
Copy link

codecov bot commented Aug 1, 2025

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 99.65%. Comparing base (8dc7ba7) to head (e15e171).
⚠️ Report is 1 commits behind head on master.

Additional details and impacted files
@@           Coverage Diff            @@
##           master    #1379    +/-   ##
========================================
  Coverage   99.65%   99.65%            
========================================
  Files         171      172     +1     
  Lines       22109    22214   +105     
  Branches     3480     3502    +22     
========================================
+ Hits        22033    22138   +105     
  Misses         68       68            
  Partials        8        8            

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@caronc
Copy link
Owner

caronc commented Aug 1, 2025

Much better! Thank you for your great work!

The last thing i'd ask you to do is help me put together a wiki page... you can share examples with even ChatGPT to help you build it... I'm here to help of course too

Edit: nevermind, i see that you did do this, but it was just commented out; thank you very much 🚀

@caronc caronc merged commit f4e3f6e into caronc:master Aug 1, 2025
16 checks passed
@rons4
Copy link
Contributor Author

rons4 commented Aug 2, 2025

Great news and thank you for all your help @caronc. It seems I cannot access the wiki repository. Here is my version of the SIGNL4 wiki file in case you still need it.
Notify_signl4.md

@caronc
Copy link
Owner

caronc commented Aug 2, 2025

No worries at all, adding it to this ticket (as you did was fine). I will be doing an official release this weekend so your timing is good. I'm due for a release as it's been several months since the last.

@rons4
Copy link
Contributor Author

rons4 commented Aug 2, 2025

Perfect and I am looking forward to the release. Have a great weekend ....

@caronc
Copy link
Owner

caronc commented Aug 2, 2025

Should be good to go

@rons4
Copy link
Contributor Author

rons4 commented Aug 4, 2025

It is live. Perfect and thanks a lot.

The documentation on our side looks like this:
https://docs.signl4.com/integrations/apprise/apprise.html
We are also going to post this in our channels shortly.

By the way, I found that I made a small mistake in the wiki:
https://github.com/caronc/apprise/wiki/Notify_signl4

The first example should be like this:
apprise -vv --title 'Alert from Apprise' --body 'Hello world.' 'signl4://secret'

The 'signl4://secret' part was missing. Sorry for that.

@caronc
Copy link
Owner

caronc commented Aug 4, 2025

No problem; fixed

@rons4
Copy link
Contributor Author

rons4 commented Aug 4, 2025

Thank you ;-)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants