OctoPrint Notifications When a Print Finishes: Telegram, Discord, and Pushover Setup

Why this is the first OctoPrint feature people actually want

OctoPrint is sold on remote access and webcam streaming, but the feature most users actually use day-to-day is the print-finished notification. Long prints sit on the bed cooling for hours if nobody knows they finished. The bed cools below the glass-transition temperature of the filament and the part either pops free on its own or warps slightly as the bed shrinks faster than the print. Either way, the print is done — and you are the only person who does not know.

The good news is that OctoPrint has a healthy ecosystem of notification plugins, and the configuration is not the kind of thing that requires reading a forum thread for an hour. The bad news is that the official documentation talks about events and webhooks abstractly, while what most people want is a five-minute setup that lights up their phone when the print is done. This guide is the five-minute setup, with the gotchas annotated.

octoprint notifications when print finishes - finished print closeup

Pick a delivery channel before installing anything

The three channels that account for almost all real-world OctoPrint notification setups are Telegram, Discord, and Pushover. Email exists too, but it is the worst option in 2026 because phone notification systems aggressively suppress non-personal email and you will miss alerts. Skip email unless you have a reason.

Telegram has the lowest setup friction. You create a bot via the BotFather, it gives you a token, you paste the token into the OctoPrint plugin, and notifications start working. The plugin sends snapshots from your webcam alongside the text. If your webcam works inside OctoPrint, snapshots will work in the notification too. There is no monthly fee.

Discord is best if you already have a Discord server with a private channel for printer alerts. The plugin posts to a webhook URL — copy it from the channel settings, paste it into the plugin, done. Like Telegram, the snapshot embeds inline.

Pushover is the paid option ($5 one-time per platform). It is the right pick if you do not want to maintain a Telegram bot and you want notifications that bypass your phone’s Do Not Disturb mode for genuine emergencies. The OctoPrint plugin is mature and the delivery is the most reliable of the three.

Step 1 — install the plugin

From the OctoPrint web UI, open Settings → Plugin Manager → Get More. The relevant plugin names are OctoPrint-Telegram, OctoPrint-Discord, and OctoPrint-Pushover. Pick one, click Install, and let OctoPrint restart. The restart usually takes 30-90 seconds; if it sits longer than three minutes, your install is having issues unrelated to the plugin and you should check the OctoPrint logs.

After restart, the plugin appears as a new section in the left-hand Settings sidebar. Click into it. Every plugin has a slightly different first-screen layout, but they all want the same two pieces of information: a credential (token or webhook URL) and a list of which events to notify on.

Step 2 — get the credential

For Telegram: open Telegram, search for @BotFather, send /newbot, give it a name, give it a username ending in _bot, and BotFather replies with a token that looks like 1234567890:AAExampleTokenHereLongString. Paste that into the plugin’s Token field. Then you need your chat ID — message your new bot once, then visit https://api.telegram.org/bot[YOUR_TOKEN]/getUpdates in a browser, and look for the chat.id number. Some plugin versions can grab the chat ID automatically once you message the bot — try the auto-detect button first.

For Discord: open the Discord channel where you want notifications, click the gear icon next to the channel name, go to Integrations → Webhooks → New Webhook, give it a name like “OctoPrint”, and copy the Webhook URL. Paste that single URL into the plugin and you are done.

For Pushover: log into Pushover, copy your User Key from the dashboard, then create a new Application called “OctoPrint” and copy the API Token. Paste both into the plugin. The API Token field on the plugin is sometimes labeled “App Token” — it is the same thing.

octoprint notifications when print finishes - filament spool closeup

Step 3 — pick which events trigger notifications

This is the part most people configure once and forget about, and it is the part that decides whether your notifications are useful or annoying. The defaults usually include things like “started,” “paused,” “filament change,” “error,” and “completed.” Most of those should be off.

The events you actually want notifications for are: print done, print failed, and printer disconnected. That is it. You do not need a notification when a print starts — you started it. You do not need one for filament change requests if you are not nearby. Pause events are noisy because some slicers insert unintended pause commands.

