Considere a criação de uma aplicação para trabalhar com ChatGPT. A sua tarefa será receber mensagens de voz via Telegram, convertê-las em texto, transferi-las para ChatGPT, e enviar uma resposta de volta para Telegram. Durante o processo de criação, terá de passar pelos seguintes passos:
- Criação de um bot para Telegram e a sua configuração básica.
- Recepção de um ficheiro com uma mensagem de voz (Telegram utiliza o formato .oga ).
- Converter o ficheiro de oga para mp3.
- Transferir o ficheiro mp3 para o formato Whisper serviço de conversão para texto.
- Envio de um texto recebido para ChatGPT.
- Envio de uma resposta de ChatGPT a um utilizador em Telegram.
Criação de um bot para Telegram e a sua configuração básica
Tudo começa com o próprio facto de registar um bot. E para isso, Telegram utiliza o seu próprio bot especial - BotFather. É preciso escrever-lhe e passar por etapas sequenciais simples.
Como resultado, deverá ter uma ligação ao seu bot e um símbolo para pedidos ao seu API.
Agora pode passar à configuração do bot em AppMaster. A maneira mais fácil de o fazer é instalar o módulo apropriado. Basta seleccioná-lo na lista de módulos e especificar o seu código API nas definições.
Os modelos necessários serão automaticamente criados no seu projecto, aparecerão blocos para trabalhar com Telegram, bem como o processo básico de negócio Telegrama Telegram: Echo. Vale a pena considerar cuidadosamente e compreender o princípio do trabalho.
À entrada, recebe uma mensagem de Telegram ( modeloMessage ). Contém o texto da mensagem enviada (text), assim como o modelo chat do qual se pode obter o identificador do remetente (id). O último bloco Telegram: Send Message envia a mensagem recebida de volta para o remetente, mas em nome do bot.
Pode utilizar este processo comercial para o teste inicial do bot e para a comunicação com ele. Para o fazer, é necessário criar um ponto final que receba informação e inicie um processo de negócio.
Ao criá-lo, é importante desactivar Middleware Token Auth. O ponto final deve estar aberto para utilização sem autorização.
O princípio de funcionamento do bot Telegram é bastante simples - todas as mensagens que lhe serão enviadas vão para um gancho web especial, que pode transferi-las automaticamente e enviá-las para o ponto final da sua escolha para outras acções.
Assim, o último passo continua a ser activar o bot - é necessário registar este ponto final em Telegram e indicar que este bot deve ser associado a ele. Isto requer o envio de um pedido para POST com o URL completo do ponto final e a indicação do seu símbolo bot em vez de {Bot API Token} para o endereço
https://api.telegram.org/bot{Bot API Token}/setWebhook
Se receber tal mensagem em resposta, então tudo foi feito correctamente.
{
"ok": true,
"result": true,
"description": "Webhook was set"
}
O bot está pronto a trabalhar, pode enviar-lhe uma mensagem e recuperá-la.
Recepção de um ficheiro com uma mensagem de voz
O módulo Telegram foi concebido principalmente para trabalhar com mensagens de texto. E a nossa tarefa consiste em obter um ficheiro com uma mensagem de voz. Com AppMaster, pode resolver facilmente este problema. Primeiro, precisamos de analisar o que geralmente recebemos de Telegram para analisar a estrutura da mensagem. O Get Request Body bloco foi concebido para isto. Elimina a necessidade de especificar previamente a estrutura do pedido e permite receber o pedido na sua totalidade, independentemente do seu conteúdo. Este bloco devolve o resultado da consulta como um conjunto de bytes, e pode utilizar o To String bloco para apresentar o resultado de uma forma legível para o ser humano, bem como guardá-lo em registos (Write to Log bloco) para uma análise mais aprofundada.
Estamos interessados em dois parâmetros de todo o pedido:
Sender ID - especificados no pedido como "id":300493858
File ID - "file_id":"AwACAgIAAxkBAAMzZBk6QRvO-OYWsWUC-Bu1UXDM2FwAAkktAAKTZclIWTSkfTTw8wYvBA"
Pode criar o seu próprio modelo que corresponda ao pedido e utilizá-lo para obter os campos requeridos. Mas será mais rápido criar uma expressão regular (Regex) e utilizá-lo. Para o fazer, a String Match Regex O bloco toma a própria expressão como entrada, bem como a corda em que a correspondência com a expressão dada será verificada.
No primeiro caso, a expressão é "id":"\d+
Como resultado, obtemos o fio "id":300493858, do qual teremos de retirar o extra ("id":) utilizando o Replace String bloquear e deixar apenas o próprio identificador.
No segundo caso, o princípio é exactamente o mesmo, mas é utilizada uma expressão ligeiramente mais complexa: "file_id":"[^"]+
Agora temos a identificação do remetente e a identificação do ficheiro, e podemos utilizá-la para obter o próprio ficheiro. Para o fazer, é necessário recorrer ao Telegram API. Isto já foi feito anteriormente ao registar o ponto final do bot. Agora é necessário fazer um pedido semelhante para obter o ficheiro. {File ID} no URL do pedido deve ser substituído pelo ID do ficheiro recebido.
https://api.telegram.org/bot{Bot API Token}/setWebhook/getFile?file_id={File ID}
Para enviar um pedido e receber o seu resultado, utilizamos o HTTP Request bloco, especificando URL e Method = GET como parâmetros para ele.
A partir da resposta recebida, pode-se descobrir o caminho relativo ao ficheiro, que é passado no "file_path" parâmetro. Assim, utilizando a próxima expressão regular ("file_path":"[^"]+) pode extrair o valor desejado e ligar-se com "https://api.telegram.org/file/bot{Bot API Token}/" para obter a ligação completa ao ficheiro.
Converta o ficheiro de OGA para MP3
O ficheiro é recebido, mas o obstáculo é que o Whisper serviço não apoia o trabalho com o OGA formato. É necessário converter para um dos formatos apropriados.
A título de exemplo, o Zamzar (o seu plano gratuito suporta a capacidade de fazer 100 conversões por mês) e convertendo para MP3.
Pode consultar a sua documentação para obter detalhes ou utilizar outro serviço semelhante. Não analisaremos o trabalho com ele em pormenor, e consideraremos apenas a parte directamente relacionada com a implementação de AppMaster.
Em primeiro lugar, o pedido necessitará dos dados de autenticação correctos. Estes devem ser fornecidos no Basic Authentication formato. Para tal, é necessário passar um cabeçalho com valores no pedido:
Key = 'Authorization'
Value = 'Basic '+ ID de utilizador e palavra-passe separados por ":" em base64 formato
A chave API obtida ao registar-se com o serviço é o ID do utilizador. É necessário acrescentar-lhe ":" e codificá-la no formato Base64 utilizando o To Base64 bloco. O resultado precisa de ser transformado num bloco de cabeçalho (Make Key-Value (String) bloco).
O passo seguinte é a criação de um modelo para a consulta no desenhador da base de dados. O pedido deve ser enviado no bloco Multipart Form formato, respectivamente, é necessário preparar um modelo do formulário deste pedido. No nosso exemplo, o modelo é composto por três campos do tipo String:
- source_file - o caminho completo para o ficheiro de origem (foi aprendido no passo anterior).
- source_format - formato do ficheiro-fonte, neste exemplo, é um valor fixo "ogg".
- target_format - formato alvo para conversão. Pode escolher qualquer formato que seja suportado por Whisper. Vamos usar "mp3" como exemplo.
No editor de processos empresariais, é necessário utilizar o Make bloco para preencher os dados do modelo e enviá-lo como pedido POST para https://sandbox.zamzar.com/v1/jobs/ utilizando o HTTP Request bloco (não se esqueça de especificar Serialize request body = Multipart Form).
É de notar que este pedido não devolve o ficheiro convertido, mas apenas cria uma tarefa para o converter. É necessário solicitar o resultado separadamente; para isso, é necessária a identificação da tarefa criada. Esta identificação deve ser obtida do corpo da resposta ao pedido, e para isso, o processo já trabalhado deve ser feito usando expressões regulares e extraindo o valor de id.
O resultado da conversão deve ser aplicado separadamente. Para tal, serão necessários mais dois pedidos. O primeiro é para saber se o resultado está pronto. O segundo é para apanhar o ficheiro acabado. Ao mesmo tempo, não sabemos o tempo exacto de prontidão, pelo que podemos organizar um loop que enviará pedidos repetidos para verificar a prontidão em certos intervalos (por exemplo, a cada segundo).
Um HTTP Request deve ser enviado usando o método GET para o URL https://sandbox.zamzar.com/v1/jobs/{id}, onde {id} é a identificação da tarefa obtida na etapa anterior. Este utiliza os mesmos cabeçalhos que no pedido anterior.
A partir da resposta recebida, é necessário descobrir o estado de prontidão. Se a conversão for concluída, a resposta conterá "status": "successful" e para nós, este é um sinal de que podemos completar o laço e seguir em frente.
Para além do estado, a resposta deve conter a identificação do ficheiro acabado ("target_files":[{"id":). Deve ser extraído para obter a ligação final ao ficheiro no formulário https://sandbox.zamzar.com/v1/files/{ID}/content
Ao mesmo tempo, a recepção de um ficheiro está disponível apenas para utilizadores autorizados, pelo que é necessário executar um HTTP Request usando os mesmos cabeçalhos que nos pedidos anteriores.
Como resultado do pedido, será obtido o conteúdo do ficheiro, ao qual deverá ser dado um nome e guardado para posterior utilização.
Envio de um ficheiro MP3 para Whisper para conversão em texto
Agora está tudo pronto para o próximo passo - enviar um ficheiro com uma mensagem de voz para reconhecimento. Para tal, será necessário outro pedido no Multipart Form formato. Apenas ao contrário do exemplo anterior, o pedido terá de transferir o ficheiro em si e não um link para o mesmo.
Um modelo para tal pedido pode ser criado no External HTTP Request secção. Neste caso, não se pode criar um pedido completamente mas limitar-se apenas a criar um modelo de corpo de pedido. O modelo em si consiste em dois parâmetros:
- File (Virtual File tipo) - o mesmo ficheiro que precisa de ser reconhecido.
- model (tipo String) - aqui especificamos o valor whisper-1.
Também, para o pedido, é necessário obter uma chave para trabalhar com o OpenAI API e gerar um cabeçalho de autorização do Bearer Token tipo.
Key = 'Authorization'
Value = 'Bearer '+ OpenAI API Key
A seguir, pode enviar o pedido POST para reconhecer a mensagem de voz para o serviço Whisper no URL https://api.openai.com/v1/audio/transcriptions
Como resultado do reconhecimento bem sucedido do ficheiro, será recebida uma resposta sob a forma {"text": "Hello world.”}
Envio de um texto recebido para ChatGPT
Pode continuar a utilizar HTTP Request blocos para enviar um pedido a ChatGPT. Explorar a documentação API, bem como criar independentemente modelos para pedidos e respostas. Mas também pode utilizar uma opção mais simples na forma de um módulo pronto a partir de AppMaster para trabalhar com OpenAI, que deve ser instalado na secção de módulos.
Na versão mínima suficiente, só é necessário especificar os parâmetros do OAI ChatCompletionMessage modelo (role = user, content = mensagem a ser enviada), adicioná-lo à matriz, e enviar um pedido para ChatGPT com o OpenAI: Create Chat Completion bloco (parâmetro definido model = gpt-4).
Como resultado, recebemos uma resposta de ChatGPT. Lemo-la a partir do content parâmetro do OAI ChatCompletionChoice modelo.
Enviando uma resposta de ChatGPT a um utilizador em Telegram
O último passo é apenas repetir o que já foi feito antes - enviar uma mensagem para Telegram. Mas se começámos simplesmente por devolver a mensagem ao remetente, agora esta mensagem lançou uma série de várias acções e o resultado é devolvido como resposta a partir de ChatGPT.
No processo de desenvolvimento de um tal bot, vale a pena considerar:
- Telegram funciona de tal forma que cada pedido enviado pelo bot deve ser processado com sucesso. Caso contrário, tentará repeti-lo muitas vezes, o que significa que, em caso de problemas, o receberá repetidamente. Certifique-se de que a lógica é construída de tal forma que o pedido não resulte num erro e possa ser processado com sucesso.
- Nem todos os pedidos funcionarão como previsto na primeira tentativa. Terá de procurar erros, e para isso, providenciar para Write to Log blocos. São úteis tanto para verificar se cada bloco recebe realmente os dados que planeou transmitir como para analisar o resultado do bloco e estudar a resposta em pormenor.
- Como parte do guia, assumimos que todos os pedidos são previsíveis e bem sucedidos e que o processo é bastante linear. Na prática, será necessário fornecer uma variedade de opções para acções (por exemplo, o que fazer se o utilizador enviar uma mensagem de texto em vez de uma mensagem de voz ou mesmo uma imagem) e tratamento de erros (verificar o estado dos pedidos HTTP, ter em conta diferentes opções de resposta).