ChatGPT 와 함께 작동하는 애플리케이션 생성을 고려하십시오. 그것의 임무는 Telegram 통해 음성 메시지를 받고, 텍스트로 변환하고, ChatGPT 로 전송하고, 다시 Telegram 으로 응답을 보내는 것입니다. 생성 과정에서 다음 단계를 거쳐야 합니다.

  1. Telegram 용 봇 생성 및 기본 설정.
  2. 음성 메시지가 포함된 파일 수신( Telegram .oga 형식 사용).
  3. 파일을 oga 에서 mp3 로 변환합니다.
  4. 텍스트로 변환하기 위해 mp3 파일을 Whisper 서비스로 전송합니다.
  5. 받은 문자를 ChatGPT 로 보내기 .
  6. ChatGPT 에서 Telegram 의 사용자에게 응답 보내기 .

Telegram 용 봇 생성 및 기본 설정

그것은 모두 봇을 등록한다는 사실에서 시작됩니다. 이를 위해 Telegram 자체 특수 봇인 BotFather 사용합니다. 그에게 편지를 쓰고 간단한 순차적 단계를 거쳐야 합니다.

Telegram BotFather

결과적으로 봇에 대한 링크와 해당 API 요청에 대한 토큰이 있어야 합니다.

이제 AppMaster 에서 봇 설정으로 이동할 수 있습니다. 가장 쉬운 방법은 적절한 모듈을 설치하는 것입니다. 모듈 목록에서 선택하고 설정에서 API 토큰을 지정하기만 하면 됩니다.

Telegram Module

프로젝트에 필요한 모델이 자동으로 생성되고 Telegram 작업을 위한 블록과 기본 Telegram 비즈니스 프로세스 Telegram: Echo 나타납니다. 작업 원리를 신중하게 고려하고 이해할 가치가 있습니다.

Telegram Echo business process

입력에서 Telegram ( Message 모델)으로부터 메시지를 받습니다. 여기에는 보낸 메시지의 텍스트( text )와 보낸 사람의 식별자( id )를 가져올 수 있는 chat 모델이 포함됩니다. 마지막 블록 Telegram: Send Message 수신된 메시지를 보낸 사람에게 다시 보내지만 봇을 대신합니다.

봇의 초기 테스트 및 통신에 이 비즈니스 프로세스를 사용할 수 있습니다. 이렇게 하려면 정보를 수신하고 비즈니스 프로세스를 시작할 끝점을 만들어야 합니다.

Telegram bot endpoint

만들 때 Middleware Token Auth 비활성화하는 것이 중요합니다. 승인 없이 사용하려면 엔드포인트가 열려 있어야 합니다.

Telegram 봇의 작동 원리는 매우 간단합니다. 전송되는 모든 메시지는 특수 웹훅으로 이동하여 추가 작업을 위해 자동으로 전송하고 선택한 엔드포인트로 보낼 수 있습니다.

따라서 봇을 활성화하는 마지막 단계가 남아 있습니다. 이 끝점을 Telegram 에 등록하고 이 봇이 연결되어야 함을 나타내야 합니다. 이렇게 하려면 전체 엔드포인트 URL과 함께 POST 요청을 보내고 주소에 {Bot API Token} 대신 봇 토큰을 표시해야 합니다.

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

응답으로 이러한 메시지를 받으면 모든 것이 올바르게 완료된 것입니다.

{

"ok": true,

"result": true,

"description": "Webhook was set"

}

Post Telegram Webhook

봇이 작동할 준비가 되었습니다. 그에게 메시지를 보내고 다시 받을 수 있습니다.

음성 메시지로 파일 받기

