Starting today you may configure notification preferences at the project and account level!
Integrate with Slack in 1-click
Adding Slack notifications to your deployment workflow has never been easier. Visit Project Settings > Notifications, click "Add to Slack", select a workspace, select a channel, and you're set!
From there you'll be able to configure when you want to receive notifications to your Slack channel.
Once the FlexStack for Slack app is installed, you'll start receiving notifications based on those settings.
Manage account email notifications
To manage your email notifications, head over to Account Settings > Notifications. Here you'll be able to select which email you want to receive notifications to, in addition to if/when you want to be notified. Alternatively, click "Unsubscribe from all" to remove all email notifications.
Configure an endpoint to receive webhook notifications
When you add webhook notifications to a project, we'll send a POST request to the URL you specify. We will retry these requests for up to 24 hours if we don't receive a 2xx status code in response. Each request contains a payload with an event id
, type
, timestamp
, and data
payload. For example:
Each webhook request is signed with a secret prefixed with sig_
that you'll receive after you create the integration. You can use the X-FlexStack-Signature
header to validate requests received by your webhook endpoint.
Keep this in mind when validating the request:
- FlexStack uses a HMAC hexadecimal digest to compute the hash.
- The signature header value always starts with
sha256=
. - The signature is generated using your webhook's secret token and the payload contents. Pseudo code for this would look like
signature = hash.sha256(requestBody, webhookSecret)
. - The webhook secret can be found and copied in your webhook notification settings.
- You need to handle the payload as UTF-8.
- Never use a plain
==
operator to compare signatures. Use methods likecrypto.timingSafeEqual
orsubtle.ConstantTimeCompare
which perform constant time comparisons to help mitigate timing attacks.