Come configurare un bot Telegram per inviare messaggi automatici?

Introduzione: perché automatizzare i messaggi su Telegram?
Immagina di gestire un canale con centinaia di iscritti e dover pubblicare aggiornamenti ogni ora, oppure di voler inviare promemoria automatici a un gruppo di lavoro senza dover ricordare ogni scadenza. Ecco dove entra in gioco la configurazione di un bot Telegram per l'invio di messaggi automatici: trasformi un flusso manuale e frammentato in un processo affidabile e ripetibile, risparmiando tempo e riducendo errori.
Questo articolo parte dal confronto tra lavoro manuale e automazione: prima di implementare un bot, ogni invio richiedeva accesso al client, digitazione del testo e click invio. Dopo, un semplice script o un webhook scatena il messaggio al momento giusto, senza intervento umano. Vedremo i passi pratici per arrivare a questo risultato, dalla creazione del bot alla scrittura del codice, fino alla schedulazione e alla gestione degli errori.
Cos'è un bot Telegram e cosa può fare?
Un bot Telegram è un account software controllato tramite l'API Bot di Telegram. A differenza di un account utente normale, non ha un numero di telefono e non può avviare conversazioni spontaneamente se non dopo che un utente lo ha fatto. Tuttavia, può rispondere a messaggi, inviare messaggi in canali e gruppi, gestire comandi e molto altro. La funzione principale per l'invio automatico si basa su due modalità: long polling (il tuo server interroga costantemente Telegram per nuovi aggiornamenti) e webhook (Telegram invia gli aggiornamenti al tuo server ogni volta che accade qualcosa).
Prima di iniziare, assicurati di avere i requisiti: un account Telegram attivo (per creare il bot), un server o un ambiente di sviluppo dove eseguire il codice (anche un semplice computer locale per test), e familiarità di base con un linguaggio di scripting come Python. Se preferisci non scrivere codice, esistono servizi terzi come IFTTT o Zapier, ma perderai il controllo fine e la personalizzazione. In questa guida ci concentreremo sulla via più flessibile: usare direttamente l'API di Telegram.
Creazione del bot con BotFather
Il primo passo per configurare un bot Telegram per inviare messaggi automatici è registrarlo presso BotFather, il bot ufficiale di Telegram che gestisce la creazione e la configurazione dei bot. Apri Telegram e cerca @BotFather. Avvia una conversazione e invia il comando /newbot. BotFather ti chiederà un nome (visibile agli utenti) e un username (unico, deve terminare con 'bot').
Dopo aver completato la procedura, riceverai un token API, una stringa di caratteri che identifica il tuo bot. Conservala in un luogo sicuro: chiunque possieda il token può controllare il bot. Se perdi il token, puoi rigenerarlo con il comando /token da BotFather. Una volta ottenuto il token, puoi verificare subito il funzionamento con una semplice richiesta HTTP: visita https://api.telegram.org/bot<YOUR_TOKEN>/getMe nel browser. Se vedi un JSON con i dettagli del bot, tutto funziona.
⚠️ Attenzione
Non condividere mai il token pubblicamente. Se sospetti una compromissione, usa /revoke su BotFather per invalidarlo e ottenere uno nuovo.
Scegliere la modalità di ricezione aggiornamenti: long polling vs webhook
Per inviare messaggi automatici, il bot deve sapere quando e a chi inviare. La scelta tra long polling e webhook dipende dall'infrastruttura. Il long polling è più semplice: il tuo script fa una richiesta a getUpdates ogni pochi secondi. È ideale per ambienti di sviluppo o server senza un dominio pubblico. Lo svantaggio è il consumo di risorse (connessioni aperte) e la latenza leggermente maggiore.
Il webhook, invece, richiede un server pubblico con certificato SSL (HTTPS). Telegram invierà gli aggiornamenti direttamente al tuo endpoint. È più efficiente e quasi in tempo reale. Puoi impostare il webhook con il comando /setwebhook su BotFather oppure via API: https://api.telegram.org/bot<TOKEN>/setWebhook?url=https://tuodominio.com/webhook.
Quale scegliere? Se hai un VPS con dominio e SSL, usa webhook. Se lavori in locale o hai un IP dinamico, usa long polling. Entrambi possono essere combinati (ad esempio, webhook per comandi e polling per messaggi schedulati), ma non contemporaneamente.
Inviare il primo messaggio automatico con codice
Per inviare un messaggio, hai bisogno di due cose: l'ID della chat (personale, gruppo o canale) e il token. L'ID chat puoi ottenerlo inviando un messaggio al bot da un account utente e quindi chiamando getUpdates. L'utente deve aver avviato una conversazione con il bot. Per un canale, devi aggiungere il bot come amministratore e poi ottenere l'ID (spesso negativo).
Ecco un esempio minimo in Python (usando la libreria requests):
import requests
TOKEN = 'il_tuo_token'
CHAT_ID = '123456789'
MESSAGE = 'Ciao mondo! Questo è un messaggio automatico.'
url = f'https://api.telegram.org/bot{TOKEN}/sendMessage'
payload = {'chat_id': CHAT_ID, 'text': MESSAGE}
response = requests.post(url, json=payload)
print(response.json())
Esegui lo script e controlla Telegram: il messaggio dovrebbe apparire nella chat. Se invece vuoi inviare messaggi formattati, puoi usare parse_mode con 'HTML' o 'Markdown'. Da questo esempio base si può estendere la logica per includere dati dinamici, come l'ora corrente o informazioni da un database.
Schedulare messaggi automatici
Una volta che sai inviare messaggi su comando, il passo successivo è automatizzare l'invio a intervalli regolari. La schedulazione non è una funzione nativa delle API di Telegram: devi implementarla tramite un task scheduler sul tuo server. Due approcci comuni:
- Cron job (Linux) o Task Scheduler (Windows): eseguono lo script a orari prestabiliti (es. ogni giorno alle 9:00).
- Librerie di scheduling in Python, come
scheduleoAPScheduler: permettono di definire task ricorrenti senza dipendere dal sistema operativo.
Ecco un esempio con schedule che invia un bollettino giornaliero:
import schedule
import time
import requests
def invia_bollettino():
# funzione che invia il messaggio
url = f'https://api.telegram.org/bot{TOKEN}/sendMessage'
payload = {'chat_id': CHAT_ID, 'text': 'Bollettino giornaliero del ' + time.strftime('%Y-%m-%d')}
requests.post(url, json=payload)
# programma ogni giorno alle 8:30
schedule.every().day.at('08:30').do(invia_bollettino)
while True:
schedule.run_pending()
time.sleep(60)
💡 Suggerimento
Per messaggi più complessi (es. contenuti da database), separa la logica di recupero dati dalla logica di invio. Usa una coda di messaggi per gestire picchi di traffico.
Gestire comandi e interazioni (opzionale)
Anche se l'obiettivo è l'invio automatico, potresti volere che gli utenti interagiscano con il bot per attivare o disattivare le notifiche, o per ricevere messaggi on-demand. Per fare ciò, devi registrare i comandi con BotFather (comando /setcommands) e gestire gli aggiornamenti con un loop o webhook.
Ecco uno schema di base con long polling:
import requests
import time
TOKEN = '...'
url = f'https://api.telegram.org/bot{TOKEN}/'
def get_updates(offset):
response = requests.get(url + 'getUpdates', params={'offset': offset, 'timeout': 30})
return response.json()['result']
def send_message(chat_id, text):
requests.post(url + 'sendMessage', data={'chat_id': chat_id, 'text': text})
last_update_id = 0
while True:
updates = get_updates(last_update_id)
for update in updates:
if 'message' in update:
chat_id = update['message']['chat']['id']
text = update['message'].get('text')
if text == '/start':
send_message(chat_id, 'Benvenuto! Riceverai aggiornamenti automatici.')
# altri comandi
last_update_id = update['update_id'] + 1
time.sleep(2)
Errori comuni e come risolverli
Nel percorso per configurare un bot Telegram per inviare messaggi automatici, alcuni problemi ricorrono frequentemente. Ecco i più comuni con le relative soluzioni:
| Sintomo | Causa probabile | Soluzione |
|---|---|---|
| Il bot non risponde | Token errato o nessun aggiornamento ricevuto | Verifica token con /getMe; controlla webhook o polling attivo |
| Errore 403 Forbidden | Il bot non ha i permessi per scrivere nella chat | Aggiungi il bot come amministratore nel gruppo/canale; per chat privata, l'utente deve aver avviato il bot |
| Messaggio non inviato, nessun errore | Chat ID errato o messaggio vuoto | Stampa il payload e controlla la risposta API (ok:false) |
Un altro errore frequente è l'uso di getUpdates dopo aver impostato un webhook: le due modalità si escludono. Se ricevi un errore Conflict: can't use getUpdates method while webhook is active, elimina il webhook con https://api.telegram.org/botTOKEN/deleteWebhook.
Best practice per l'invio automatico
Automatizzare è comodo, ma bisogna farlo in modo responsabile. Ecco alcune linee guida da seguire:
- Limita la frequenza: Telegram ha limiti di rate (circa 30 messaggi al secondo per bot, ma meglio restare bassi). Usa un delayer tra messaggi in massa.
- Gestisci gli errori: non limitarti a lanciare eccezioni; registra i log e programma retry con backoff.
- Usa ambienti separati: non testare su chat di produzione. Crea un gruppo di test o usa chat privata con il bot.
- Sicurezza: non hardcodare il token nel codice sorgente; usa variabili d'ambiente o file di configurazione esterni.
- Documenta i comandi: registra una breve descrizione per ogni comando su BotFather, così gli utenti sanno cosa fare.
Quando non è consigliabile usare un bot per messaggi automatici
Non tutte le situazioni richiedono un bot. Se hai bisogno di inviare messaggi una tantum o a pochissimi destinatari, un semplice messaggio manuale è più rapido. Inoltre, se il contenuto cambia continuamente e richiede approvazione umana, un bot automatico potrebbe inviare contenuti inappropriati. Considera anche la complessità: se devi integrare molti servizi, valuta l'uso di un middleware come Zapier, anche se meno flessibile.
Un altro confine: se il tuo bot deve inviare messaggi a migliaia di utenti contemporaneamente, potresti incorrere nei limiti di rate di Telegram. In quel caso, distribuisci l'invio in finestre temporali e considera l'uso di un servizio di coda per gestire il carico.
Integrazione con servizi esterni
Spesso i messaggi automatici contengono dati da altre fonti: meteo, prezzi, notifiche da GitHub. Puoi arricchire il bot chiamando API esterne all'interno dello script di invio. Ad esempio, per inviare il meteo giornaliero, potresti fare una richiesta a OpenWeatherMap e poi comporre il messaggio con i dati ricevuti.
Se sei su un server con poca memoria, attento a non esaurire le risorse con troppe API chiamate in sequenza. Usa la libreria asyncio per chiamate concorrenti se necessario. Per webhook, mantieni la risposta rapida (<2 secondi) altrimenti Telegram ritenterà l'invio, causando duplicati.
Metodi di verifica e monitoraggio
Dopo aver configurato il bot, vuoi sapere se sta funzionando. Ecco alcune metodologie per tenere sotto controllo lo stato:
- Log centralizzati: scrivi su file o su servizi come Papertrail.
- Ping periodico: invia un messaggio a te stesso ogni ora per confermare che lo script è in esecuzione.
- Health check HTTP: se usi webhook, esponi un endpoint /health che restituisce lo stato del bot.
Come osservazione empirica, molti sviluppatori notano che un bot con long polling su un Raspberry Pi può restare in esecuzione per settimane senza problemi, purché la connessione di rete sia stabile. Per una verifica più precisa, controlla i log ogni giorno e misura il tempo di risposta medio delle chiamate API.
Domande frequenti (FAQ)
Posso inviare messaggi senza scrivere codice?
Sì, esistono piattaforme no-code come ManyBot o IFTTT, ma offrono meno controllo e spesso richiedono abbonamenti. Per esigenze semplici possono bastare, ma per automazioni personalizzate è consigliabile scrivere almeno una minima parte di codice.
Quanto tempo ci vuole per configurare un bot?
La parte puramente di registrazione richiede 5 minuti. Scrivere uno script base per l'invio richiede 15–30 minuti se hai familiarità con Python. La schedulazione e la gestione degli errori possono raddoppiare il tempo complessivo.
Il bot può inviare messaggi ai canali senza essere amministratore?
No. Il bot deve essere aggiunto come amministratore del canale (con permessi di pubblicazione). In un canale pubblico, l'ID chat è negativo e si ottiene tramite getUpdates o inoltrando un messaggio.
Come faccio a fermare l'invio automatico?
Se usi cron, rimuovi o commenta la riga. Se usi uno script Python in esecuzione, fermalo con Ctrl+C o kill del processo. Per webhook, puoi disabilitare l'endpoint sul server.
Conclusione
Configurare un bot Telegram per inviare messaggi automatici è un processo accessibile che trasforma un'attività manuale in un flusso automatizzato e affidabile. Abbiamo visto i passaggi essenziali: creazione del bot con BotFather, scelta tra long polling e webhook, invio del primo messaggio, schedulazione, gestione degli errori e best practice. Ora hai gli strumenti per costruire un bot su misura per le tue esigenze.
Come passo successivo, ti consiglio di sperimentare con un piccolo progetto personale: ad esempio, un bot che ti ricordi gli appuntamenti o che pubblichi un riassunto giornaliero. Man mano che prendi confidenza, potrai aggiungere funzionalità più avanzate come l'invio di immagini o documenti, l'integrazione con database e la gestione di più chat. Ricorda di tenere d'occhio le novità dell'API Telegram, che nel 2026 ha introdotto miglioramenti per la gestione dei gruppi e dei topic. Buona automazione!