Telegram 모듈은 주로 문자 메시지 작업을 위해 설계되었습니다. 그리고 우리의 임무는 음성 메시지가 있는 파일을 얻는 것입니다. AppMaster 사용하면 이 문제를 쉽게 해결할 수 있습니다. 먼저 메시지 구조를 파싱하기 위해 Telegram 에서 일반적으로 수신하는 내용을 분석해야 합니다. Get Request Body 블록은 이를 위해 설계되었습니다. 요청 구조를 미리 지정할 필요가 없으며 내용에 관계없이 전체 요청을 수신할 수 있습니다. 이 블록은 쿼리 결과를 바이트 집합으로 반환하며 To String 블록을 사용하여 사람이 읽을 수 있는 형식으로 결과를 표시하고 추가 분석을 위해 로그에 저장할 수 있습니다( Write to Log 블록).

Telegram Request log

우리는 전체 요청에서 두 개의 매개변수에 관심이 있습니다.

Sender ID - 요청에 "id":300493858 로 지정됨
File ID - "file_id":"AwACAgIAAxkBAAMzZBk6QRvO-OYWsWUC-Bu1UXDM2FwAAkktAAKTZclIWTSkfTTw8wYvBA"

요청과 일치하는 고유한 모델을 생성하고 이를 사용하여 필수 필드를 가져올 수 있습니다. 그러나 정규식( Regex )을 만들어 사용하는 것이 더 빠를 것입니다. 이를 위해 String Match Regex 블록은 표현식 자체와 주어진 표현식과의 일치를 확인할 문자열을 입력으로 사용합니다.

첫 번째 경우 표현식은 "id":"\d+ 입니다.

결과적으로 "id":300493858 문자열을 얻습니다. Replace String 블록을 사용하여 추가 항목( "id":) 을 제거하고 식별자 자체만 남겨 두어야 합니다.

두 번째 경우에도 원칙은 완전히 동일하지만 "file_id":"[^"]+ 약간 더 복잡한 표현이 사용됩니다.

Regex to get request ID

이제 보낸 사람 ID와 파일 ID가 있고 이를 사용하여 파일 자체를 가져올 수 있습니다. 이렇게 하려면 Telegram API 로 전환해야 합니다. 이것은 봇의 끝점을 등록할 때 이미 수행되었습니다. 이제 파일을 가져오려면 비슷한 요청을 해야 합니다. 요청 URL의 {File ID} 수신된 파일 ID로 대체되어야 합니다.

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

요청을 보내고 그 결과를 받기 위해 URLMethod = GET 매개변수로 지정하여 HTTP Request 블록을 사용합니다.

Telegram File Request

수신된 응답에서 파일에 대한 상대 경로를 찾을 수 있으며 " file_path " 매개변수에 전달됩니다. 따라서 다음 정규 표현식( "file_path":"[^"]+ )을 사용하여 원하는 값을 추출하고 “ https://api.telegram.org/file/bot{Bot API Token}/ ”으로 연결하여 파일에 대한 전체 링크를 가져옵니다.

OGA 에서 MP3 로 파일 변환

파일은 받았지만 장애는 Whisper 서비스가 OGA 형식 작업을 지원하지 않는다는 것입니다. 적절한 형식 중 하나로 변환해야 합니다.

예를 들어 Zamzar 서비스가 사용되며(무료 플랜은 월 100회의 변환을 지원함) MP3 로 변환합니다.

자세한 내용은 설명서를 참조하거나 다른 유사한 서비스를 사용할 수 있습니다. 우리는 그것으로 작업을 자세히 분석하지 않고 AppMaster 의 구현과 직접적으로 관련된 부분만을 고려할 것입니다.

우선 요청에는 올바른 인증 데이터가 필요합니다. Basic Authentication 형식으로 제공되어야 합니다. 이렇게 하려면 요청에 값이 포함된 헤더를 전달해야 합니다.

Key = 'Authorization'

Value = 'Basic '+ base64 형식의 ":"으로 구분된 사용자 ID 및 암호

서비스에 등록할 때 얻은 API 키가 사용자 ID입니다. ":"을 추가하고 To Base64 블록을 사용하여 Base64 형식으로 인코딩해야 합니다. 결과는 헤더로 변환되어야 합니다( Make Key-Value (String) 블록).

Zamzar Auth Header

