Recipe 01, Slack notification on webhook
Goal: when an external system POSTs to a Flero URL, post a formatted message to a Slack channel.
Difficulty: Beginner Β· Time: ~10 minutes Β· Connectors: Slack
πΈ Screenshot needed:
recipe-01__final.png, final canvas with three nodes: Webhook Trigger β Transform β Slack: Send Message, all green from a recent successful run.
Prerequisites
- A Flero workspace.
- A Slack credential, see Connector catalog β Slack for setup.
- A target Slack channel where you have permission to post (e.g.
#flero-test).
Finished workflow
ββββββββββββββββββββ ββββββββββββββββββ βββββββββββββββββββββββ
β Webhook Trigger βββββΆβ Transform βββββΆβ Slack: Send Message β
ββββββββββββββββββββ ββββββββββββββββββ βββββββββββββββββββββββStep-by-step
1. Create the workflow
/workflowsβ Create workflow.- Name:
Webhook to Slack. - Click Create.
2. Add the Webhook Trigger
- Right-click the Start node β Replace trigger β Webhook Trigger.
- In the inspector:
- Method:
POST - Secret: leave empty for now (we'll add one in Variations)
- Response mode:
Immediately, response code200
- Method:
- Copy the generated Webhook URL, you'll need it later.
3. Add the Transform node
We'll shape the incoming data into a Slack-friendly message.
- Drag a Transform node from the palette β place to the right of Webhook Trigger.
- Connect Webhook Trigger β Transform.
- In Transform's inspector, add a
mapoperation:map: channel: "#flero-test" text: ":bell: New event: *{{ $trigger.body.title }}* β {{ $trigger.body.description }}" - Save.
4. Add the Slack node
- Drag the Slack connector node from the palette β place to the right of Transform.
- Connect Transform β Slack.
- In the Slack inspector:
- Credential: your Slack credential
- Operation:
Send message - Channel:
{{ $node["Transform"].json.channel }} - Text:
{{ $node["Transform"].json.text }}
- Save.
5. Save and activate
- Click Save (
βS). - Status badge: change from
drafttoactive.
The webhook URL is now live.
Try it
Send a test request from your terminal:
curl -X POST <your webhook URL> \
-H "Content-Type: application/json" \
-d '{
"title": "Hello, world",
"description": "First webhook from outside Flero"
}'Switch to Slack β you should see:
:bell: New event: Hello, world, First webhook from outside Flero
Switch back to Flero β open the History tab β confirm the run shows green.
Variations
Verify a webhook signature
If the source service signs requests (Stripe, GitHub, β¦):
- Configure the Webhook Trigger's Secret to match the service's signing secret.
- Or for HMAC-based signing: add an Encryption / Hashing node between the Webhook Trigger and Transform; verify the signature; route to Transform only if valid.
See Webhook trigger β Security.
Add formatting
For richer messages, use Slack's Block Kit:
operation: Send message
text: (fallback for notifications)
blocks: a JSON array of blocksRoute by event type
Add an If or Switch node between Webhook Trigger and Transform to send different messages based on $trigger.body.eventType.
Skip duplicates
Add a Cache Storage node before Transform, see Common patterns β Idempotency.
Troubleshooting
| Symptom | Likely cause | Fix |
|---|---|---|
| Webhook URL returns 410 | Workflow not active | Set workflow status to active |
| Slack node fails with "channel_not_found" | Channel doesn't exist or bot isn't in it | Invite the bot to the channel; double-check spelling |
Slack message shows [EXPR-ERROR: β¦] |
Node name mismatch in expression | Verify the Transform node is named exactly "Transform" |
Message says undefined |
Trigger payload missing the field | Check the request body, title / description must be present |
Next
Found something out of date? This page lives in the Flero docs content set.