- Slack
- Discord
- Webhook
Slack setup
Kener posts to Slack using an Incoming Webhook. Each webhook URL is tied to a specific channel.Create a Slack app and enable incoming webhooks
- Go to api.slack.com/apps and click Create New App → From scratch.
- Name the app (e.g. “Kener Alerts”) and pick a workspace.
- In the left sidebar, click Incoming Webhooks and toggle Activate Incoming Webhooks on.
Add a webhook to a channel
Click Add New Webhook to Workspace, pick the channel you want alerts in, and click Allow.Copy the webhook URL — it looks like:
Create a Slack trigger in Kener
- In the Kener admin dashboard, go to Triggers → New Trigger.
- Set Trigger Type to slack.
- Paste the webhook URL into the URL field.
- Give the trigger a Name and click Create Trigger.
Default Slack payload
Kener uses Slack’s Block Kit format by default:Attach a trigger to an alert config
All three channel types attach to alert configs the same way:- Go to Alerts → Create Alert (or edit an existing one).
- Configure the monitor, condition, and thresholds.
- Under Notification Triggers, check the trigger(s) you want to notify.
- Click Create Alert.
Troubleshooting
Test trigger succeeds but alerts never fire
Test trigger succeeds but alerts never fire
Check that the alert config is Active (the toggle on the alerts list). Also confirm that the monitor has reached the
failure_threshold number of consecutive failures — Kener does not send a notification on the first failure if the threshold is greater than 1.Slack returns 400 or 'invalid_payload'
Slack returns 400 or 'invalid_payload'
The payload is not valid Block Kit JSON. Check that your custom template is valid JSON and that Mustache conditionals don’t break the structure. Test with the default template first to confirm the webhook URL is correct.
Discord returns 401 Unauthorized
Discord returns 401 Unauthorized
Webhook endpoint returns non-2xx
Webhook endpoint returns non-2xx
Kener logs the response status and body to the console when delivery fails. Check your server logs. Common causes: missing authentication header, wrong content type expected by the endpoint, or payload schema mismatch.