다음 단계는 데이터베이스 디자이너에서 쿼리에 대한 모델을 만드는 것입니다. 요청은 각각 Multipart Form 형식으로 보내야 하며, 이 요청 형식의 모델을 준비해야 합니다. 이 예에서 모델은 String 유형의 세 필드로 구성됩니다.

  • source_file - 소스 파일의 전체 경로(이전 단계에서 배웠음).
  • source_format - 소스 파일 형식, 이 예에서는 고정 값 " ogg "입니다.
  • target_format - 변환할 대상 형식입니다. Whisper 에서 지원하는 모든 형식을 선택할 수 있습니다. " mp3 "를 예로 들어 보겠습니다.

Zamzar Request Model

비즈니스 프로세스 편집기에서 Make 블록을 사용하여 모델 데이터를 채우고 HTTP Request 블록을 사용하여 https://sandbox.zamzar.com/v1/jobs/POST 요청으로 보내야 합니다(반드시 Serialize request body = Multipart Form 지정).

Zamzar Conversion Request

이 요청은 변환된 파일을 반환하지 않고 변환할 작업만 생성한다는 점에 유의해야 합니다. 결과를 별도로 신청해야 합니다. 이를 위해서는 생성된 작업의 ID가 필요합니다. 이 ID는 요청에 대한 응답의 본문에서 가져와야 하며 이를 위해 정규식을 사용하여 id 값을 추출하는 과정을 이미 수행해야 합니다.

변환 결과는 별도로 적용해야 합니다. 두 가지 요청이 더 필요합니다. 첫 번째는 결과가 준비되었는지 확인하는 것입니다. 두 번째는 완성된 파일을 가져오는 것입니다. 동시에 정확한 준비 시간을 알지 못하므로 특정 간격(예: 매초)으로 준비 확인 요청을 반복적으로 보내는 루프를 구성할 수 있습니다.

Zamzar Conversion Check Loop

GET 메서드를 사용하여 URL https://sandbox.zamzar.com/v1/jobs/{id}HTTP Request 보내야 합니다. 여기서 {id} 는 이전 단계에서 얻은 작업 ID입니다. 이것은 이전 요청과 동일한 헤더를 사용합니다.

수신된 응답에서 준비 상태를 확인해야 합니다. 변환이 완료되면 응답에 "status": "successful" 포함되며 이는 루프를 완료하고 계속 진행할 수 있다는 신호입니다.

