telegram-bot-se-python

Telegram bot σε Python για παρακολούθηση uptime ιστοσελίδας (downtime alerts, logs, /status)

Τελευταία ενημέρωση: 07/01/2026
Χρόνος ανάγνωσης: 8 λεπτά
4.5/5 - (2 votes)

Θες να ξέρεις άμεσα όταν μια ιστοσελίδα πέσει, χωρίς να ανοίγεις συνέχεια browser; Θα στήσεις ένα Telegram bot σε Python που κάνει έλεγχο uptime ανά 1, 5 ή 15 λεπτά, στέλνει ειδοποίηση μόνο όταν αλλάζει η κατάσταση (UP ή DOWN), κρατάει logging σε αρχείο και απαντά σε /status με μια καθαρή εικόνα του τι συμβαίνει. Ο οδηγός είναι απλός, με βήματα και πρακτικές επιλογές που δουλεύουν στην πράξη.

Telegram bot σε Python για παρακολούθηση uptime ιστοσελίδας

Πίνακας Περιεχομένων

Τι χρειάζεσαι πριν ξεκινήσεις (και ποια βιβλιοθήκη να διαλέξεις)

Για να το σηκώσεις χωρίς δράματα, φρόντισε να έχεις τα βασικά:

  • Python 3.11+ (ιδανικά 3.12)
  • Έναν λογαριασμό Telegram
  • Bot token από το BotFather
  • Ένα URL που θες να ελέγχεις (ιδανικά και ένα σταθερό endpoint τύπου /health)
  • Ένα μέρος να τρέχει 24/7 (ακόμα και προσωρινά, το laptop σου κάνει για δοκιμή)

Πριν γράψεις γραμμή, αξίζει να ξεχωρίσεις δύο τρόπους λειτουργίας για τα bots:

Polling: το bot “ρωτάει” το Telegram ανά λίγα δευτερόλεπτα αν υπάρχει νέο μήνυμα. Είναι πιο εύκολο για αρχή, δεν θες δημόσιο server και SSL.
Webhook: το Telegram “σπρώχνει” updates σε URL που του δίνεις. Είναι πιο σωστό για production servers, αλλά έχει παραπάνω ρυθμίσεις.

Το 2026 οι πιο συνηθισμένες βιβλιοθήκες είναι οι python-telegram-bot και pyTelegramBotAPI. Εδώ πας με python-telegram-bot, επειδή έχει δυνατή job queue και async φιλοσοφία που ταιριάζει πολύ με scheduled checks. Κράτα τα επίσημα docs για αναφορά: python-telegram-bot documentation.

Telegram bot σε Python που παρακολουθεί uptime ιστοσελίδας και στέλνει ειδοποιήσεις downtime

Γρήγορη εγκατάσταση πακέτων και βασικές ρυθμίσεις

Θα χρειαστείς 2 “κομμάτια”: Telegram client και HTTP client.

  • python-telegram-bot
  • httpxrequests, αλλά το httpx κουμπώνει ωραία με async)

Φτιάξε ένα αρχείο, π.χ. uptime_bot.py, και κράτα τα μυστικά σου εκτός κώδικα. Μην γράφεις token και chat id hardcoded, θα το μετανιώσεις όταν ανέβει σε Git.

Βάλε μεταβλητές περιβάλλοντος όπως:

  • BOT_TOKEN
  • CHAT_ID
  • SITE_URL

Έτσι, αλλάζεις εύκολα περιβάλλον (dev, server) χωρίς να πειράζεις κώδικα και χωρίς να εκθέτεις token σε logs.

Πώς κάνεις σωστό uptime check σε μια ιστοσελίδα

Uptime check σημαίνει κάτι απλό: κάνεις HTTP request και κρίνεις την απάντηση. Το “απλό” όμως θέλει 2-3 κανόνες για να μην έχεις ψευδείς συναγερμούς.