If you have a filament runout sensor or an AI failure detector like Obico, those should also notify — but configure them in their own plugin, not in the print-state plugin, because they have richer context.

Step 4 — test before you trust it

Every plugin has a “Send Test Message” button. Use it. If the test message does not arrive within 30 seconds, your credential is wrong. Common errors: pasting the token with a leading space, using the bot’s display name instead of the chat ID, picking a Discord channel the webhook is not authorized for. The plugin’s logs (Settings → Logging) will tell you which one if you scroll to the bottom.

Once test works, run a 5-minute calibration print and confirm the print-done notification fires. Do not assume it works because the test worked — the print-done event is fired by a different code path than the test button on some plugins.

Snapshots: get them right or skip them

If your OctoPrint has a working webcam, the notification plugin will attach a snapshot. The snapshot is taken at the moment the event fires, so for “print done” you get a final shot of the bed. This is useful: you can tell at a glance if the print is on the bed or knocked over.

The most common reason snapshots fail to attach is that the plugin is reading the snapshot URL at the wrong time. The default URL is http://127.0.0.1:8080/?action=snapshot — if your webcam runs on a different port or address, edit it under Settings → Webcam & Timelapse → Snapshot URL, then test the snapshot from there before retrying the notification. If the snapshot loads in a browser at that URL, the plugin will be able to attach it.

Snapshots add latency and bandwidth. On slow internet connections, the plugin may time out trying to upload to Telegram before the snapshot finishes encoding. If you see notifications arriving without images, lower the resolution from 1280×720 to 640×480.

octoprint notifications when print finishes - hardware detail

Notification timing — the gotcha that matters

OctoPrint fires the print-done event when the gcode file finishes streaming, not when the printer is genuinely idle. If your end-of-print gcode includes long moves (parking the bed, wiping the nozzle, cooling sequences), the notification arrives before any of that finishes. This is correct behavior but it surprises people the first time — you walk to the printer expecting it to be done and the bed is still moving.

If you want notifications to fire only when the printer is truly stopped, set up an additional event-based hook on PrintDone with a delay equal to your end-gcode runtime. On a typical Bambu A1 / Ender 3 / Voron the end gcode runs 30-60 seconds; setting a 60-second delay aligns the notification with the printer actually being idle.

Failed-print notifications need extra thought

The print-failed event fires on errors OctoPrint can detect: thermal runaway, lost connection, manual cancel. It does not fire when the print fails in physical ways the gcode does not see — spaghetti, layer shift, nozzle dragging through the print. For those failures you need vision-based detection (Obico, Spaghetti Detective, or a paid service running an ML model on your stream).

If you are running an AI detector, configure its notifications separately from OctoPrint’s. The detector knows things OctoPrint does not, and you want it to talk in its own voice (“Possible spaghetti detected at layer 142”) rather than route through OctoPrint’s generic event handler.

Reliability: when notifications stop arriving

Notifications that worked yesterday and silently stop working today are almost always one of three things. First, the plugin developer pushed an update and the new version is incompatible with your OctoPrint version — check the plugin’s GitHub issues. Second, the messaging service revoked your token (Telegram does this if a bot is reported, Discord does this if a webhook is regenerated, Pushover does this if the app is deleted). Third, your Raspberry Pi clock drifted and HTTPS handshakes fail because the certificate validation rejects the time skew.

The clock-drift failure is the most insidious because nothing logs it clearly. If your Pi has been running for months without internet-side time sync, run sudo timedatectl status and verify NTP is active. If it says “NTP service: inactive,” that is your problem.

What to do once notifications work

Set up a private Telegram channel or Discord server just for printer events, mute it during work hours, and let it record the history. After a few weeks you will have a clean log of every print you ran, with snapshots, and a sense of how often things actually fail. That long-term history is the real value of OctoPrint notifications — not the immediate alerts but the audit trail.