A deploy that lands silently is a deploy you have to go check. Better to be told: a ping in Discord that says "shipped" — or, more usefully, "that ship failed." Falix gives you two clean ways to wire this up. This guide covers both and when to reach for each.
| At a glance | |
|---|---|
| You need | a server deploying from Git, and a Discord channel you can post to |
| Plan | any |
| Time | fifteen minutes |
Two approaches
| Approach | How it fires | Best for |
|---|---|---|
| Schedule webhook | A schedule with a webhook attached, triggered by the deploy | Alerts about the deploy event itself — started, completed, or failed |
| Post-deploy command | A curl that your deploy runs and posts to Discord |
A custom message with details you control (commit, version, what changed) |
They're not mutually exclusive — plenty of people run both.
Approach 1: a schedule webhook on deploy
Schedules can fire a webhook when they run, and a schedule can be tied to your deploy. Two ways to link them:
- A Manual schedule can be set to run after a Git deploy — the deploy finishing kicks it off.
- An Event schedule can trigger on git deployment completed directly.
Either way, once the schedule is tied to your deploy, attach a webhook to it. On the schedule you add a webhook URL — a Discord webhook, or any plain HTTPS endpoint — and pick which events notify you:
| Notify on | Tells you |
|---|---|
| Schedule started | the deploy hook began |
| Schedule completed | it finished cleanly |
| Task completed | a specific task in the schedule finished |
| Task failed | something in the schedule broke |
💡 Tip: Task failed is the alert most people actually want. Success is quiet by nature; it's the failed backup or the broken restart you need to hear about without watching the logs yourself. The webhook URL must be HTTPS, and there's a Test button to confirm it lands in the right channel before you rely on it.
This approach is the low-code one: no scripting, and it reports on the deploy machinery itself. See Automate your server with Schedules for the full builder.
Approach 2: post to Discord from a post-deploy command
For a message you compose — "Deployed commit abc123 ✅", a version bump, a changelog line — post to a Discord webhook yourself as a post-deploy command. A Discord webhook is just a URL you send an HTTP POST to; no bot, no token.
First, create the webhook in Discord: Edit Channel → Integrations → Webhooks → New Webhook → Copy Webhook URL. Keep that URL in your server's .env — treat it like a password. Then add a post-deploy command:
curl -X POST "$WEBHOOK_URL" \
-H "Content-Type: application/json" \
-d '{"content": "Deploy finished ✅", "username": "Falix Deploy"}'
What success and failure look like
Knowing the exact responses turns "it didn't work" into a two-second diagnosis:
| Response | Meaning |
|---|---|
204 No Content |
Success — the message posted. There's no body; that's the whole signal. |
404 {"message": "Unknown Webhook", "code": 10015} |
The URL is wrong or the webhook was deleted — fix the URL, not the code |
401 Unauthorized |
Right webhook ID, wrong token — re-copy the full URL |
400 Bad Request |
Malformed body — content must be a string and you must send Content-Type: application/json |
That 404 is worth understanding: it means Discord received and parsed your request and rejected only the missing webhook identity — so your curl is correct and the URL is the problem. The full treatment, including the Cloudflare User-Agent gotcha for raw Python requests, is in Post to a Discord webhook from any code.
⚠️ Heads up: For the post-deploy command to fire the alert, the deploy's post-deploy action and command order have to actually reach it. Put the notify command last so "deploy finished" only sends once the real work has run.
Which should you use?
- Want it in five minutes with no code, and mostly care about failures? Use the schedule webhook — the "task failed" alert is the highest-value notification on the platform.
- Want a rich, custom message with commit or version details? Use the post-deploy
curl— you control the payload, including embeds for a titled, colored card. - Want both? A schedule for the safety-net failure alert, and a
curlfor the nice "what shipped" message. They don't conflict.
Troubleshooting
- Nothing arrives — for the schedule webhook, use the Test button first; if the test lands but real deploys don't notify, check the schedule is actually tied to your deploy (Manual "after Git deploy" or the git-deployment event).
- Webhook URL rejected — schedule webhooks must be HTTPS. An
http://URL won't be accepted. 404 Unknown Webhookfrom the curl — the URL is wrong or the webhook was deleted; copy it again from the channel's Integrations page.- The alert never fires on a failed deploy — a post-deploy
curlonly runs if the deploy reaches it. To hear about failures, use the schedule's task failed event, which fires on the failure itself.