Torna al blog
Guides

Crea il Tuo Primo Bot Telegram con Python: Una Guida Completa

Scopri come realizzare un potente bot Telegram usando Python, gratuitamente. Questa guida passo-passo copre tutto, dalla configurazione dell'API al deployment del tuo bot Telegram personalizzato.

Crea il Tuo Primo Bot Telegram con Python: Una Guida Completa

Creare un bot Telegram personalizzato con Python offre una flessibilità e una potenza incredibili. Che tu voglia automatizzare attività, creare servizi interattivi o semplicemente sperimentare con la robusta API di Telegram, Python è una scelta eccellente per la sua semplicità e le sue vaste librerie. In questa guida completa, ti accompagneremo attraverso l’intero processo di creazione del tuo primo progetto di bot Telegram con Python, dalla configurazione dell’ambiente di sviluppo alla scrittura di codice funzionale e al deployment del tuo bot.

La leggibilità di Python e la vivace community che supporta la libreria python-telegram-bot lo rendono un punto di partenza fantastico sia per i principianti che per gli sviluppatori esperti. Alla fine di questo tutorial, avrai un bot Telegram completamente operativo e pronto a interagire con gli utenti.

Punti Chiave

  • Imparerai a registrare il tuo bot con BotFather e a ottenere un token API.
  • Vedremo come configurare il tuo ambiente di sviluppo Python e installare le librerie necessarie.
  • Scriverai codice per gestire comandi e messaggi di base.
  • Esploreremo come aggiungere funzionalità più sofisticate al tuo bot.
  • Capirai le basi del deployment della tua applicazione bot Telegram con Python.

1. Configurazione del Tuo Bot Telegram e dell’Ambiente di Sviluppo

Prima di immergerci nel codice, devi configurare il tuo bot su Telegram e preparare il tuo ambiente Python.

1.1 Creare il Tuo Bot con BotFather

Il primo passo per qualsiasi bot Telegram è registrarlo con BotFather, il bot ufficiale di Telegram per la gestione di altri bot.

  1. Apri Telegram e Cerca @BotFather: Nella tua app Telegram, cerca “@BotFather” e avvia una chat. Assicurati che sia quello ufficiale con il badge blu di verifica.
  2. Avvia il Processo di Creazione del Bot: Digita /newbot e invia il messaggio.
  3. Scegli un Nome: BotFather ti chiederà un nome per il tuo bot. Questo è il titolo leggibile che gli utenti vedranno (es. “Il Mio Bot Fantastico”).
  4. Scegli un Nome Utente: Successivamente, scegli un nome utente unico per il tuo bot. Questo deve terminare con “bot” (es. il_mio_bot_fantastico). Se il nome utente è già preso, BotFather ti chiederà di provarne un altro.
  5. Ricevi il Tuo Token API: Una volta completato con successo, BotFather ti fornirà un token API HTTP. Questo token è cruciale, poiché agisce come una password per il tuo bot. Conservalo in modo sicuro e non condividerlo mai pubblicamente. Sarà simile a 123456:ABC-DEF1234ghIkl-zyx57W23L1qR_456.

1.2 Installazione di Python e pip

