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:

  1. Criação de um bot para Telegram e a sua configuração básica.
  2. Recepção de um ficheiro com uma mensagem de voz (Telegram utiliza o formato .oga ).
  3. Converter o ficheiro de oga para mp3.
  4. Transferir o ficheiro mp3 para o formato Whisper serviço de conversão para texto.
  5. Envio de um texto recebido para ChatGPT.
  6. 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.

Telegram BotFather

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.

Telegram Module

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.

Telegram Echo business process

À 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.

Telegram bot endpoint

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"

}

Post Telegram Webhook

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.

Telegram Request log

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":"[^"]+

Regex to get request 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.

Telegram File Request

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).

Zamzar Auth Header

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.

Zamzar Request Model

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).

Zamzar Conversion Request

É 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).

Zamzar Conversion Check Loop

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.

Zamzar save converted file

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:

  1. File (Virtual File tipo) - o mesmo ficheiro que precisa de ser reconhecido.
  2. model (tipo String) - aqui especificamos o valor whisper-1.

Whisper request model

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

Whisper HTTP Request

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.

OpenAI Module

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).

OpenAI Request

Como resultado, recebemos uma resposta de ChatGPT. Lemo-la a partir do content parâmetro do OAI ChatCompletionChoice modelo.

ChatGPT Response

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.

Telegram send ChatGPT response

No processo de desenvolvimento de um tal bot, vale a pena considerar:

  1. 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.
  2. 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.
  3. 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).
Was this article helpful?

AppMaster.io 101 Curso de Crash

10 Módulos
2 Semanas

Não sabe por onde começar? Avance com o nosso curso intensivo para principiantes e explore o AppMaster de A a Z.

Iniciar curso
Development it’s so easy with AppMaster!

Precisa de mais ajuda?

Resolva qualquer problema com a ajuda de nossos especialistas. Economize tempo e concentre-se na criação de seus aplicativos.

headphones

Entre em contato com o suporte

Conte-nos sobre o seu problema, e nós encontraremos uma solução para você.

message

Bate-papo da comunidade

Discuta perguntas com outros usuários em nosso chat.

Junte-se à comunidade