\n\n\n\n Il mio bot di Telegram ora utilizza API esterne - AI7Bot \n

Il mio bot di Telegram ora utilizza API esterne

📖 15 min read2,906 wordsUpdated Apr 3, 2026

Ciao a tutti, costruttori di bot e appassionati di automazione! Marcus Rivera qui, di nuovo da ai7bot.com. Oggi voglio parlare di qualcosa che ha fatto parlare di sé nei miei progetti ultimamente, qualcosa che sembra una superpotenza quando finalmente ci riesci: integrare API esterne nei tuoi bot. In particolare, esploreremo come rendere i tuoi bot di Telegram più intelligenti, più dinamici e, francamente, molto più utili estraendo dati dal mondo esterno.

È il 2026, e se il tuo bot sta solo ripetendo l’input dell’utente o fornendo risposte statiche, stai perdendo una grande opportunità. La vera magia si verifica quando il tuo bot può collegarsi, raccogliere informazioni, elaborarle e restituirle all’utente in modo significativo. Pensaci: un bot meteo non è solo un bot; è una finestra su un’API meteo. Un bot per il monitoraggio delle azioni? È un client API sotto mentite spoglie. Un bot che ti aiuta a trovare il caffè aperto più vicino? Hai indovinato – un’integrazione API.

Ricordo la mia prima esperienza in questo campo. Stavo costruendo un semplice bot di Telegram per i miei amici e me per tenere traccia delle statistiche della nostra campagna di D&D. Aggiornavamo manualmente un Google Sheet, ed era un disastro. Ho pensato: “E se il bot potesse semplicemente estrarre la salute attuale dei nostri personaggi direttamente dal foglio?” È stato allora che l’API di Google Sheets è entrata in gioco. Non si trattava solo di far parlare il bot; si trattava di farne un ponte verso i dati. E lascia che ti dica, quel momento in cui il bot ha recuperato correttamente i HP di Sir Reginald il Paladino? Oro puro.

Perché le API Esterne Sono il Miglior Amico del Tuo Bot

Essere diretti: un bot senza dati esterni è come un’auto senza carburante. Sembra bello, potrebbe anche avere alcune funzionalità interessanti, ma non va da nessuna parte di interessante. Le API (Interfacce di Programmazione delle Applicazioni) sono il modo in cui diverse applicazioni software comunicano tra loro. Definiscono le regole su come puoi richiedere informazioni o inviare comandi a un altro servizio.

Per il tuo bot, questo significa:

  • Dati Aggiornati: Niente più codifica fissa di informazioni che diventano rapidamente obsolete. Il tuo bot può sempre fornire le previsioni del tempo più recenti, i prezzi delle azioni, i titoli delle notizie, o qualsiasi dato in tempo reale di cui hai bisogno.
  • Funzionalità Ampliate: Non devi costruire ogni funzionalità da zero. Vuoi tradurre un testo? Usa un’API di traduzione. Devi convertire valute? C’è un’API per questo. Il tuo bot diventa un hub che collega gli utenti a una miriade di servizi.
  • Personalizzazione: Con i dati esterni, il tuo bot può offrire esperienze più personalizzate. Immagina un bot che tiene traccia dello stato del tuo volo, ti ricorda eventi imminenti dal tuo calendario, o addirittura ti suggerisce film basati sulla tua cronologia di visione – tutto alimentato da API.
  • Automazione: Oltre a recuperare dati, le API consentono al tuo bot di attivare azioni in altri servizi. Pensa a un bot che può creare un’attività nel tuo strumento di gestione progetti, inviare un’email, o addirittura controllare dispositivi smart home.

Il mio viaggio con le API è davvero iniziato quando ho cominciato a costruire un bot per un piccolo gruppo comunitario locale. Avevano bisogno di un modo per controllare rapidamente il programma degli autobus locali. La città aveva un’API di trasporto pubblico, e integrarla significava che gli utenti potevano semplicemente digitare qualcosa come “/bus 12 Main St” e ottenere previsioni di arrivo in tempo reale. Non era solo una comodità; ha trasformato il modo in cui interagivano con le informazioni sui trasporti pubblici. Quel progetto, per quanto semplice, mi ha mostrato il vero potere di collegare un bot al mondo reale.

