done) and has no start event, so a change has no Processing state and is recorded directly with its end state: Done, Failed, or Canceled.
In Flashduty On-call
- In the Flashduty console, go to Integration Center → Change Events
- Select Semaphore and enter an integration name
- To assign changes to specific channels, add rules under the integration’s Routes that match labels such as
project,ref, orpipeline - Click Save and copy the generated Push URL
Configure Semaphore
1
Create a notification
In the Semaphore console, open Notifications, create a notification, and add a rule:
- Name: a recognizable name, for example
Flashduty - Filters (optional): filter by Projects, Branches, Tags, Pipelines (YAML files), and Results. Empty means no restriction. Valid Results are
passed,failed,stopped, andcanceled; leave it empty so all four are sent - Webhook endpoint: paste the full Push URL of the Flashduty integration
- Secret name: the name of a Semaphore secret, not free text. Leave it empty. Flashduty authenticates with the
integration_keyin the Push URL and does not verifyX-Semaphore-Signature-256
2
Adjust timeout and retries (recommended)
Semaphore’s default response timeout is 500 milliseconds with no retries. If Flashduty answers slower than that, the delivery counts as failed and is not sent again. Run
sem edit notification flashduty and add to the webhook configuration:retries applies only to timeouts and resends the same body, so Flashduty does not record a duplicate.3
Run a pipeline
Semaphore has no test delivery. Run a pipeline in a project the notification covers; when it ends, the change appears in the Flashduty change list.
What one change is
Status mapping
These deliveries return success but record no change:
- Deliveries whose
pipeline.stateis notdone
Change content
Labels for routing and for filtering the change list:
FAQ
Why is there no running state for a pipeline?
Why is there no running state for a pipeline?
Semaphore webhook notifications are sent only when a pipeline ends; there is no start event. The change appears with its final status when the pipeline ends.
Does a Semaphore retry record a duplicate?
Does a Semaphore retry record a duplicate?
No. A retry carries the same body, and Flashduty de-duplicates on the pipeline’s end time, so it is recorded once.
The delivery returns an InvalidParameter error?
The delivery returns an InvalidParameter error?
pipeline.id is missing: the body is incomplete; make sure it comes from a Semaphore webhook notificationunknown pipeline.result: a pipeline result value we have not mapped; contact us to add itinvalid pipeline.done_at: the time field in the body is malformed
No change appears?
No change appears?
- Notifications are sent for rules created by users who can access the project; make sure the user who created the notification is at least a member of the project
- Check that the rule’s filters do not exclude the project, branch, or result
- Semaphore’s default 500 ms timeout may be too short to wait for the response; see the timeout and retries step above