
Introduzione: perché automatizzare l'invio con un bot Telegram
L'invio automatico di messaggi con un bot Telegram è una delle funzionalità più richieste per chi gestisce comunità, canali di notifica o servizi automatizzati. Che si tratti di inviare promemoria quotidiani, aggiornamenti meteo, notifiche da un sistema di monitoraggio o semplicemente messaggi programmati a un gruppo, un bot ben configurato può risparmiare ore di lavoro manuale. In questa guida vedremo come funziona l'invio automatico sfruttando l'API ufficiale di Telegram, dalla creazione del bot fino all'implementazione pratica con codice, senza trascurare limiti, costi e alternative no-code.
Prerequisiti: creare il bot e ottenere il token
Prima di ogni altra cosa, è necessario disporre di un bot Telegram. La procedura è semplice e si svolge interamente tramite il BotFather, il bot ufficiale di Telegram per la gestione dei bot. Apri Telegram, cerca @BotFather e avvia una chat. Invia il comando /newbot e segui le istruzioni: scegli un nome e un username (deve terminare con 'bot'). Al termine, BotFather ti fornirà un token, una stringa di circa 40 caratteri che identifica univocamente il tuo bot. Conservalo con cura, perché chiunque possieda il token può controllare il bot.
Oltre al token, per inviare messaggi automatici dovrai conoscere l'identificativo della chat di destinazione (chat_id). Può essere un ID utente, un ID gruppo o un ID canale. Per ottenere il tuo chat_id personale, invia un messaggio al bot (appena creato) e poi usa l'API getUpdates (o un client come Telegram Web) per leggere l'ID. Per un canale, il bot deve essere aggiunto come amministratore, e l'ID del canale sarà un numero negativo (es. -1001234567890).
Consiglio: Per testare rapidamente l'invio, puoi usare direttamente il tuo chat_id personale. In seguito, sostituiscilo con quello del gruppo o canale target.
Il cuore dell'invio automatico: l'API di Telegram
L'API Bot di Telegram espone diversi metodi per inviare messaggi. Il più comune è sendMessage, che accetta parametri come chat_id, text, parse_mode (per Markdown o HTML), disable_web_page_preview e altri. Ma esistono anche metodi per inviare foto, documenti, video, sticker, sondaggi e persino eseguire azioni come sendChatAction per simulare la digitazione.
Metodo sendMessage
La chiamata a sendMessage può essere effettuata via HTTP GET o POST, ma la pratica più comune è usare una libreria client. L'endpoint è https://api.telegram.org/bot<TOKEN>/sendMessage. La risposta, in caso di successo, contiene l'oggetto Message inviato. In caso di errore, riceverai un codice di stato HTTP e un oggetto JSON con la descrizione del problema.
Altri metodi di invio
A seconda del tipo di contenuto, puoi usare sendPhoto, sendDocument, sendVideo, sendAudio, sendAnimation, sendVoice, sendVideoNote, sendMediaGroup (per album), sendLocation, sendVenue, sendContact, sendPoll, sendDice, sendChatAction, sendInvoice e sendGame. Tutti seguono la stessa struttura di base: endpoint specifico con parametri propri.
Due approcci: polling vs webhook
Per ricevere gli aggiornamenti (come i messaggi in arrivo) e automaticamente inviare risposte, il bot deve ascoltare le richieste. Telegram offre due meccanismi: polling e webhook. La scelta dipende dalle esigenze di latenza, risorse e infrastruttura.
Polling: semplice e diretto
Nel polling, il bot interroga periodicamente l'API getUpdates per ottenere nuovi messaggi. È l'approccio più semplice da implementare: non richiede un server pubblico con dominio HTTPS, basta un ambiente in grado di eseguire codice (un PC, un Raspberry Pi, un droplet). Lo svantaggio è la latenza (dipende dall'intervallo di polling) e il consumo di risorse se il bot è inattivo. Adatto per bot personali o a basso volume.
Webhook: efficiente e scalabile
Con il webhook, Telegram invia automaticamente gli aggiornamenti a un URL pubblico del tuo server ogni volta che si verifica un evento. Questo riduce la latenza al minimo e scarica il polling dal tuo client. Tuttavia, richiede un server con un dominio HTTPS valido e un certificato SSL (anche autofirmato, ma Telegram richiede HTTPS per sicurezza). Per impostare un webhook, usa il metodo setWebhook passando l'URL del tuo endpoint. Se il bot deve solo inviare messaggi programmati (senza leggere input), il polling è spesso la scelta più semplice, perché non devi gestire un server web permanente.
Attenzione: Non puoi usare contemporaneamente polling e webhook. Se configuri un webhook, le chiamate a getUpdates restituiranno un errore fino a quando non elimini il webhook con deleteWebhook.
Esempio pratico: bot che invia un messaggio automatico ogni ora
Vediamo un esempio concreto: un bot che invia un messaggio programmato a un orario prestabilito, senza bisogno di input esterni. Useremo Python con la libreria python-telegram-bot (versione 20.x al momento della scrittura) e APScheduler per la schedulazione. L'esempio presuppone che tu abbia già installato Python e le dipendenze (pip install python-telegram-bot apscheduler).
Codice Python
from telegram import Bot
from telegram.error import TelegramError
from apscheduler.schedulers.background import BackgroundScheduler
import time
# Inserisci qui il tuo token e il chat_id di destinazione
TOKEN = '1234567890:ABCdefGHIjklMNOpqrsTUVwxyz'
CHAT_ID = '123456789' # o -100... per canali
def send_scheduled_message():
bot = Bot(token=TOKEN)
try:
bot.send_message(chat_id=CHAT_ID, text="Promemoria: è ora di fare una pausa!")
print("Messaggio inviato con successo")
except TelegramError as e:
print(f"Errore durante l'invio: {e}")
if __name__ == '__main__':
scheduler = BackgroundScheduler()
# Invia ogni ora, all'inizio dell'ora
scheduler.add_job(send_scheduled_message, 'interval', hours=1)
scheduler.start()
print("Scheduler avviato. Premi Ctrl+C per fermare.")
try:
while True:
time.sleep(60)
except KeyboardInterrupt:
scheduler.shutdown()
Spiegazione passo dopo passo
Il codice crea un'istanza di Bot con il token. La funzione send_scheduled_message viene eseguita periodicamente dallo scheduler. Abbiamo usato un trigger interval di 1 ora, ma puoi usare cron per orari specifici (es. ogni giorno alle 9:00). Lo scheduler è in background, quindi il programma rimane in esecuzione. Per fermarlo, usa Ctrl+C. Questo approccio funziona su qualsiasi sistema che possa eseguire Python 24/7, come un server, un Raspberry Pi o un container Docker.
Per messaggi più complessi, puoi arricchire il testo con Markdown o HTML, allegare file o aggiungere pulsanti inline. Ad esempio, per inviare un messaggio formattato in Markdown:
bot.send_message(chat_id=CHAT_ID, text="*Importante*: riunione alle 15:00", parse_mode='Markdown')
Alternative senza codice: servizi di terze parti
Non tutti hanno familiarità con la programmazione. Esistono servizi web che consentono di configurare bot Telegram per l'invio automatico senza scrivere una riga di codice. Questi strumenti offrono interfacce grafiche per creare messaggi programmati, impostare condizioni e gestire più chat. Alcuni esempi (senza fare nomi specifici, ma verificabili cercando "Telegram bot builder" o "no-code Telegram bot") permettono di collegare il bot tramite token e definire trigger temporali. Tuttavia, devi valutare attentamente la sicurezza: condividere il token con un servizio esterno espone il bot a rischi. Controlla sempre la reputazione del servizio, le policy sulla privacy e se supporta l'invio su webhook o polling. Inoltre, molti servizi gratuiti hanno limiti sul numero di messaggi al giorno o richiedono un abbonamento per funzionalità avanzate.
Limitazioni e considerazioni
L'invio automatico di messaggi con un bot Telegram è soggetto a limiti imposti da Telegram e a considerazioni pratiche di cui tenere conto per evitare blocchi o malfunzionamenti.
Rate limiting
Telegram applica un limite di circa 30 messaggi al secondo per bot. Se superato, l'API restituirà un errore 429 Too Many Requests con un suggerimento di attendere. Per invii di massa (es. notifiche a migliaia di utenti), è consigliabile distribuire le richieste su un intervallo di tempo, usando un ritardo tra i messaggi o implementando un backoff esponenziale. Inoltre, ogni messaggio non può superare i 4096 caratteri (per testo normale) o 1024 per i caption delle media; per testi più lunghi, suddividi il contenuto in più messaggi.
Privacy e sicurezza
Il token del bot è la chiave di accesso: non va mai condiviso pubblicamente, incluso in repository pubblici. Se sospetti che sia stato compromesso, revocalo immediatamente da BotFather con il comando /revoke. Inoltre, se il bot invia messaggi a utenti senza che questi lo abbiano avviato, Telegram potrebbe limitare il bot (i bot non possono inviare messaggi a utenti che non hanno interagito prima, a meno che l'utente non abbia disattivato la privacy). Per i canali, il bot deve essere amministratore. Per i gruppi, il bot deve essere membro e avere i permessi necessari.
Costi infrastrutturali
Se scegli l'approccio polling, lo script deve essere eseguito su un dispositivo sempre acceso. Un server virtuale economico (es. VPS) può costare pochi euro al mese, ma per bot a basso traffico anche un Raspberry Pi a casa va bene (con una connessione stabile). Per il webhook, avrai bisogno di un server pubblico con dominio HTTPS, che può essere un servizio serverless (es. AWS Lambda, Cloud Functions) o un VPS. I costi dipendono dal volume di messaggi e dalla complessità.
Risoluzione dei problemi comuni
Durante l'implementazione, potresti incontrare alcuni errori. Ecco i più frequenti e come risolverli.
- Errore 401 Unauthorized: Il token non è valido. Verifica di aver copiato correttamente il token da BotFather, senza spazi. Se il problema persiste, revoca e rigenera il token.
- Errore 400 Bad Request: chat not found: Il chat_id specificato non esiste o il bot non può accedervi. Controlla che il bot sia aggiunto al gruppo o canale e che tu abbia il permesso di inviare messaggi. Per i gruppi, l'ID può essere negativo (es. -100...).
- Errore 403 Forbidden: bot was blocked by the user: L'utente ha bloccato il bot. In questo caso, non puoi più inviargli messaggi. Rimuovi l'utente dalla lista di destinazione.
- Nessun messaggio ricevuto dopo il webhook: Verifica che il tuo server risponda con un certificato HTTPS valido e che l'URL configurato sia accessibile. Usa
getWebhookInfoper diagnosticare lo stato. - Il bot non invia messaggi programmati: Controlla che lo scheduler sia in esecuzione e che il fuso orario sia impostato correttamente (usa
timezonein APScheduler).
Scenari applicabili e non applicabili
Non tutti i casi d'uso sono adatti all'invio automatico con bot. Ecco una checklist per orientarti.
✅ Quando usarlo:
- Notifiche periodiche a un gruppo o canale (es. meteo, promemoria, aggiornamenti sistema).
- Invio di messaggi di benvenuto automatici a nuovi iscritti (usando il webhook per intercettare i nuovi membri).
- Integrazione con sistemi esterni (es. alert da un server di monitoraggio, notifiche da un CRM).
- Automazione di marketing (es. invio seriale di contenuti a un canale, con schedulazione).
❌ Quando evitarlo:
- Se è richiesta una comunicazione bidirezionale in tempo reale (meglio usare un bot interattivo con polling/webhook).
- Se il volume di messaggi è altissimo (oltre 30 msg/sec) senza possibilità di rate limiting, si rischia il ban temporaneo.
- Se il contenuto è sensibile e non vuoi affidarlo a un servizio di terze parti (se usi soluzioni no-code).
- Se il tuo ambiente di esecuzione non può garantire uptime (es. PC personale che si spegne di notte).
Best practice
Per ottenere il massimo dall'invio automatico con un bot Telegram, segui queste raccomandazioni:
- Proteggi il token: Usa variabili d'ambiente o file di configurazione esclusi dal version control.
- Implementa logging: Registra ogni invio e ogni errore per facilitare il debug.
- Gestisci le eccezioni: Cattura sempre
TelegramErrore altri errori di rete per evitare crash. - Rispetta i limiti: Non inviare più di 30 messaggi al secondo; se necessario, usa un buffer con ritardo.
- Usa parse_mode con cautela: Se il messaggio contiene caratteri speciali, assicurati di eseguire l'escape corretto (ad esempio, per Markdown, i caratteri _ * ` [ ] devono essere preceduti da backslash).
- Testa in ambiente di sviluppo: Prima di mettere in produzione, prova l'invio su un gruppo di test o sul tuo chat_id personale.
- Documenta lo scheduler: Se usi APScheduler, imposta esplicitamente il fuso orario per evitare discrepanze con l'ora legale.
- Pianifica il rollback: Tieni a disposizione un comando per disabilitare rapidamente l'invio automatico (es. una variabile di flag letta all'avvio).
Domande frequenti
Posso inviare messaggi automatici a un utente senza che lui abbia mai avviato il bot?
No, per impostazione predefinita i bot non possono inviare messaggi a utenti che non hanno interagito con loro. L'utente deve avviare il bot (inviare /start) o, in alternativa, il bot può essere aggiunto a un gruppo o canale dove l'utente è presente. Esistono eccezioni per bot con permessi speciali (es. bot di notizie approvati da Telegram), ma nella pratica comune non è possibile.
Qual è il limite massimo di messaggi che un bot può inviare al giorno?
Telegram non impone un limite giornaliero esplicito, ma applica un rate limiting di circa 30 messaggi al secondo. Se superi questo limite in modo continuativo, il bot potrebbe essere temporaneamente limitato (da pochi minuti a ore). Per invii massivi, è consigliato distribuire le richieste su un arco di tempo più lungo.
Devo usare un server per l'invio automatico?
Sì, perché lo script deve rimanere in esecuzione 24/7. Puoi usare un VPS, un Raspberry Pi, un server domestico o un servizio cloud (es. AWS Lambda con trigger cron). Alcuni servizi no-code offrono hosting incluso, ma a pagamento.
Cosa succede se il bot viene bloccato da un utente?
L'API restituirà un errore 403 Forbidden. Il bot non potrà più inviare messaggi a quell'utente. Se la tua lista di destinatari include utenti che potrebbero bloccare il bot, è opportuno gestire l'eccezione e rimuovere l'utente dalla lista.
Posso inviare messaggi automatici a un canale senza che il bot sia amministratore?
No, il bot deve essere aggiunto come amministratore del canale per poter inviare messaggi. Inoltre, il bot deve avere il permesso di inviare messaggi (di solito è abilitato di default per gli amministratori).
Conclusioni
L'invio automatico di messaggi con un bot Telegram è una competenza versatile che spazia dalla semplice notifica personale a complesse architetture di notifica per aziende. Abbiamo visto come creare un bot, ottenere il token, scegliere tra polling e webhook, e implementare un esempio con Python e APScheduler. Abbiamo anche discusso i limiti, le alternative no-code e le best practice per un uso sicuro e affidabile.
Per iniziare, ti consiglio di partire dal piccolo: crea un bot, invia il tuo primo messaggio programmato con un semplice script, e poi gradualmente aggiungi funzionalità come messaggi condizionali o integrazione con altri servizi. Ricorda di testare sempre in un ambiente isolato e di monitorare i log. Con queste basi, sarai in grado di automatizzare qualsiasi comunicazione ripetitiva su Telegram.