Iniziare: Le Basi dell’Interazione con le API

Prima di entrare in esempi specifici, copriamo le basi assolute. La maggior parte delle API con cui interagirai sono API web, il che significa che comunicano tramite HTTP. Di solito, farai richieste HTTP (GET, POST, PUT, DELETE) a URL specifici (endpoint) e riceverai risposte, di solito in formato JSON.

Autenticazione: Il Guardiano

Molte API richiedono autenticazione. Questo è il modo in cui l’API sa chi sei e se hai il permesso di accedere ai dati o di eseguire azioni. I metodi di autenticazione comuni includono:

  • Chiavi API: Una stringa unica che includi nella tua richiesta, spesso come intestazione o parametro di query. Questo è probabilmente il più comune per le API di dati pubblici.
  • OAuth 2.0: Più complesso, usato quando il tuo bot deve accedere a dati specifici dell’utente da un servizio di terze parti (ad es. Google Calendar, Twitter). Questo implica reindirizzare l’utente al servizio per concedere il permesso.
  • Basic Auth: Inviare un nome utente e una password (codificati in base64) con ogni richiesta. Meno comune per le API web moderne.

Per la maggior parte dei bot di recupero dati semplici, una chiave API è ciò che cercherai. Quando ti registri per un servizio API, di solito te ne forniscono una. Tieni queste chiavi segrete! Non codificarle direttamente nel tuo repository di codice pubblico.

Effettuare Richieste e Gestire Risposte

In Python, la libreria requests è la tua migliore amica per fare richieste HTTP. È incredibilmente facile da usare e rende gestire le risposte un gioco da ragazzi.

Ecco un esempio molto semplice di recupero dati da un’ipotetica API “Chuck Norris Jokes”:


import requests

def get_chuck_norris_joke():
 url = "https://api.chucknorris.io/jokes/random"
 try:
 response = requests.get(url)
 response.raise_for_status() # Solleva un HTTPError per risposte errate (4xx o 5xx)
 joke_data = response.json()
 return joke_data['value']
 except requests.exceptions.RequestException as e:
 print(f"Errore nel recupero della barzelletta di Chuck Norris: {e}")
 return "Non sono riuscito a recuperare una barzelletta in questo momento. Chuck Norris è probabilmente troppo occupato a essere fantastico."

if __name__ == "__main__":
 joke = get_chuck_norris_joke()
 print(joke)

In questo frammento:

  • Definiamo l’URL dell’endpoint API.
  • requests.get(url) invia una richiesta GET.
  • response.raise_for_status() è una buona pratica per controllare automaticamente gli errori HTTP.
  • response.json() analizza la risposta JSON in un dizionario Python.
  • Accediamo quindi alla parte specifica del dizionario che contiene la barzelletta.
  • La gestione degli errori con un blocco try-except è cruciale per bot solidi.

I miei primi tentativi in questo ambito erano pieni di eccezioni KeyError perché non mi ero preso la briga di stampare in modo ordinato la risposta JSON e vedere effettivamente la sua struttura. Impara dai miei errori: controlla sempre la struttura JSON prima di cercare di estrarre dati da essa! Strumenti come Postman o anche semplicemente stampando response.json() nel tuo script possono salvarti da molti mal di testa.

Esempio Pratico 1: Un Semplice Bot Meteo (API OpenWeatherMap)

Creiamo un esempio pratico. Costruiremo un comando bot di Telegram che recupera il meteo attuale per una città specificata utilizzando l’API OpenWeatherMap. Avrai bisogno di una chiave API da OpenWeatherMap (hanno un piano gratuito).

Passo 1: Ottieni la Tua Chiave API

Vai su OpenWeatherMap, registrati e genera una chiave API. Supponiamo che tu la conservi in una variabile ambientale o in un file di configurazione (mai codificarla direttamente nel codice del bot per la produzione!). Per questo esempio, utilizzerò un segnaposto.

Passo 2: Codice Python per Recuperare il Meteo


import requests
import os

