Considerare la creazione di un'applicazione per lavorare con ChatGPT. Il suo compito sarà quello di ricevere messaggi vocali tramite Telegram, convertirli in testo, trasferirli a ChatGPT e inviare una risposta a Telegram. Durante il processo di creazione, è necessario eseguire i seguenti passaggi:

  1. Creazione di un bot per Telegram e sua configurazione di base.
  2. Ricezione di un file con un messaggio vocale (Telegram utilizza il formato .oga ).
  3. Convertire il file da oga a mp3.
  4. Trasferimento del file mp3 al servizio Whisper per la conversione in testo.
  5. Invio di un testo ricevuto a ChatGPT.
  6. Invio di una risposta da ChatGPT a un utente in Telegram.

Creazione di un bot per Telegram e sua configurazione di base

Tutto inizia con la registrazione di un bot. A questo scopo, Telegram utilizza il suo bot speciale - BotFather. È necessario scrivergli e seguire dei semplici passaggi sequenziali.

Telegram BotFather

Come risultato, si dovrebbe avere un link al bot e un token per le richieste alle sue API.

Ora si può passare alla configurazione del bot in AppMaster. Il modo più semplice per farlo è installare il modulo appropriato. È sufficiente selezionarlo nell'elenco dei moduli e specificare il token API nelle impostazioni.

Telegram Module

I modelli necessari saranno creati automaticamente nel progetto, appariranno i blocchi per lavorare con Telegram e il processo commerciale di base di Telegram. Telegram: Echo. Vale la pena considerare attentamente e comprendere il principio di funzionamento.

Telegram Echo business process

In ingresso, riceve un messaggio da Telegram (modelloMessage ). Contiene il testo del messaggio inviato (text), nonché il modello chat da cui è possibile ottenere l'identificativo del mittente (id). L'ultimo blocco Telegram: Send Message invia il messaggio ricevuto al mittente, ma per conto del bot.

È possibile utilizzare questo processo aziendale per il test iniziale del bot e la comunicazione con esso. A tal fine, è necessario creare un endpoint che riceva informazioni e avvii un processo aziendale.

Telegram bot endpoint

Quando lo si crea, è importante disabilitare Middleware Token Auth. L'endpoint deve essere aperto all'uso senza autorizzazione.

Il principio di funzionamento del bot Telegram è piuttosto semplice: tutti i messaggi che gli verranno inviati vanno a uno speciale webhook, che può trasferirli automaticamente e inviarli all'endpoint di vostra scelta per ulteriori azioni.

Di conseguenza, l'ultimo passo resta l'attivazione del bot: è necessario registrare questo endpoint in Telegram e indicare che il bot deve essere associato ad esso. Ciò richiede l'invio di una richiesta POST con l'URL completo dell'endpoint e indicando il proprio token bot al posto di {Bot API Token} all'indirizzo

https://api.telegram.org/bot{Bot API Token}/setWebhook

Se si riceve un messaggio di questo tipo in risposta, allora tutto è stato fatto correttamente.

 {

    "ok": true,

    "result": true,

    "description": "Webhook was set"

}

Post Telegram Webhook

Il bot è pronto a lavorare, è possibile inviargli un messaggio e riceverlo indietro.

Ricevere un file con un messaggio vocale

Il modulo Telegram è stato progettato principalmente per lavorare con i messaggi di testo. Il nostro compito è quello di ricevere un file con un messaggio vocale. Con AppMaster è possibile risolvere facilmente questo problema. Innanzitutto, dobbiamo analizzare ciò che riceviamo generalmente da Telegram per analizzare la struttura del messaggio. Il blocco Get Request Body è stato progettato per questo scopo. Elimina la necessità di specificare in anticipo la struttura della richiesta e consente di ricevere l'intera richiesta, indipendentemente dal suo contenuto. Questo blocco restituisce il risultato della query come un insieme di byte e si può usare il blocco To String per presentare il risultato in una forma leggibile dall'uomo, nonché per salvarlo in un registro (bloccoWrite to Log ) per ulteriori analisi.

Telegram Request log

Siamo interessati a due parametri dell'intera richiesta:

Sender ID - specificati nella richiesta come "id":300493858
File ID - "file_id":"AwACAgIAAxkBAAMzZBk6QRvO-OYWsWUC-Bu1UXDM2FwAAkktAAKTZclIWTSkfTTw8wYvBA"

È possibile creare un proprio modello che corrisponda alla richiesta e utilizzarlo per ottenere i campi richiesti. Ma sarà più veloce creare un'espressione regolare (Regex) e utilizzarla. Per farlo, il blocco String Match Regex prende in input l'espressione stessa e la stringa in cui verrà verificata la corrispondenza con l'espressione data.

Nel primo caso, l'espressione è "id":"\d+

Come risultato, otteniamo la stringa "id":300493858, dalla quale dovremo rimuovere l'extra ("id":) usando il blocco Replace String e lasciare solo l'identificatore stesso.