Τι ελέγχεις σε κάθε check:

  • Status code: συνήθως θεωρείς UP ό,τι είναι 200-399 (OK και redirects).
  • Timeout: βάλε μικρό και αυστηρό όριο, π.χ. 10s. Αν αφήσεις μεγάλο timeout, το bot θα “κολλάει” και θα χάνει κύκλους.
  • User-Agent: μερικά sites κόβουν άγνωστα clients. Ένας απλός user-agent τύπου “UptimeBot/1.0” βοηθάει.
  • Σφάλματα δικτύου: DNS failure, SSL error, connection refused, όλα αυτά είναι DOWN μέχρι να αποδειχτεί το αντίθετο.

Το πιο σημαντικό, μην στέλνεις μήνυμα σε κάθε check. Αν ελέγχεις κάθε 1 λεπτό, θα κάνεις spam στον εαυτό σου. Στέλνεις μόνο όταν αλλάζει κατάσταση.

 

Κανόνες για ειδοποιήσεις downtime χωρίς spam (state, retries, cooldown)

Σκέψου το σαν θερμοστάτη, δεν θες να “χτυπάει” κάθε δευτερόλεπτο, θες να σε ειδοποιεί όταν αλλάξει κάτι.

State: κράτα την τελευταία γνωστή κατάσταση, π.χ. last_state = UP/DOWN. Στέλνεις ειδοποίηση μόνο όταν πας από UP σε DOWN. Προαιρετικά στέλνεις και “επανήλθε” όταν γυρίσει σε UP.

Retries: πριν αποφασίσεις ότι είναι DOWN, κάνε 2 γρήγορα retries (με μικρό διάστημα). Ένα στιγμιαίο hiccup ή μια μικρή καθυστέρηση δεν πρέπει να σου σηκώνει συναγερμό.

Cooldown: αν το site είναι ήδη DOWN, μην επαναλαμβάνεις την ίδια ειδοποίηση κάθε λεπτό. Αν θες υπενθύμιση, στείλε ανά Χ λεπτά (π.χ. κάθε 30), ή απλά κράτα σιωπή και βασίσου στο “UP again” μήνυμα.

Logging σε αρχείο για να βλέπεις ιστορικό και σφάλματα

Τα μηνύματα στο Telegram είναι καλά για άμεση ενημέρωση, αλλά το log είναι αυτό που σε σώζει όταν ψάχνεις “τι έγινε στις 03:12;”.

Σε κάθε check αξίζει να γράφεις:

  • timestamp
  • URL
  • αποτέλεσμα (UP ή DOWN)
  • χρόνο απόκρισης (ms)
  • error message (αν υπάρχει)

Για να μη φουσκώνει το αρχείο, χρησιμοποίησε rotating logs με RotatingFileHandler. Στη λογική:

  • INFO για κανονικά checks
  • WARNING όταν έχεις retries ή περίεργες αποκρίσεις
  • ERROR όταν χαρακτηρίζεις DOWN ή έχεις εξαιρέσεις

Έτσι κρατάς ιστορικό χωρίς να γεμίζεις δίσκο.Διάγραμμα αρχιτεκτονικής για uptime monitoring bot σε Python με HTTP checks, Telegram alerts και logging

Χτίζεις το Telegram bot σε Python, scheduling ανά 1, 5, 15 λεπτά και εντολή /status

Αν το σπάσεις σε καθαρά κομμάτια, το bot μένει διαχειρίσιμο:

  • Config: διαβάζεις BOT_TOKEN, CHAT_ID, SITE_URL
  • check function: κάνει request, μετρά χρόνο, επιστρέφει αποτέλεσμα
  • state: κρατά last status, last check time, last response time, down_since
  • job: τρέχει περιοδικά, αποφασίζει αν θα ειδοποιήσει, γράφει logs
  • handler: /status που απαντάει άμεσα

Η JobQueue του python-telegram-bot είναι ιδανική για τέτοιες δουλειές. Για παραδείγματα και φιλοσοφία, δες τα επίσημα examples: python-telegram-bot examples και ένα απλό timer bot στο GitHub: timerbot.py.

Scheduling για 1, 5, 15 λεπτά, απλό και προβλέψιμο

Έχεις δύο λογικές, αλλά για ένα URL συνήθως θες τη λιγότερο “θορυβώδη”.

