Chatbot Telegram: conversione note vocali in messaggi

di Lorenzo Neri

È possibile eseguire la conversione delle note vocali in messaggi di testo con un chatbot Telegram? La risposta è sì e in questo articolo ti spiego come sia possibile in ogni passo!

Immagina di avere un chatbot che, presa in input la nota audio del tuo utente, sia in grado di trasformarla in un messaggio testuale.

Ciao mi chiamo Lorenzo Neri e sono un informatico: realizzo contenuti per aiutare le persone a padroneggiare l’arte del nuovo millennio, ovvero l’informatica!

Tra tutte le potenzialità che ci offre Telegram c’è anche questa…parzialmente poiché ci serve un’aggiunta in più oltre alle API stesse. Ma comunque rientra assolutamente fra le cose che puoi fare con un chatbot Telegram.

Dicevo, che se vuoi eseguire la conversione delle note vocali in messaggi Telegram in sé e i suoi servizi non bastano: serve un’aggiuntina, che dà vita ad una struttura, anzi un’architettura.

Architettura della conversione note vocali in messaggi

Il nostro chatbot Telegram che permette di dare vita a tutto questo, necessità come ti dicevo prima di un’aggiuntina e di un’archiettura a tutti gli effetti: vediamola assieme.

Il primo step, consiste nel ricevere una nota audio dal nostro utente: i famigerati messaggi vocali 😛

A questo punto, Telegram la riceve e la salva sui suoi server.

Il secondo step, è il cuore effettivo del nostro chatbot: attraverso il metodo “getUpdates verifichiamo l’arrivo della nota audio al nostro chatbot.

Siccome Telegram salva i messaggi vocali in formato “oga” ci serve uno step in più. Il tuo chatbot dovrà convertire il file scaricato dai server di Telegram in formato “wav”: perché?

Perchè qui, arriviamo alla famosa “aggiuntina”: abbiamo bisogno di Google per convertire la nota audio in testo vero e proprio.

Quindi il quarto step del processo di conversione consiste nel trasformare il file da “oga” a “wav”.

Il quinto è sfruttare lo speech recognizer di Google.

Lo “speech recognizer” è quello strumento in grado di carpire le parole da un file audio

Quindi Google Cloud Speech API è il sistema che ci permette di convertire ciò che dice il nostro utente in un messaggio di testo vero e proprio!

Concludiamo tornando al nostro chatbot Telegram: il sesto step, una volta effettuata la conversione della nota vocale in testo puro, costruiamo un oggetto di tipo “Message” e in ultima battuta lo mandiamo all’utente.

Quindi il processo di conversione note vocali in messaggi o meglio dire l’architettura, è abbastanza semplice. E l’implementazione?

Implementiamo il nostro chatbot Telegram

Arrivati a questo punto, implementiamo il chatbot Telegram con Python:

import telegram
import requests
import speech_recognition as sr
from pydub import AudioSegment
# chatbot token
token="il_tuo_chatbot_token"
# istanzio il chatbot
chatbot=telegram.Bot(token=token)
# ciclo never ending
while True:
    latests=[]
    try:
        latests=chatbot.getUpdates()
    except Exception as e:
        print(f"Errore di time out: {str(e)}")
        pass
    last=None
    # significa che ho messaggi in memoria
    if len(latests)>0:
        # prendo l'ultimo messaggio il più recente
        last=latests[-1]
        # verifico se non ho già risposto al messaggio
        file_ultimo= open("./lastanswered.txt","r")
        righe=file_ultimo.readlines()
        to_answer=False
        if len(righe)>0:
            if str(last.message.message_id)!=righe[0].strip("\n"):
                file_ultimo.close()
                file_ultimo= open("./lastanswered.txt","w")
                file_ultimo.write(f"{last.message.message_id}\n")
                file_ultimo.close()
                to_answer=True
        else:
            file_ultimo= open("./lastanswered.txt","w")
            file_ultimo.write(f"{last.message.message_id}\n")
            file_ultimo.close()
            to_answer=True
        # non ho ancora risposto al messaggio, procedo
        if to_answer:
            if last is not None:
                print("Devo rispondere al messaggio")
                # verifico che il contenuto sia di tipo "voice"
                if hasattr(last.message,"voice"):
                    # recupero il file dai sever di Telegram
                    file_url=chatbot.getFile(last.message.voice.file_id).file_path
                    richiesta = requests.get(file_url)
                    
                    # lo salvo il locale in formato "oga"
                    with open(f"./notaaudio.oga", 'wb') as nota_ogg:
                        nota_ogg.write(richiesta.content)
                    
                    # lo converto in formato wav
                    AudioSegment.from_ogg('notaaudio.oga').export('notaaudio.wav', format='wav')
                    audio_recognizer = sr.Recognizer()
                    with sr.AudioFile("./notaaudio.wav") as nota_wav:
                        
                         
                        audio_data = audio_recognizer.record(nota_wav)
                        # lingua utente: nel caso si voglia modificare la lingua da impostare durante le richieste a Google
                        language_user_code=last.effective_user.language_code
                        # prendo la conversione in testo da Google
                        testo_ottenuto = audio_recognizer.recognize_google(audio_data,language="it-IT")
                        # Invio una conferma all'utente con un messaggio
                        chatbot.sendMessage(chat_id=last.message.chat_id,text=f"Dovresti avermi detto qualcosa come {testo_ottenuto}")

Oltre al pacchetto Telegram stesso, è necessario un altro package: “speech_recognition”.

Ti piacerebbe scoprire come realizzare chatbot Telegram per tutti i tuoi progetti?

Scopri il percorso Telegram per il mondo embedded e IoT!

Vediamo in azione il tutto

Una volta lanciato in esecuzione il sistema, basta mandare un audio al nostro chatbot e… voilà!

Oppure puoi clonarti il chatbot da GitHub

Ho voluto realizzare un repository su GitHub dove puoi trovare tutto questo, dotato di un README con spiegazioni aggiuntive. Se vuoi buttarci un occhio lo trovi qui.

Continua a scoprire di più con questi articoli!

Lascia un commento


The reCAPTCHA verification period has expired. Please reload the page.

Questo sito potrebbe fare uso di cookie e siccome l'UE mi obbliga a fartelo presente, eccoti il classico banner dove puoi decidere come gestirli. Accetta Leggi di più