In Flashduty On-call
You can get the push URL in either of the following ways.
Use a dedicated integration
- In the Flashduty console, select Channels and open a channel
- Select Settings → Integrations → Dedicated integrations, then click Add an integration
- Select Tactical RMM and click Save
- Open the generated integration card and copy the push URL
Use a shared integration
- In the Flashduty console, select Integration Center → Alert Events
- Select Tactical RMM and enter an integration name
- Configure the default route and select a channel; you can add more rules under Routes after creation
- Click Save and copy the generated push URL
Configure Tactical RMM
Create two webhooks, one for failure and one for recovery, then attach both to an alert template. Both webhooks use the Flashduty push URL, and the request bodies differ only in
status.
1
Create the failure webhook
- Sign in to the Tactical RMM console, go to URL Actions under Settings, and create a new webhook action (the menu location depends on your version)
- Set URL Pattern to the full Flashduty push URL, including
integration_key, and set the request method to POST - Set Request Headers to:
- Set Request Body to:
2
Create the recovery webhook
Create a second webhook with the same URL, method, and headers. Use the same request body, and change only the first line to
"status": "resolved".3
Attach them to an alert template
- Go to Settings → Alert Templates and create or edit the template used for on-call alerts
- In the action settings, set the type of Failure action to Rest and select the failure webhook. Set the type of Resolved action to Rest and select the recovery webhook
- Enable the alerts you need in the template’s agent, check, and task settings, and apply the template to the clients, sites, or policies you want
4
Save and verify
- On the webhook edit page, click Test without selecting a test target (agent, site, or client). Flashduty creates an Info alert titled
Tactical RMM test notification. It does not recover on its own, so close it manually after verifying. The Tactical RMM documentation says{{alert.XXX}}variables are not available in test mode. If you select a target, the variables may be replaced with other values, and Flashduty rejects the request becausealert_typeis invalid - Trigger a real alert (for example, stop a test agent) and confirm Flashduty receives an active alert
- After the alert recovers, confirm the matching Flashduty alert recovers
Event types
Alert Key
Flashduty computes the Alert Key from
alert_id ({{alert.id}}, the number of the alert record in Tactical RMM). The failure and recovery webhooks render from the same record, so the number is the same. If the same subject fails again after recovery, Tactical RMM creates a new alert record, so it is a new alert in Flashduty. Changes to severity, message, or hostname do not change the Alert Key, and requests without alert_id are rejected.
Use one Flashduty integration per Tactical RMM instance. Alert numbers from different instances can collide.
Status and severity
When
status is resolved the alert recovers and keeps its last severity.
Labels
Troubleshooting
- Flashduty returns an invalid-parameter error: the message names the field. Common causes are a request body without
alert_id, or analert_typeother thanavailability,check,task, orcustom(for example, when a test target was selected on the Test button) - The alert does not recover: confirm the recovery webhook exists, is set as the Resolved action of the alert template, and sends
"status": "resolved". The action result is visible in the alert details in Tactical RMM - Flashduty receives nothing: confirm the alert template is applied to the agent and the alert severity is not filtered out by the Info and Warning notification switches
- The request body is not valid JSON: if
{{alert.message}}contains double quotes, the JSON that Tactical RMM renders is invalid and Flashduty rejects it. Remove themessageline from the template and Flashduty builds the title from the alert type and hostname - The test alert stays open: the Test button does not send a recovery, so close it manually