Se non hai ancora Python installato, scarica l’ultima versione stabile dal sito ufficiale di Python (https://www.python.org/downloads/). Durante l’installazione, assicurati di selezionare la casella “Add Python to PATH” per un accesso più facile dalla riga di comando.

pip è il gestore di pacchetti di Python e di solito viene preinstallato con Python. Puoi verificare le tue installazioni di Python e pip aprendo il tuo terminale o prompt dei comandi e digitando:

python --version
pip --version

1.3 Installazione della Libreria python-telegram-bot

La libreria python-telegram-bot è un wrapper popolare e robusto per l’API di Telegram Bot. Semplifica le interazioni con l’API, rendendo molto più facile lo sviluppo del tuo bot.

Installala usando pip:

pip install python-telegram-bot

Hai ora configurato con successo il tuo bot e l’ambiente di sviluppo. Passiamo alla scrittura del codice!

2. Il Tuo Primo Codice Python per Bot Telegram: Il Bot Eco

Inizieremo con un classico: un bot eco. Questo bot ripeterà semplicemente qualsiasi messaggio che riceve. Questo semplice esempio ti insegna i concetti fondamentali della gestione dei messaggi.

2.1 Importazione dei Moduli Necessari

Crea un nuovo file Python (es. my_telegram_bot.py) e inizia importando i componenti richiesti dalla libreria telegram.

from telegram import Update
from telegram.ext import Application, CommandHandler, MessageHandler, filters
import logging
import os
  • Update: Rappresenta un aggiornamento in arrivo da Telegram (es. un nuovo messaggio, un comando).
  • Application: La classe principale che gestisce il ciclo di vita del tuo bot.
  • CommandHandler: Usato per registrare gestori per comandi specifici (es. /start, /help).
  • MessageHandler: Usato per registrare gestori per vari tipi di messaggi (testo, foto, ecc.).
  • filters: Fornisce filtri convenienti per specificare a quali messaggi un MessageHandler dovrebbe rispondere.
  • logging: Buona pratica per il debug e la comprensione del comportamento del tuo bot.
  • os: Per caricare in modo sicuro il tuo token API dalle variabili d’ambiente.

2.2 Configurazione del Logging

Il logging è essenziale per la risoluzione dei problemi. Aggiungi le seguenti righe al tuo script:

# Abilita il logging
logging.basicConfig(
    format="%(asctime)s - %(name)s - %(levelname)s - %(message)s", level=logging.INFO
)
logger = logging.getLogger(__name__)

2.3 Definizione dei Nostri Gestori (Handlers)

I gestori sono funzioni che elaborano gli aggiornamenti in arrivo.

Gestore del comando start:

Questa funzione verrà chiamata quando un utente invia il comando /start.

async def start(update: Update, context):
    """Invia un messaggio di benvenuto quando viene impartito il comando /start."""
    user = update.effective_user
    await update.message.reply_html(
        f"Ciao {user.mention_html()}! Sono un bot eco. Inviami qualsiasi cosa!",
        # reply_markup=ForceReply(selective=True), # Opzionale: forza la risposta a questo messaggio
    )

Gestore del messaggio echo:

Questa funzione ripeterà qualsiasi messaggio di testo che riceve.

async def echo(update: Update, context):
    """Ripete il messaggio dell'utente."""
    await update.message.reply_text(update.message.text)

Gestore del comando help_command:

Un semplice comando di aiuto.

async def help_command(update: Update, context):
    """Invia un messaggio di aiuto."""
    await update.message.reply_text("Inviami qualsiasi messaggio, e io lo ripeterò!")

2.4 La Funzione main: Unire Tutto

La funzione main è dove inizializziamo il nostro bot, registriamo i gestori e iniziamo a interrogare per gli aggiornamenti.

def main() -> None:
    """Avvia il bot."""
    # Ottieni il token API dalle variabili d'ambiente (BEST PRACTICE!)
    # In alternativa, puoi codificarlo qui per test rapidi: TOKEN = "IL_TUO_TOKEN_TELEGRAM_BOT"
    TOKEN = os.environ.get("TELEGRAM_BOT_TOKEN")

    if not TOKEN:
        raise ValueError("La variabile d'ambiente TELEGRAM_BOT_TOKEN non è impostata.")

    # Crea l'Applicazione e passale il token del tuo bot.
    application = Application.builder().token(TOKEN).build()

    # Registra i gestori
    application.add_handler(CommandHandler("start", start))
    application.add_handler(CommandHandler("help", help_command))
    application.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, echo))

    # Esegui il bot finché l'utente non preme Ctrl-C
    application.run_polling(allowed_updates=Update.ALL_TYPES)


if __name__ == "__main__":
    main()

2.5 Esecuzione del Tuo Bot in Locale

  1. Imposta il Tuo Token API come Variabile d’Ambiente:

    • Linux/macOS: export TELEGRAM_BOT_TOKEN="IL_TUO_TOKEN_API_QUI"
    • Windows (Prompt dei comandi): set TELEGRAM_BOT_TOKEN="IL_TUO_TOKEN_API_QUI"
    • Windows (PowerShell): $env:TELEGRAM_BOT_TOKEN="IL_TUO_TOKEN_API_QUI" In alternativa, per test rapidi in locale, puoi sostituire os.environ.get("TELEGRAM_BOT_TOKEN") con la tua stringa token effettiva direttamente nel codice (es. TOKEN = "123456:ABCDEF..."), ma non è raccomandato per la produzione.
  2. Esegui il Tuo Script Python: Naviga nella directory dove hai salvato my_telegram_bot.py nel tuo terminale ed esegui:

    python my_telegram_bot.py
  3. Interagisci con il Tuo Bot: Apri Telegram, cerca il nome utente del tuo bot (es. @il_mio_bot_fantastico) e avvia una chat. Prova a inviare /start, /help o qualsiasi messaggio di testo. Il tuo bot dovrebbe rispondere!