Προσέγγιση A (προτείνεται για 1 URL): κάνεις check κάθε 1 λεπτό, και κρατάς μετρητή κύκλων. Κάθε 5 κύκλους σημειώνεις extra “5-min checkpoint” στο log, και κάθε 15 αντίστοιχα. Το μεγάλο κέρδος είναι ότι δεν χτυπάς την ιστοσελίδα τρεις φορές.

Προσέγγιση B: ξεχωριστά jobs για 1, 5, 15 λεπτά. Έχει νόημα όταν ελέγχεις διαφορετικά URLs ή διαφορετικά endpoints (π.χ. homepage ανά 15, /health ανά 1).

Η εντολή /status, τι να δείχνει για να σε βολεύει πραγματικά

Το /status δεν πρέπει να είναι “OK” και τέλος. Θες να το ανοίγεις και να καταλαβαίνεις σε 2 δευτερόλεπτα τι γίνεται.

Καλό περιεχόμενο απάντησης:

  • Κατάσταση: UP ή DOWN
  • Ώρα τελευταίου ελέγχου
  • Τελευταίο response time
  • Αν είναι DOWN, πόση ώρα είναι κάτω (π.χ. από down_since)

Αν κρατάς state μόνο στη μνήμη, με restart χάνεται. Αν θες κάτι πιο μόνιμο, μια απλή λύση είναι να γράφεις το τελευταίο state σε JSON αρχείο, ή να χρησιμοποιήσεις SQLite. Δεν χρειάζεται να το κάνεις από την πρώτη μέρα.

Dashboard παρακολούθησης uptime με logs, retries και ενδείξεις UP ή DOWN για troubleshooting

Troubleshooting και λειτουργία 24/7, κοινά λάθη και πρακτικές ασφάλειας

Τα πιο συχνά “γιατί δεν δουλεύει” είναι βαρετά, αλλά προβλέψιμα.

Δεν έρχονται μηνύματα: έχεις λάθος CHAT_ID, ή δεν έχεις ξεκινήσει chat με το bot (συνήθως πρέπει να του στείλεις πρώτα ένα “γεια”).
Timeouts συνέχεια: το timeout είναι υπερβολικά χαμηλό, ή ο server σου δεν έχει καλή σύνδεση.
Λάθος URL: λείπει https://, ή ελέγχεις endpoint που κάνει redirect σε login.
SSL προβλήματα: παλιά certificates ή corporate proxies μπορεί να προκαλέσουν false DOWN.
Rate limits / μπλοκάρισμα: αν κάνεις πολλά requests, κάποια sites σε κόβουν, ειδικά πίσω από WAF.

Ασφάλεια:

  • Κράτα το BOT_TOKEN μυστικό, μόνο env vars.
  • Μην κάνεις log headers, tokens, ή URLs με ευαίσθητα query params.
  • Αν τρέχεις σε VPS, κλείδωσε πρόσβαση (ssh keys, ενημερώσεις).

Για 24/7 λειτουργία, οι πρακτικές επιλογές είναι:

  • VPS με systemd service (σταθερό και απλό)
  • Docker container
  • Ένα μικρό always-on μηχάνημα στο σπίτι, αν σε καλύπτει

Το webhook είναι πιο “σωστό” σε server περιβάλλον, αλλά για monitoring jobs το polling είναι μια χαρά, ειδικά στην αρχή.

Όταν το bot λέει DOWN αλλά το site ανοίγει, τι να ελέγξεις

Αν βλέπεις το site στον browser, αλλά το bot επιμένει DOWN, συνήθως φταίει κάτι από τα παρακάτω:

  • CDN ή WAF που επιστρέφει άλλο status σε “άγνωστο” user-agent
  • Redirect σε login, που στον browser φαίνεται “ΟΚ”, αλλά το endpoint δεν είναι αυτό που θες
  • Geo restrictions, το VPS σου είναι σε χώρα που μπλοκάρεται
  • Firewall που κόβει το IP σου λόγω συχνών checks
  • Χρειάζεσαι πιο σωστό endpoint, π.χ. /health που επιστρέφει καθαρό 200

Κράτα και το response time. Μερικές φορές το site “ανοίγει”, αλλά σέρνεται και πρακτικά είναι πρόβλημα.