# Sostituisci con la tua chiave API reale di OpenWeatherMap o ottienila dall'ambiente
OPENWEATHER_API_KEY = os.getenv("OPENWEATHER_API_KEY", "YOUR_OPENWEATHER_API_KEY_HERE")

def get_current_weather(city_name):
 base_url = "http://api.openweathermap.org/data/2.5/weather"
 params = {
 "q": city_name,
 "appid": OPENWEATHER_API_KEY,
 "units": "metric" # o 'imperial' per Fahrenheit
 }

 try:
 response = requests.get(base_url, params=params)
 response.raise_for_status()
 weather_data = response.json()

 if weather_data.get("cod") == "404":
 return f"Impossibile trovare il meteo per {city_name}. Controlla il nome della città."

 main_weather = weather_data['weather'][0]['description']
 temperature = weather_data['main']['temp']
 feels_like = weather_data['main']['feels_like']
 humidity = weather_data['main']['humidity']
 wind_speed = weather_data['wind']['speed']

 return (f"Meteo attuale in {city_name.title()}:\n"
 f"Descrizione: {main_weather.capitalize()}\n"
 f"Temperatura: {temperature}°C (percepita {feels_like}°C)\n"
 f"Umidità: {humidity}%\n"
 f"Velocità del Vento: {wind_speed} m/s")

 except requests.exceptions.RequestException as e:
 print(f"Errore nel recupero del meteo per {city_name}: {e}")
 return "Scusami, ho problemi a recuperare i dati meteo in questo momento."
 except KeyError as e:
 print(f"Errore di chiave nei dati meteo per {city_name}: {e}. Risposta: {weather_data}")
 return "Qualcosa è andato storto nell'analisi dei dati meteo. Riprova più tardi."

if __name__ == "__main__":
 print(get_current_weather("Londra"))
 print(get_current_weather("CittàInesistente123"))

Nota come stiamo passando parametri come q (nome della città), appid (la tua chiave API), e units come dizionario a requests.get(). La libreria requests gestisce automaticamente la codifica di questi in stringa di query URL.

Passo 3: Integra con il Tuo Bot di Telegram

Ora, colleghiamo questo a un bot di Telegram. Userò python-telegram-bot per questo. Se non hai ancora un token per il bot, creane uno parlando con BotFather su Telegram.


from telegram import Update
from telegram.ext import Application, CommandHandler, ContextTypes
import os

# Il tuo token del bot di Telegram (ottienilo da BotFather)
TELEGRAM_BOT_TOKEN = os.getenv("TELEGRAM_BOT_TOKEN", "YOUR_TELEGRAM_BOT_TOKEN_HERE")
# La tua chiave API di OpenWeatherMap
OPENWEATHER_API_KEY = os.getenv("OPENWEATHER_API_KEY", "YOUR_OPENWEATHER_API_KEY_HERE")

# Assicurati che la funzione get_current_weather sia definita o importata qui sopra
def get_current_weather(city_name):
 base_url = "http://api.openweathermap.org/data/2.5/weather"
 params = {
 "q": city_name,
 "appid": OPENWEATHER_API_KEY,
 "units": "metric"
 }
 try:
 response = requests.get(base_url, params=params)
 response.raise_for_status()
 weather_data = response.json()

 if weather_data.get("cod") == "404":
 return f"Impossibile trovare le previsioni per {city_name}. Controlla il nome della città."

 main_weather = weather_data['weather'][0]['description']
 temperature = weather_data['main']['temp']
 feels_like = weather_data['main']['feels_like']
 humidity = weather_data['main']['humidity']
 wind_speed = weather_data['wind']['speed']

 return (f"Previsioni attuali per {city_name.title()}:\n"
 f"Descrizione: {main_weather.capitalize()}\n"
 f"Temperatura: {temperature}°C (percepita come {feels_like}°C)\n"
 f"Umidità: {humidity}%\n"
 f"Velocità del vento: {wind_speed} m/s")

 except requests.exceptions.RequestException as e:
 print(f"Errore nel recupero delle previsioni per {city_name}: {e}")
 return "Mi scuso, ho dei problemi a recuperare i dati meteo in questo momento."
 except KeyError as e:
 print(f"Errore di chiave nei dati meteo per {city_name}: {e}. Risposta: {weather_data}")
 return "Qualcosa è andato storto nell'analizzare i dati meteo. Riprova più tardi."