Congratulazioni! Hai appena creato ed eseguito la tua prima applicazione bot Telegram con Python.

Telegram bot che risponde a /start e ripete un messaggio.

3. Aggiungere Funzionalità Più Avanzate

Un bot eco è carino, ma rendiamolo più utile. Ecco alcune idee per espandere il tuo bot Telegram.

3.1 Gestire Diversi Tipi di Messaggio

Oltre al testo semplice, Telegram supporta foto, video, documenti e molto altro. Puoi usare i filters per gestire specificamente questi tipi.

Esempio: Rispondere alle foto

async def handle_photo(update: Update, context):
    """Risponde a una foto con un messaggio di conferma."""
    # Puoi accedere ai dettagli della foto tramite update.message.photo
    # La lista contiene diverse dimensioni della stessa foto; l'ultima è di solito la più grande.
    photo_file_id = update.message.photo[-1].file_id
    await update.message.reply_text("Bella foto! L'ho ricevuta.")

# Aggiungi questo gestore nella tua funzione main
# application.add_handler(MessageHandler(filters.PHOTO, handle_photo))

3.2 Utilizzare Tastiere Inline e Tastiere di Risposta

Le tastiere offrono opzioni di interazione strutturate per gli utenti.

  • Tastiere di Risposta (Reply Keyboards): Appaiono sopra il campo di input del messaggio, sostituendo di fatto la tastiera standard. Ottime per scelte predefinite.
  • Tastiere Inline (Inline Keyboards): Allegati direttamente a un messaggio, con pulsanti che possono attivare callback o aprire URL. Ideali per menu interattivi.

Esempio: Tastiera Inline

Modifichiamo il nostro comando /start per offrire dei pulsanti.

from telegram import Update, InlineKeyboardButton, InlineKeyboardMarkup
from telegram.ext import Application, CommandHandler, MessageHandler, CallbackQueryHandler, filters
# ... (altre importazioni e logging) ...

async def start(update: Update, context):
    """Invia un messaggio di benvenuto con una tastiera inline."""
    user = update.effective_user
    keyboard = [
        [InlineKeyboardButton("Visita TeleClaw", url="https://teleclaw.bot")],
        [InlineKeyboardButton("Informazioni sul Bot", callback_data="about")],
    ]
    reply_markup = InlineKeyboardMarkup(keyboard)
    await update.message.reply_html(
        f"Ciao {user.mention_html()}! Benvenuto nel mio bot. Cosa vorresti fare?",
        reply_markup=reply_markup,
    )

async def button_callback(update: Update, context):
    """Gestisce le query di callback dai pulsanti della tastiera inline."""
    query = update.callback_query
    await query.answer() # Rispondi sempre alle query di callback

    if query.data == "about":
        await query.edit_message_text(text="Questo è un semplice bot demo creato con Python e la libreria `python-telegram-bot`.")
    # Aggiungi altre condizioni per altri valori di callback_data

Dovresti aggiornare la tua funzione main per includere il CallbackQueryHandler:

    # ... all'interno di main() ...
    application.add_handler(CommandHandler("start", start))
    application.add_handler(CallbackQueryHandler(button_callback)) # Aggiungi questa riga
    application.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, echo))
    # ...