Nel secondo caso, il principio è esattamente lo stesso, ma viene utilizzata un'espressione leggermente più complessa: "file_id":"[^"]+

Regex to get request ID

Ora abbiamo l'id del mittente e l'id del file e possiamo usarli per ottenere il file stesso. Per farlo, occorre rivolgersi a Telegram API. Questo è già stato fatto in precedenza, quando si è registrato l'endpoint del bot. Ora è necessario fare una richiesta simile per ottenere il file. {File ID} nell'URL della richiesta deve essere sostituito con l'ID del file ricevuto.

https://api.telegram.org/bot{Bot API Token}/setWebhook/getFile?file_id={File ID}

Per inviare una richiesta e riceverne il risultato, si usa il blocco HTTP Request specificando l'URL e Method = GET come parametri.

Telegram File Request

Dalla risposta ricevuta, è possibile scoprire il percorso relativo al file, passato nel parametro "file_path". Di conseguenza, utilizzando l'espressione regolare successiva ("file_path":"[^"]+) è possibile estrarre il valore desiderato e collegarlo con "https://api.telegram.org/file/bot{Bot API Token}/" per ottenere il link completo al file.

Convertire il file da OGA a MP3

Il file viene ricevuto, ma l'ostacolo è che il servizio Whisper non supporta l'utilizzo del formato OGA formato. È necessario convertire il file in uno dei formati appropriati.

A titolo di esempio, si utilizza il servizio Zamzar (il suo piano gratuito supporta la possibilità di effettuare 100 conversioni al mese) e la conversione in MP3.

È possibile fare riferimento alla sua documentazione per i dettagli o utilizzare un altro servizio simile. Non analizzeremo il lavoro con esso in dettaglio e considereremo solo la parte che riguarda direttamente l'implementazione di AppMaster.

Innanzitutto, la richiesta avrà bisogno dei dati di autenticazione corretti. Questi devono essere forniti nel formato Basic Authentication nel formato Per fare ciò, è necessario passare un'intestazione con i valori nella richiesta:

Key = 'Authorization'

Value = 'Basic '+ ID utente e password separati da ":" nel formato base64 formato

La chiave API ottenuta al momento della registrazione al servizio è l'ID utente. È necessario aggiungervi ":" e codificarla in formato Base64 utilizzando il blocco To Base64 . Il risultato deve essere trasformato in un'intestazione (Make Key-Value (String) blocco).

Zamzar Auth Header

Il passo successivo consiste nel creare un modello per la query nel designer di database. La richiesta deve essere inviata nel formato Multipart Form rispettivamente, è necessario preparare un modello della forma di questa richiesta. Nel nostro esempio, il modello è costituito da tre campi di tipo String:

  • source_file - il percorso completo del file sorgente (appreso nel passo precedente).
  • source_format - il formato del file di origine, che in questo esempio è un valore fisso "ogg".
  • target_format - formato di destinazione per la conversione. È possibile scegliere qualsiasi formato supportato da Whisper. Utilizziamo "mp3" come esempio.

Zamzar Request Model

Nell'editor dei processi aziendali, è necessario utilizzare il blocco Make per compilare i dati del modello e inviarli come richiesta POST a https://sandbox.zamzar.com/v1/jobs/ usando il blocco HTTP Request (assicurarsi di specificare Serialize request body = Multipart Form).

Zamzar Conversion Request

Va notato che questa richiesta non restituisce il file convertito, ma crea solo un'attività per convertirlo. È necessario richiedere il risultato separatamente; per questo, è necessario l'ID del task creato. Questo ID deve essere ottenuto dal corpo della risposta alla richiesta e, per questo, il processo già elaborato deve essere fatto usando espressioni regolari ed estraendo il valore dell'id.

Il risultato della conversione deve essere applicato separatamente. Questo richiederà altre due richieste. La prima è per sapere se il risultato è pronto. La seconda è per prelevare il file finito. Allo stesso tempo, non conosciamo il momento esatto in cui il risultato è pronto, quindi possiamo organizzare un ciclo che invierà richieste ripetute per verificare la prontezza a determinati intervalli (ad esempio, ogni secondo).

Zamzar Conversion Check Loop

Una HTTP Request deve essere inviata con il metodo GET all'URL https://sandbox.zamzar.com/v1/jobs/{id}, dove {id} è l'id del task ottenuto nel passo precedente. Si utilizzano le stesse intestazioni della richiesta precedente.

Dalla risposta ricevuta, è necessario scoprire lo stato di preparazione. Se la conversione è stata completata, la risposta conterrà "status": "successful" e per noi questo è il segnale che possiamo completare il ciclo e andare avanti.

Oltre allo stato, la risposta deve contenere l'ID del file finito ("target_files":[{"id":). Deve essere estratto per ottenere il link finale al file nella forma https://sandbox.zamzar.com/v1/files/{ID}/content