async def start_command(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
 await update.message.reply_text("Ciao! Sono un bot che può dirti il tempo. Prova /weather <city_name>")

async def weather_command(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
 if not context.args:
 await update.message.reply_text("Per favore fornisci un nome di città. Uso: /weather <city_name>")
 return
 
 city_name = " ".join(context.args)
 weather_info = get_current_weather(city_name)
 await update.message.reply_text(weather_info)

def main() -> None:
 application = Application.builder().token(TELEGRAM_BOT_TOKEN).build()

 application.add_handler(CommandHandler("start", start_command))
 application.add_handler(CommandHandler("weather", weather_command))

 application.run_polling(allowed_updates=Update.ALL_TYPES)

if __name__ == "__main__":
 main()

Per eseguire questo, assicurati di avere python-telegram-bot e requests installati: pip install python-telegram-bot requests. Poi, sostituisci le chiavi API segnaposto e esegui lo script. Puoi quindi inviare /weather Londra al tuo bot e dovrebbe rispondere con il tempo attuale!

Questo è un modello fondamentale per molte integrazioni API: l’input dell’utente attiva una funzione, quella funzione esegue una chiamata API, elabora i dati e invia una risposta formattata all’utente.

Esempio pratico 2: Invio di dati (richiesta POST) – Un semplice bot Todo

Non tutte le interazioni API riguardano solo il recupero di dati. A volte, il tuo bot deve inviare dati a un servizio esterno. Immaginiamo di voler un bot che possa aggiungere elementi a un semplice, ipotetico API “Todo”. Questa API si aspetta una richiesta POST con l’elemento todo nel corpo della richiesta.

Per questo esempio, simulerò un semplice punto di accesso API utilizzando un framework di server web locale come Flask. In uno scenario reale, questo sarebbe un servizio remoto con cui stai interagendo.

API Todo simulata (Flask)

Crea un file chiamato todo_api.py:


from flask import Flask, request, jsonify

app = Flask(__name__)
todos = []
todo_id_counter = 1

@app.route('/todos', methods=['POST'])
def add_todo():
 global todo_id_counter
 data = request.json
 if not data or 'task' not in data:
 return jsonify({"error": "Manca 'task' nel corpo della richiesta"}), 400
 
 new_todo = {"id": todo_id_counter, "task": data['task'], "completed": False}
 todos.append(new_todo)
 todo_id_counter += 1
 return jsonify(new_todo), 201

@app.route('/todos', methods=['GET'])
def get_todos():
 return jsonify(todos)

if __name__ == '__main__':
 app.run(port=5000, debug=True)

Esegui questo con pip install Flask e poi python todo_api.py. Avvierà un server su http://127.0.0.1:5000.

Codice del bot per aggiungere un elemento Todo


import requests
from telegram import Update
from telegram.ext import Application, CommandHandler, ContextTypes
import os

TELEGRAM_BOT_TOKEN = os.getenv("TELEGRAM_BOT_TOKEN", "YOUR_TELEGRAM_BOT_TOKEN_HERE")
TODO_API_BASE_URL = "http://127.0.0.1:5000" # La nostra API Flask locale

async def start_command(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
 await update.message.reply_text("Ciao! Sono un bot todo. Usa /add_todo <task> per aggiungere un'attività.")

async def add_todo_command(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
 if not context.args:
 await update.message.reply_text("Per favore fornisci un'attività. Uso: /add_todo <task>")
 return
 
 task_description = " ".join(context.args)
 endpoint = f"{TODO_API_BASE_URL}/todos"
 headers = {"Content-Type": "application/json"}
 payload = {"task": task_description}

 try:
 response = requests.post(endpoint, json=payload, headers=headers)
 response.raise_for_status() # Controlla errori HTTP
 
 todo_item = response.json()
 await update.message.reply_text(f"Attività '{todo_item['task']}' (ID: {todo_item['id']}) aggiunta con successo!")

 except requests.exceptions.RequestException as e:
 print(f"Errore nell'aggiunta di todo: {e}")
 await update.message.reply_text("Spiacente, non sono riuscito ad aggiungere l'attività in questo momento. Il servizio todo potrebbe essere inattivo.")
 except Exception as e:
 print(f"Si è verificato un errore imprevisto: {e}")
 await update.message.reply_text("Si è verificato un errore imprevisto durante l'aggiunta dell'attività.")

def main() -> None:
 application = Application.builder().token(TELEGRAM_BOT_TOKEN).build()

 application.add_handler(CommandHandler("start", start_command))
 application.add_handler(CommandHandler("add_todo", add_todo_command))

 application.run_polling(allowed_updates=Update.ALL_TYPES)

if __name__ == "__main__":
 main()

In questo esempio, requests.post(endpoint, json=payload, headers=headers) è la parte chiave. Specifichiamo il metodo POST, inviamo i nostri dati come un payload JSON e impostiamo l’header Content-Type per indicare che stiamo inviando JSON.

Quando stavo imparando a conoscere le richieste POST, continuavo a dimenticare l’header Content-Type. Le mie richieste fallivano spesso con errori criptici di “tipo di media non supportato” dalle API. Controlla sempre la documentazione delle API per gli header richiesti e il formato del corpo della richiesta (JSON, dati del modulo, ecc.). Questa è stata una lezione imparata alla dura!

Insegnamenti pratici per i tuoi progetti bot

Integrare le API nei tuoi bot è un’abilità che apre un mondo di possibilità. Ecco cosa voglio che tu ricordi:

  1. Inizia semplice: Non cercare di integrare un’API complessa OAuth 2.0 come tuo primo progetto. Inizia con API pubbliche che utilizzano una semplice autenticazione con chiave API e richieste GET.
  2. Leggi la documentazione: Seriamente, questo è non negoziabile. Ogni API ha le sue peculiarità. Comprendi gli endpoint, i parametri richiesti, i metodi di autenticazione e i formati di risposta. Questo ti farà risparmiare ore di debugging.
  3. Ispeziona le risposte: Usa dichiarazioni di stampa o uno strumento come Postman per esaminare la risposta JSON raw da un’API. Questo ti aiuterà a capire la sua struttura e ad accedere correttamente ai dati di cui hai bisogno.
  4. La gestione degli errori è cruciale: Le API possono fallire per molti motivi (problemi di rete, limiti di frequenza, richieste non valide, errori del server). Avvolgi sempre le tue chiamate API in blocchi try-except e fornisci messaggi utili agli utenti del tuo bot.
  5. Proteggi le tue chiavi API: Non codificare mai informazioni sensibili come le chiavi API direttamente nel tuo codice, specialmente se andranno in un repository pubblico. Usa variabili di ambiente o un sistema di gestione delle configurazioni sicuro.
  6. Limiti di frequenza: Tieni presente che la maggior parte delle API ha limiti di frequenza (quante richieste puoi fare in un determinato periodo di tempo). Il tuo bot dovrebbe gestirli in modo appropriato, magari aspettando e riprovando, o informando l’utente.
  7. Considera operazioni asincrone: Per bot più complessi o API che potrebbero richiedere del tempo per rispondere, considera di utilizzare la programmazione asincrona (ad esempio, asyncio di Python) per evitare che il tuo bot si blocchi mentre aspetta che una chiamata API venga completata.

Il percorso da un semplice bot echo a un vero assistente intelligente e basato sui dati è lastricato di integrazioni API di successo. È dove il tuo bot smette di essere solo un programma e inizia a diventare uno strumento potente che collega gli utenti all’immenso oceano di informazioni e servizi disponibili online.

Quindi vai avanti, scegli un’API interessante e inizia a sperimentare! I tuoi utenti (e il tuo gruppo di D&D) ti ringrazieranno. Fino alla prossima volta, buon divertimento nella creazione di bot!

Articoli correlati

🕒 Published:

💬
Written by Jake Chen

Bot developer who has built 50+ chatbots across Discord, Telegram, Slack, and WhatsApp. Specializes in conversational AI and NLP.

Learn more →
Browse Topics: Best Practices | Bot Building | Bot Development | Business | Operations
Scroll to Top