상태 외에도 응답에는 완료된 파일의 ID( "target_files":[{"id": )가 포함되어야 합니다. https://sandbox.zamzar.com/v1/files/{ID}/content 형식의 파일에 대한 최종 링크를 얻으려면 압축을 풀어야 합니다.

동시에 파일 수신은 권한이 있는 사용자만 가능하므로 이전 요청과 동일한 헤더를 사용하여 HTTP Request 실행해야 합니다.

요청의 결과로 파일의 내용을 얻게 되며, 추가 사용을 위해 이름을 지정하고 저장해야 합니다.

Zamzar save converted file

텍스트로 변환하기 위해 MP3 파일을 Whisper 로 보내기

이제 모든 것이 다음 단계인 인식을 위한 음성 메시지가 포함된 파일 전송을 위한 준비가 되었습니다. 이를 위해서는 Multipart Form 형식의 다른 요청이 필요합니다. 이전 예와 달리 요청은 링크가 아닌 파일 자체를 전송해야 합니다.

이러한 요청에 대한 모델은 External HTTP Request 섹션에서 만들 수 있습니다. 이 경우 요청을 완전히 생성할 수 없으며 요청 본문 모델을 생성하는 것으로만 제한됩니다. 모델 자체는 두 가지 매개변수로 구성됩니다.

  1. File ( Virtual File 유형) - 인식해야 하는 동일한 파일입니다.
  2. model ( type String ) - 여기에서 값을 지정하는 whisper-1 .

Whisper request model

또한 요청을 위해서는 OpenAI API 작업을 위한 키를 획득하고 Bearer Token 유형의 인증 헤더를 생성해야 합니다.

Key = 'Authorization'

Value = 'Bearer '+ OpenAI API Key

다음으로 URL https://api.openai.com/v1/audio/transcriptions 에서 음성 메시지를 인식하기 위해 POST 요청 자체를 Whisper 서비스로 보낼 수 있습니다.

Whisper HTTP Request

파일 인식에 성공하면 {"text": "Hello world.”} 형식의 응답을 받게 됩니다.

받은 문자를 ChatGPT 로 보내기

HTTP Request 블록을 계속 사용하여 ChatGPT 에 요청을 보낼 수 있습니다. API 설명서를 탐색하고 요청 및 응답에 대한 모델을 독립적으로 생성합니다. 그러나 모듈 섹션에 설치해야 하는 OpenAI 작업을 위해 AppMaster 의 기성 모듈 형태로 더 간단한 옵션을 사용할 수도 있습니다.

OpenAI Module

충분한 최소 버전에서는 OAI ChatCompletionMessage 모델의 매개변수( role = user , content = 보낼 메시지)만 지정하고 배열에 추가한 다음 OpenAI: Create Chat Completion 사용하여 ChatGPT 에 요청을 보내면 됩니다. 블록(매개변수 model = gpt-4 ).

OpenAI Request

결과적으로 ChatGPT 에서 응답을 받습니다. OAI ChatCompletionChoice 모델의 content 매개변수에서 읽습니다.

ChatGPT Response

Telegram 의 사용자에게 ChatGPT 에서 응답 보내기

마지막 단계는 이전에 이미 수행한 작업을 반복하는 것입니다. Telegram 에 메시지를 보냅니다. 하지만 단순히 메시지를 발신자에게 돌려주는 것으로 시작했다면 이제 이 메시지는 일련의 다양한 작업을 시작했고 그 결과는 ChatGPT 의 응답으로 반환됩니다.

Telegram send ChatGPT response

이러한 봇을 개발하는 과정에서 고려해야 할 사항은 다음과 같습니다.

  1. Telegram 봇이 보낸 각 요청이 성공적으로 처리되어야 하는 방식으로 작동합니다. 그렇지 않으면 그는 그것을 여러 번 반복하려고 할 것입니다. 즉, 문제가 발생하면 계속해서 받게 될 것입니다. 요청으로 인해 오류가 발생하지 않고 성공적으로 처리될 수 있는 방식으로 로직이 구축되었는지 확인하십시오.
  2. 모든 요청이 첫 번째 시도에서 의도한 대로 작동하는 것은 아닙니다. 오류를 검색 해야 하며 이를 위해 Write to Log 정렬합니다. 전송하려는 데이터를 각 블록이 실제로 수신하는지 확인하고 블록 결과를 분석하고 응답을 자세히 연구하는 데 유용합니다.
  3. 가이드의 일부로 모든 요청이 예측 가능하고 성공적이며 프로세스가 상당히 선형적이라고 가정했습니다. 실제로는 동작(예: 사용자가 음성 메시지나 사진 대신 문자 메시지를 보내는 경우 수행할 작업) 및 오류 처리(HTTP 요청 상태 확인, 다른 응답 옵션을 고려하십시오).
Was this article helpful?

앱마스터.io 101 단기 특강

10 모듈
2 주

어디서부터 시작해야 할지 모르겠다고요? 초보자를 위한 단기 집중 과정을 시작하고 AppMaster를 A부터 Z까지 살펴보세요.

코스 시작
Development it’s so easy with AppMaster!

도움이 더 필요하세요?

전문가의 도움으로 모든 문제를 해결하십시오. 시간을 절약하고 애플리케이션 구축에 집중하십시오.

headphones

연락처 지원

문제에 대해 알려주시면 해결책을 찾아드리겠습니다.

message

커뮤니티 채팅

채팅에서 다른 사용자와 질문에 대해 토론하십시오.

커뮤니티 가입