- API di Telegram. Come wrapper, ho preso una comprovata libreria di python-telegram-bot
- IA dell’API. Ho scelto un prodotto di Google, nello specifico Dialogflow . Fornisce un’API gratuita abbastanza buona. Il wrapper Dialogflow per Python
Passaggio 1. Creiamo un bot in Telegram
Scegliamo un nome e lo inviamo a @botfather . Dopo la creazione del bot, otterremo il token API, lo salveremo da qualche parte, poiché in futuro ne avremo bisogno.
Passaggio 2. Scriviamo le basi del nostro bot
Creare una cartella denominata “Bot”, nella quale poi creare il file bot.py. Ecco il codice del nostro bot. Apri la console e vai nella directory con il file, installa python-telegram-bot.
pip install python-telegram-bot — aggiorna
Dopo l’installazione, possiamo già scrivere le “basi”, che per ora risponderanno semplicemente con lo stesso tipo di messaggi. Importiamo i moduli necessari e registriamo il nostro token API:
# Impostazioni
da telegram.ext import Updater, CommandHandler, MessageHandler, Filters
updater = Updater(token='YOURE API TOKEN') # Telegram API Token
dispatcher = updater.dispatcher
Successivamente, scriviamo 2 gestori di comandi. Si tratta di funzioni di callback che verranno chiamate alla ricezione dell’aggiornamento. Scriviamo due di queste funzioni per il comando / start e per qualsiasi messaggio di testo normale. Due parametri vengono passati lì come argomenti: bot e update. Bot contiene i metodi necessari per interagire con l’API e update contiene informazioni sul messaggio in arrivo.
# Elaborazione del comando
def startCommand(bot, update):
bot.send_message(chat_id=update.message.chat_id, text='Ciao, vuoi parlare?')
def textMessage(bot, update):
response = 'Ho ricevuto il tuo messaggio : ' + update.message.text
bot.send_message(chat_id=update.message.chat_id, text=response)
Ora tutto ciò di cui abbiamo bisogno è assegnare questi gestori alle notifiche e iniziare a cercare gli aggiornamenti. Questo è fatto molto semplicemente:
# Handlers
start_command_handler = CommandHandler('start', startCommand)
text_message_handler = MessageHandler(Filters.text, textMessage)
# Qui aggiungiamo i gestori al dispatcher
dispatcher.add_handler(start_command_handler)
dispatcher.add_handler(text_search_handler updater)
# Start
. start_polling(clean=True)
# Arresta il bot, se sono stati premuti Ctrl + C
updater.idle()
Ora possiamo testare le prestazioni del nostro nuovo bot. Incolliamo il nostro token API sulla riga 2, quindi salviamo le modifiche, spostiamolo nella console ed eseguiamo il bot:
python bot.py
Dopo l’inizio mandagli un messaggio. Se tutto è stato fatto correttamente vedrai questo:
Le basi per il bot sono scritte, passiamo allo step successivo!
Ps non dimenticare di disattivare il bot. Per farlo torna alla console e premi Ctrl + C, attendi un paio di secondi e il bot completerà con successo il lavoro.
Passaggio 3 Impostazioni AI
Prima di tutto, registrati su Dialogflow (basta accedere con il tuo account Google). Subito dopo l’autorizzazione, si arriva al pannello di controllo.
Fai clic su Crea agente e compila i campi con quello che vuoi (questo non avrà alcun ruolo, è solo necessario per l’azione successiva).
Dopodiché fai clic su Crea.
Ora ti dirò perché l'”Agente” che abbiamo creato in precedenza non ha alcun ruolo. Nella scheda Intenti, ci sono “comandi” su cui funziona il bot. Ora può rispondere solo a frasi come “Ciao”, e se non capisce, risponde “Non ti ho capito”. Non molto impressionante. Dopo aver creato il nostro agente vuoto, abbiamo un sacco di altre schede. Dobbiamo fare clic su Agenti predefiniti (questi sono agenti già appositamente addestrati che hanno molti comandi) e selezionare Small Talk dall’intero elenco.
Fare clic su Importa. Quindi, senza modificare nulla, clicca su Ok. L’agente è stato importato e ora possiamo configurarlo. Per fare ciò, nell’angolo in alto a sinistra fai clic sull’ingranaggio vicino a Small-Talk e accedi alla pagina delle impostazioni. Ora possiamo cambiare il nome dell’agente come desiderato (lo lascio com’era). Modifichiamo il fuso orario e nella scheda Lingue ci assicuriamo che sia stata impostata la lingua inglese.
Ora torniamo in Generale e copiamo il token di accesso del cliente
Ora che la nostra intelligenza artificiale è completamente pronta, possiamo tornare al bot
Passaggio 4. Mettiamo tutto insieme
L’intelligenza artificiale è pronta, le basi dei bot sono pronte, cosa c’è dopo?
Successivamente, dobbiamo scaricare il wrapper API da Dialogflow per python.
pip install apiai
Perfetto. Ora torniamo al nostro bot.
Aggiungiamo alla nostra sezione “Impostazioni” l’importazione dei moduli apiai e json (in futuro dovrai disassemblare le risposte da dialogflow). Ora sembra così:
# Impostazioni
da telegram.ext import Updater, CommandHandler, MessageHandler, Filters
import apiai, json
updater = Updater(token='YOURE API KEY') # Telegram API Token
dispatcher = updater.dispatcher
Vai alla funzione textMessage (che è responsabile della ricezione di qualsiasi messaggio di testo) e invia i messaggi ricevuti al server Dialogflow:
def textMessage(bot, update):
request = apiai.ApiAI('YOURE API TOKEN').text_request() # Dialogflow API Token
request.lang = 'en'
request.session_id = 'YoureBot' # ID dialog session (per formazione bot )
request.query = update.message.text # Invia una richiesta ad AI con il messaggio dell'utente
Questo codice invierà una richiesta a Dialogflow, ma dobbiamo anche estrarre la risposta. Dopo aver aggiunto un paio di righe, il messaggio di testo si presenta così:
def textMessage(bot, update):
request = apiai.ApiAI('YOURE API TOKEN').text_request() # Dialogflow API Toke
request.lang = 'en'
request.session_id = 'BatlabAIBot' # ID dialog session (per formazione bot )
request.query = update.message.text # Invia una richiesta ad AI con il messaggio utente
responseJson = json.loads(request.getresponse().read().decode('utf-8'))
response = responseJson['result ']['fulfillment']['speech'] # Accetta la risposta JSON
se risposta:
bot.send_message(chat_id=update.message.chat_id, text=response)
else:
bot.send_message(chat_id=update.message.chat_id, text ='Non capisco!')
Alcune spiegazioni:
richiesta.getresponse().read()
ottenere la risposta dal server, codificata in byte. Per decodificarlo, applichiamo semplicemente il metodo:
decodifica(‘utf-8’)
E dopo di che “avvolgiamo” tutto in:
json.loads()
Ora tutto ciò che serve è salvare tutto e controllare il bot
Passaggio 5.
Ci sono voluti 10 minuti per creare il nostro primo bot AI. Naturalmente ha ancora bisogno di un addestramento massiccio. Puoi farlo nella sezione Formazione su Dialogflow.
Ora, se vuoi ospitare il tuo bot, puoi utilizzare la guida Dove ospitare i bot di Telegram .