Allo stesso tempo, la ricezione di un file è disponibile solo per gli utenti autorizzati, quindi è necessario eseguire un HTTP Request utilizzando le stesse intestazioni delle richieste precedenti.

Come risultato della richiesta, si otterrà il contenuto del file, al quale dovrà essere assegnato un nome e che dovrà essere salvato per un ulteriore utilizzo.

Zamzar save converted file

Invio di un file MP3 a Whisper per la conversione in testo

Ora tutto è pronto per il passo successivo: l'invio di un file con un messaggio vocale per il riconoscimento. A tal fine è necessaria un'altra richiesta nel formato Multipart Form formato. Solo che, a differenza dell'esempio precedente, la richiesta dovrà trasferire il file stesso e non un link ad esso.

Un modello per tale richiesta può essere creato nella sezione External HTTP Request nella sezione. In questo caso, non si può creare una richiesta completa, ma limitarsi a creare un modello del corpo della richiesta. Il modello stesso è composto da due parametri:

  1. File (Virtual File tipo) - lo stesso file che deve essere riconosciuto.
  2. model (tipo String) - qui si specifica il valore whisper-1.

Whisper request model

Inoltre, per la richiesta, è necessario ottenere una chiave per lavorare con l'API e generare un'intestazione di autorizzazione del file. OpenAI API e generare un'intestazione di autorizzazione del Bearer Token tipo.

Key = 'Authorization'

Value = 'Bearer '+ OpenAI API Key

Quindi, è possibile inviare la richiesta POST per il riconoscimento del messaggio vocale al servizio Whisper all'URL https://api.openai.com/v1/audio/transcriptions

Whisper HTTP Request

Se il riconoscimento del file è avvenuto con successo, si riceverà una risposta nel formato {"text": "Hello world.”}

Invio di un testo ricevuto a ChatGPT

È possibile continuare a utilizzare i blocchi HTTP Request per inviare una richiesta a ChatGPT. Per esplorare la documentazione dell'API, nonché per creare in modo indipendente modelli per le richieste e le risposte. Ma si può anche utilizzare un'opzione più semplice, sotto forma di un modulo già pronto di AppMaster per lavorare con OpenAIche deve essere installato nella sezione dei moduli.

OpenAI Module

Nella versione minimamente sufficiente, è sufficiente specificare i parametri del modello OAI ChatCompletionMessage (role = user, content = messaggio da inviare), aggiungerli all'array e inviare una richiesta a ChatGPT con il blocco OpenAI: Create Chat Completion (parametro set model = gpt-4).

OpenAI Request

Come risultato, otteniamo una risposta da ChatGPT. La leggiamo dal parametro content del modello OAI ChatCompletionChoice modello.

ChatGPT Response

Invio di una risposta da ChatGPT a un utente in Telegram

L'ultimo passo consiste solo nel ripetere ciò che è già stato fatto in precedenza: inviare un messaggio a Telegram. Ma se abbiamo iniziato semplicemente restituendo il messaggio al mittente, ora questo messaggio ha avviato una serie di varie azioni e il risultato è restituito come risposta da ChatGPT.

Telegram send ChatGPT response

Nel processo di sviluppo di un bot di questo tipo, vale la pena di considerare:

  1. Telegram lavora in modo tale che ogni richiesta inviata dal bot debba essere elaborata con successo. In caso contrario, cercherà di ripeterla più volte, il che significa che in caso di problemi la riceverete ancora e ancora. Assicuratevi che la logica sia costruita in modo tale che la richiesta non dia luogo a un errore e possa essere elaborata con successo.
  2. Non tutte le richieste funzioneranno come previsto al primo tentativo. Sarà necessario cercare gli errori e per questo, organizzare dei Write to Log blocchi. Sono utili sia per verificare che ogni blocco riceva effettivamente i dati che si era previsto di trasmettere, sia per analizzare il risultato del blocco e studiare la risposta in dettaglio.
  3. Nella guida abbiamo ipotizzato che tutte le richieste siano prevedibili e vadano a buon fine e che il processo sia abbastanza lineare. In pratica, sarà necessario fornire una serie di opzioni per le azioni (ad esempio, cosa fare se l'utente invia un messaggio di testo invece di un messaggio vocale o addirittura un'immagine) e la gestione degli errori (controllare lo stato delle richieste HTTP, tenere conto delle diverse opzioni di risposta).
Was this article helpful?

AppMaster.io 101 Corso intensivo

10 Moduli
2 settimane

Non sai da dove cominciare? Inizia con il nostro corso intensivo per principianti ed esplora AppMaster dalla A alla Z.

Inizia il corso
Development it’s so easy with AppMaster!

Serve ancora aiuto?

Risolvi qualsiasi problema con l'aiuto dei nostri esperti. Risparmia tempo e concentrati sulla creazione delle tue applicazioni.

headphones

Contatta il Supporto

Parlaci del tuo problema e ti troveremo una soluzione.

message

Chat comunitaria

Discuti le domande con altri utenti nella nostra chat.

Unisciti alla comunità