SIGNL4
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.
Messaging and Conferencing · SIGNL4
Details
| ID | SIGNL4 |
|---|---|
| Provider | Derdack GmbH |
| Category | Messaging and Conferencing |
| From Version | 5.0.0 |
| Docker Image | demisto/python3:3.12.8.3296088 |
| Supported Modules | Agentix Cloud Runtime Security Cloud Posture Security XSIAM EDR Cortex Cloud |
README
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.
Configure SIGNL4 on Cortex XSOAR
- Navigate to Settings > Integrations > Servers & Services.
- Search for SIGNL4.
-
Click Add instance to create and configure a new integration instance.
Parameter Description Required SIGNL4 team or integration secret True Use system proxy settings False - Click Test to validate the URLs, token, and connection.
Commands
You can execute these commands from the Cortex XSOAR CLI, as part of an automation, or in a playbook.
After you successfully execute a command, a SIGNL4 alert is either triggered or closed.
signl4_alert
Sends a mobile alert to a SIGNL4 team.
Base Command
signl4_alert
Input
| Argument Name | Description | Required |
|---|---|---|
| title | The title of the SIGNL4 alert. | Required |
| message | The message of the SIGNL4 alert. | Required |
| s4_external_id | The external ID is used to reference the alert in order to close it later. | |
| s4_service | The SIGNL4 category to use for this alert. | Optional |
| s4_location | Transmit location information (‘latitude, longitude’) with your event and display a map in the mobile app. | Optional |
| s4_alerting_scenario | If this event triggers an, 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. | Optional |
| s4_filtering | 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). | Optional |
Context Output
| Path | Type | Description |
|---|---|---|
| SIGNL4.AlertCreated.eventId | String | SIGNL4 event ID. |
Command example
!signl4-alert name="Test Alert"
Context Example
{
"title": "Alert from Cortex XSOAR",
"message": "Hello world.",
"s4_external_id": "id1234"
}
Human Readable Output
SIGNL4 alert created
{
"s4_external_id": "id1234"
}
signl4_close
Close a SIGNL4 alert.
Base Command
signl4_close_alert
Input
| Argument Name | Description | Required |
|---|---|---|
| s4_external_id | The external ID is used to reference the open alert which shall be closed. |
Context Output
| Path | Type | Description |
|---|---|---|
| SIGNL4.AlertClosed.eventId | String | SIGNL4 event ID. |
Command example
!signl4_close_alert name="Close Alert"
Context Example
{
"s4_external_id": "id1234"
}
Human Readable Output
SIGNL4 alert closed
{
"s4_external_id": "id1234"
}
This is how a SIGNL4 might look like in the mobile app:

Configuration parameters
secret— Team or Integration Secret (required)proxy— Use system proxy settings
Commands (2)
-
signl4_alertTrigger a SIGNL4 alert.
-
signl4_close_alertClose an alert in SIGNL4
from CommonServerPython import * class Client(BaseClient): def send_signl4_alert(self, json_data): payload = { "Title": json_data.get("title"), "Message": json_data.get("message"), "X-S4-ExternalID": json_data.get("s4_external_id"), "X-S4-Status": "new", "X-S4-Service": json_data.get("s4_service"), "X-S4-Location": json_data.get("s4_location"), "X-S4-AlertingScenario": json_data.get("s4_alerting_scenario"), "X-S4-Filtering": argToBoolean(json_data.get("s4_filtering", False)), "X-S4-SourceSystem": "CortexXSOAR", } return self._http_request(method="POST", json_data=payload) def close_signl4_alert(self, json_data): payload = { "X-S4-ExternalID": json_data.get("s4_external_id"), "X-S4-Status": "resolved", "X-S4-SourceSystem": "CortexXSOAR", } return self._http_request(method="POST", json_data=payload) def test_module(client): """ Performs basic get request to get item samples """ payload = {"title": "Test Alert from Cortex XSOAR", "X-S4-SourceSystem": "CortexXSOAR"} result = client.send_signl4_alert(json_data=payload) if "eventId" in result: demisto.results("ok") else: error_code = result["error_code"] description = result["description"] demisto.results(f"{error_code} {description}") def send_signl4_alert(client, json_data): result = client.send_signl4_alert(json_data) r = CommandResults( outputs_prefix="SIGNL4.AlertCreated", outputs_key_field="eventId", outputs=result, readable_output=tableToMarkdown("SIGNL4 alert created", result), raw_response=result, ) return r def close_signl4_alert(client, json_data): result = client.close_signl4_alert(json_data) r = CommandResults( outputs_prefix="SIGNL4.AlertClosed", outputs_key_field="eventId", outputs=result, readable_output=tableToMarkdown("SIGNL4 alert closed", result), raw_response=result, ) return r def main(): params = demisto.params() args = demisto.args() command = demisto.command() secret = params.get("secret", {}).get("password") if not secret: raise DemistoException("Team or integration secret must be provided.") demisto.debug(f"Command is {command}") try: # Remove proxy if not set to true in params handle_proxy() proxy = params.get("proxy", False) client = Client(base_url=f"https://connect.signl4.com/webhook/{secret}", proxy=proxy) if command == "test-module": test_module(client) elif command == "signl4_alert": return_results(send_signl4_alert(client, json_data=args)) elif command == "signl4_close_alert": return_results(close_signl4_alert(client, json_data=args)) except Exception as ex: return_error(str(ex)) if __name__ == "__builtin__" or __name__ == "builtins": main()