Πώς το κάνεις πιο αξιόπιστο χωρίς να γίνει περίπλοκο

Μικρές βελτιώσεις που δίνουν αξία χωρίς να σε πνίξουν:

  • Backoff σε αποτυχίες (όταν αποτυγχάνει, περίμενε λίγο παραπάνω πριν retry)
  • Δεύτερο URL για επιβεβαίωση (π.χ. /health και /)
  • Αποθήκευση τελευταίου state σε JSON για επιβίωση μετά από restart
  • Ξεχωριστό error log για να μην χάνεις τα σημαντικά μέσα στα INFO

Πρώτα κάνε το check σταθερό, μετά πρόσθεσε τα extra.

Οθόνη Telegram bot που εμφανίζει status uptime ιστοσελίδας με τελευταία μέτρηση και χρόνο απόκρισης

FAQ για Telegram bot σε Python και uptime monitoring

Πόσο συχνά να κάνω uptime check, κάθε 1 ή 5 λεπτά;

Αν το site είναι κρίσιμο, το 1 λεπτό βγάζει νόημα. Για πιο “χαλαρή” παρακολούθηση, τα 5 λεπτά μειώνουν requests και false alarms. Κράτα retries για να μην σε τρελαίνουν μικροκολλήματα.

Polling ή webhook για Telegram bot;

Το polling είναι πιο εύκολο όταν δεν έχεις public server και SSL. Το webhook είναι καλύτερο σε μόνιμο server setup, αλλά θέλει σωστή δικτύωση και endpoint. Για monitoring bot, το polling αρκεί για αρχή.

Πώς βρίσκεις το chat id για να στέλνει το bot ειδοποιήσεις;

Ο πιο απλός τρόπος είναι να στείλεις ένα μήνυμα στο bot και να διαβάσεις τα updates (π.χ. με ένα προσωρινό debug handler). Εναλλακτικά, μπορείς να το κάνεις μέσα από admin bots σε groups. Το βασικό είναι να έχεις ξεκινήσει συνομιλία.

Τι σημαίνει status 503 στο uptime check;

Συνήθως σημαίνει “Service Unavailable”, δηλαδή ο server ή κάτι μπροστά του (load balancer, CDN) δεν μπορεί να εξυπηρετήσει. Μπορεί να είναι προσωρινό λόγω φόρτου ή συντήρησης. Με retries θα δεις αν είναι στιγμιαίο.

Πώς κρατάς logs χωρίς να μεγαλώνουν για πάντα;

Χρησιμοποίησε rotating logs, π.χ. με μέγιστο μέγεθος και μερικά backups. Έτσι έχεις ιστορικό ημερών χωρίς να γεμίζει ο δίσκος. Κράτα ξεχωριστά τα errors για πιο γρήγορο διάβασμα.

Μπορείς να παρακολουθείς πολλά sites με ένα bot;

Ναι, απλά κράτα state ανά URL και βάλε είτε λίστα sites είτε διαφορετικά jobs. Πρόσεξε να μη στέλνεις πολλά μηνύματα ταυτόχρονα. Καλό είναι να ομαδοποιείς ειδοποιήσεις όταν πέφτουν πολλά μαζί.

Τι κάνεις αν το site σε μπλοκάρει λόγω συχνών checks;

Μείωσε τη συχνότητα, βάλε σωστό user-agent και χτύπα ένα ελαφρύ endpoint (π.χ. /health). Αν έχεις έλεγχο στο server, κάνε allowlist το IP του VPS. Μην προσπαθείς να “παίξεις κρυφτό” με συνεχείς αλλαγές, θα το κάνεις χειρότερο.

Συμπέρασμα

  • Κάνεις uptime check με HTTP request, σωστό status range και timeout.
  • Στέλνεις ειδοποιήσεις μόνο όταν αλλάζει κατάσταση, με retries για λιγότερα false alarms.
  • Κρατάς logging σε αρχείο με rotating logs για ιστορικό και σφάλματα.
  • Τρέχεις scheduling ανά 1 λεπτό, και “χτίζεις” 5 και 15 λεπτά χωρίς περιττά requests.
  • Έχεις /status για να βλέπεις άμεσα UP/DOWN, last check και response time.