Questo dimostra come collegarsi a un sito esterno come TeleClaw ed eseguire un’azione all’interno del bot. Puoi esplorare di più sulle diverse opzioni di tastiera nella documentazione di python-telegram-bot (https://docs.python-telegram-bot.org/en/stable/telegram.keyboardbutton.html).

3.3 Integrazione con API Esterne

La vera potenza dello sviluppo di bot Telegram con Python deriva dalla sua capacità di integrarsi con servizi di terze parti. Puoi recuperare dati meteorologici, notizie attuali, tradurre testo o persino integrarti con modelli di intelligenza artificiale.

Esempio: Chiamata API Semplice (usando la libreria requests)

Prima, installa requests: pip install requests.

import requests

async def get_fact(update: Update, context):
    """Recupera un fatto casuale da un'API esterna."""
    try:
        response = requests.get("https://uselessfacts.jsph.pl/api/v2/facts/random")
        response.raise_for_status() # Solleva un HTTPError per risposte errate (4xx o 5xx)
        fact_data = response.json()
        await update.message.reply_text(f"Lo sapevi? {fact_data['text']}")
    except requests.exceptions.RequestException as e:
        logger.error(f"Errore nel recupero del fatto: {e}")
        await update.message.reply_text("Spiacente, non sono riuscito a recuperare un fatto in questo momento. Riprova più tardi.")

# Aggiungi questo gestore di comandi:
# application.add_handler(CommandHandler("fact", get_fact))

Questo dimostra come un bot potrebbe interagire con fonti di dati esterne, proprio come @claw si integra con vari servizi per fornire funzionalità sofisticate. Per interazioni AI più avanzate, considera l’utilizzo di piattaforme come TeleClaw, che astraggono le complessità dell’integrazione con modelli come GPT-4 o Gemini. Puoi leggere di più sull’integrazione di strumenti AI nel nostro articolo su come costruire un chatbot Telegram.

Rappresentazione visiva di un bot Telegram che interagisce con un'API esterna.

4. Dati Persistenti e Gestione dello Stato

Per bot più complessi, avrai bisogno di un modo per archiviare i dati tra le interazioni. Ad esempio, se il tuo bot deve ricordare le preferenze dell’utente o le conversazioni in corso.

4.1 Utilizzo di context.user_data e context.chat_data

La libreria python-telegram-bot fornisce i dizionari context.user_data e context.chat_data (disponibili nelle tue funzioni handler) che possono archiviare dati temporanei associati a un utente o a una chat. Questi dati persistono per tutta la durata dell’esecuzione del bot.

async def set_favorite_color(update: Update, context):
    """Permette agli utenti di impostare il loro colore preferito."""
    if context.args:
        color = " ".join(context.args).strip()
        context.user_data["favorite_color"] = color
        await update.message.reply_text(f"Ok, ho annotato il tuo colore preferito come {color}.")
    else:
        await update.message.reply_text("Per favore, dimmi il tuo colore preferito, es. /setcolor blu")

async def get_favorite_color(update: Update, context):
    """Dice all'utente il suo colore preferito."""
    color = context.user_data.get("favorite_color")
    if color:
        await update.message.reply_text(f"Il tuo colore preferito è {color}.")
    else:
        await update.message.reply_text("Non conosco ancora il tuo colore preferito. Usa /setcolor.")

# Aggiungi questi gestori:
# application.add_handler(CommandHandler("setcolor", set_favorite_color))
# application.add_handler(CommandHandler("getcolor", get_favorite_color))

4.2 Persistenza dei Dati tra i Riavvi

Affinché i dati persistano anche quando il tuo script bot viene riavviato, hai bisogno di una soluzione più robusta, come:

  • File (CSV, JSON): Semplice per piccole quantità di dati.
  • Database (SQLite, PostgreSQL, MongoDB): Raccomandato per l’archiviazione di dati più grandi e complessi. SQLite è una buona scelta per lo sviluppo locale in quanto è basato su file e non richiede un server separato.
  • Soluzioni di archiviazione di terze parti: Database cloud come Firestore o DynamoDB.

La libreria python-telegram-bot offre anche classi BasePersistence che possono essere utilizzate con PicklePersistence o DictPersistence per salvare user_data, chat_data e bot_data in un file. Fai riferimento agli esempi ufficiali di python-telegram-bot per come utilizzare la persistenza (https://docs.python-telegram-bot.org/en/stable/telegram.ext.basepersistence.html).

5. Considerazioni sul Deployment

Eseguire il tuo bot sulla tua macchina locale va bene per lo sviluppo, ma per renderlo accessibile 24 ore su 24, 7 giorni su 7, devi distribuirlo su un server.

5.1 Polling vs. Webhooks

Ci sono due modi principali in cui un bot Telegram riceve gli aggiornamenti:

  • Long Polling: Il tuo bot chiede ripetutamente ai server di Telegram nuovi aggiornamenti. Questo è ciò che abbiamo usato con application.run_polling(). Semplice da configurare ma può essere dispendioso in termini di risorse per bot molto attivi.
  • Webhooks: Dici a Telegram l’URL del tuo server. Quando si verifica un aggiornamento, Telegram invia una richiesta HTTP POST a quell’URL. Più efficiente per la produzione, ma richiede un server accessibile pubblicamente e la gestione di HTTPS.

Per bot semplici e sviluppo iniziale, il long polling è sufficiente. Per la produzione, i webhooks sono generalmente preferiti. La libreria python-telegram-bot supporta entrambi.

5.2 Piattaforme di Deployment

Diverse piattaforme sono adatte per il deployment di bot Python:

  • Heroku: Ottimo per progetti di piccole e medie dimensioni, con un piano gratuito. Facile da distribuire con git.
  • Render: Simile a Heroku ma spesso con piani gratuiti più generosi e funzionalità moderne.
  • AWS (EC2, Lambda), Google Cloud (Compute Engine, Cloud Functions), Azure (App Service, Functions): Offrono soluzioni potenti e scalabili ma hanno una curva di apprendimento più ripida.
  • Virtual Private Servers (VPS): Servizi come DigitalOcean, Linode, Vultr ti danno più controllo, ma sei responsabile della gestione del server.

Quando effettui il deployment, ricorda di:

  • Mantenere sicuro il tuo token API: Usa variabili d’ambiente.
  • Installare le dipendenze: Crea un file requirements.txt (pip freeze > requirements.txt) e assicurati che il tuo host le installi.
  • Configurare i gestori di processi: Strumenti come systemd o pm2 possono mantenere il tuo bot in esecuzione anche se si blocca.

Per applicazioni commerciali o bot basati su AI altamente scalabili, piattaforme come TeleClaw offrono un ambiente robusto e gestito. Gestiscono l’infrastruttura, la sicurezza e la scalabilità, permettendoti di concentrarti sulla logica del tuo bot e sull’esperienza utente. Dai un’occhiata alla nostra guida dettagliata su bot Telegram per il business per vedere cosa offre TeleClaw.

Conclusione

Hai ora appreso i principi fondamentali della costruzione di un’applicazione bot Telegram con Python. Dalla configurazione iniziale con BotFather e l’ambiente, alla scrittura di gestori per comandi e messaggi, alla gestione di diversi tipi di dati e alla considerazione delle strategie di deployment, hai una solida base. La libreria python-telegram-bot rende l’interazione con l’API di Telegram sorprendentemente semplice, aprendo un mondo di possibilità per l’automazione e l’interazione.

Man mano che diventi più a tuo agio, puoi esplorare argomenti avanzati come:

  • Gestione delle conversazioni con ConversationHandler.
  • Gestione degli errori e logging robusto.
  • Integrazione con database per l’archiviazione di dati complessi.
  • Utilizzo di filters più avanzati.
  • Implementazione della modalità inline per capacità di ricerca globale.

Ricorda, la bellezza dell’apertura di Telegram e della versatilità di Python è che puoi costruire quasi tutto. Se stai cercando di elevare il tuo bot con intelligenza artificiale all’avanguardia, comprensione del linguaggio naturale o integrazioni senza soluzione di continuità senza il pesante onere della codifica, piattaforme come TeleClaw sono progettate per potenziarti.

Pronto a costruire, migliorare o gestire i tuoi bot Telegram con automazione intelligente?

Esplora TeleClaw oggi stesso e potenzia il tuo bot Telegram! o prova il nostro bot direttamente su Telegram: @claw

FAQ

Domande frequenti

Quali sono i passaggi fondamentali per creare un bot Telegram con Python?
I passaggi base includono la creazione di un nuovo bot con BotFather per ottenere un token API, l'installazione della libreria `python-telegram-bot`, la scrittura del codice Python per gestire messaggi e comandi, e infine l'esecuzione dello script. Per funzionalità più avanzate o integrazione AI, piattaforme come TeleClaw possono semplificare notevolmente il processo.
È necessaria esperienza di programmazione per seguire questa guida alla creazione di bot Telegram con Python?
Sebbene una conoscenza base di Python sia utile, questa guida è pensata per essere accessibile a tutti. Ti accompagneremo passo dopo passo, spiegando i concetti in modo chiaro. Per chi preferisce un approccio senza codice, TeleClaw offre strumenti potenti per costruire bot Telegram senza scrivere una riga di codice.
Come può TeleClaw aiutarmi nel mio progetto di bot Telegram con Python?
TeleClaw può migliorare il tuo progetto di bot Telegram con Python fornendo capacità AI avanzate, integrazioni facili e analisi robuste. Puoi usare TeleClaw per la comprensione complessa del linguaggio naturale, l'integrazione di basi di conoscenza, o per gestire più bot in modo efficiente, anche se hai iniziato con un bot personalizzato basato su Python.
Altri Articoli

Continua a leggere