Un bot Telegram che gira solo mentre il tuo laptop è aperto non è davvero in funzione — è una demo. Perché sia effettivamente online, a rispondere alle 3 di notte, a sopravvivere ai tuoi riavvii e ai propri crash, deve vivere su un server. Ecco l'intero percorso, dall'inizio alla fine, con i comandi.
Prima la buona notizia: un bot è un carico minuscolo. Sta per lo più inattivo in attesa di messaggi, quindi la macchina più economica lo esegue benissimo — niente IP dedicato, niente dominio, niente di elaborato.
1. Ottieni un token da BotFather
Su Telegram, scrivi a @BotFather, invia /newbot, scegli un nome e un username. Ti consegna un token che appare come 12345:AAH.... Trattalo come una password — chiunque lo possieda controlla il tuo bot.
2. Un bot minimale
Fai SSH nel server, configura Python e la libreria:
sudo apt update && sudo apt install -y python3-venv
mkdir ~/mybot && cd ~/mybot
python3 -m venv venv && source venv/bin/activate
pip install python-telegram-bot
Un bot che risponde — ~/mybot/bot.py:
import os
from telegram.ext import ApplicationBuilder, CommandHandler
async def start(update, ctx):
await update.message.reply_text("Alive and on a server. 🟢")
app = ApplicationBuilder().token(os.environ["BOT_TOKEN"]).build()
app.add_handler(CommandHandler("start", start))
app.run_polling()
Nota che legge il token da una variabile d'ambiente — non scritto a mano. Questo conta nel prossimo passo.
3. La parte che davvero lo tiene in funzione: systemd
Se esegui semplicemente python bot.py, muore nel momento in cui chiudi SSH. Un servizio systemd è ciò che lo fa sopravvivere a logout, crash e riavvii. Crea /etc/systemd/system/mybot.service:
[Unit]
Description=Telegram bot
After=network-online.target
[Service]
WorkingDirectory=/home/youruser/mybot
Environment=BOT_TOKEN=12345:AAH...your-token
ExecStart=/home/youruser/mybot/venv/bin/python bot.py
Restart=always
RestartSec=5
User=youruser
[Install]
WantedBy=multi-user.target
Poi:
sudo systemctl daemon-reload
sudo systemctl enable --now mybot
sudo systemctl status mybot # dovrebbe dire active (running)
journalctl -u mybot -f # log in tempo reale
Restart=always è la riga che fa il vero lavoro — va in crash, e torna in 5 secondi. enable significa che torna su dopo un riavvio. È tutta la differenza tra "ho eseguito un bot una volta" e "il mio bot è attivo".
4. Perché niente dominio o porte aperte
Il bot usa il long polling — raggiunge Telegram per gli aggiornamenti, quindi nulla deve raggiungere dentro. Nessun URL pubblico, nessuna regola firewall in entrata, nessun IP dedicato. È esattamente per questo che un VPS NAT (IP condiviso, SSH su una porta) è una casa comoda ed economica per un bot. I webhook esistono per volumi molto elevati, ma quasi certamente non ti servono per iniziare.
Avvertenze oneste
- Igiene del token: qui è inline nel file dell'unit per chiarezza — va bene su una macchina blindata, ma per qualsiasi cosa condivisa, caricalo invece da un
EnvironmentFileaccessibile solo a root, e non committarlo mai su git. Trapelato? Revocalo in BotFather, emettine uno nuovo. - Bot pesanti: se il tuo bot fa il lavoro da solo (generazione immagini, un modello locale), non è più minuscolo — dimensiona di conseguenza.
Ecco fatto. Blinda prima la macchina con la checklist di sicurezza, inserisci il servizio, e il tuo bot resta online che tu lo sia o no. Su un VPS pagato in crypto puoi averlo in funzione un minuto dopo che lo decidi.
Commenti
Ancora nessun commento. Sii il primo.