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

IDSIGNL4
ProviderDerdack GmbH
CategoryMessaging and Conferencing
From Version5.0.0
Docker Imagedemisto/python3:3.12.8.3296088
Supported ModulesAgentix 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

  1. Navigate to Settings > Integrations > Servers & Services.
  2. Search for SIGNL4.
  3. 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
  4. 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:

SIGNL4 Alert

Configuration parameters

  • secret — Team or Integration Secret (required)
  • proxy — Use system proxy settings

Commands (2)

  • signl4_alert

    Trigger a SIGNL4 alert.

  • signl4_close_alert

    Close an alert in SIGNL4

"""
Test script for the SIGNL4 ntegration

PARAMS:
    secret: The SIGNL4 team or integration secret.

"""

from CommonServerPython import *
from pytest_mock import MockerFixture
from SIGNL4 import (
    Client,
    send_signl4_alert,
    close_signl4_alert,
)


def test_send_signl4_alert_success(mocker: MockerFixture):
    """
    Given: A Client instance and alert data with all required fields.
    When: The send_signl4_alert function is called with the alert data.
    Then: The function should return a CommandResults object with the alert data.
    """
    # Mock client
    client = Client(base_url="https://connect.signl4.com/webhook/mock-secret", verify=False)

    # Mock client's send_signl4_alert method
    mock_response = {"eventId": "mock-event-id-12345"}
    mocker.patch.object(client, "send_signl4_alert", return_value=mock_response)

    # Test data
    json_data = {"title": "Test Alert", "message": "This is a test alert", "s4_external_id": "test-id-12345"}

    # Execute
    result = send_signl4_alert(client, json_data)

    # Assert
    assert result.outputs_prefix == "SIGNL4.AlertCreated"
    assert result.outputs_key_field == "eventId"
    assert result.outputs == mock_response
    assert isinstance(result, CommandResults)
    assert "SIGNL4 alert created" in result.readable_output


def test_signl4_close_alert_success(mocker: MockerFixture):
    """
    Given: A Client instance and alert data with all required fields.
    When: The close_signl4_alert function is called with the alert data.
    Then: The function should return a CommandResults object with the alert data.
    """
    # Mock client
    client = Client(base_url="https://connect.signl4.com/webhook/mock-secret", verify=False)

    # Mock client's send_signl4_alert method
    mock_response = {"eventId": "mock-event-id-12345"}
    mocker.patch.object(client, "close_signl4_alert", return_value=mock_response)

    # Test data
    json_data = {"s4_external_id": "test-id-12345"}

    # Execute
    result = close_signl4_alert(client, json_data)

    # Assert
    assert result.outputs_prefix == "SIGNL4.AlertClosed"
    assert result.outputs_key_field == "eventId"
    assert result.outputs == mock_response
    assert isinstance(result, CommandResults)
    assert "SIGNL4 alert closed" in result.readable_output