Cân nhắc việc tạo một ứng dụng để hoạt động với ChatGPT . Nhiệm vụ của nó sẽ là nhận tin nhắn thoại qua Telegram , chuyển đổi chúng thành văn bản, chuyển chúng sang ChatGPT và gửi phản hồi lại cho Telegram . Trong quá trình tạo, bạn sẽ cần trải qua các bước sau:

  1. Tạo bot cho Telegram và thiết lập cơ bản của nó.
  2. Nhận tệp có tin nhắn thoại ( Telegram sử dụng định dạng .oga ).
  3. Chuyển đổi tập tin từ oga sang mp3 .
  4. Đang chuyển tệp mp3 sang dịch vụ Whisper để chuyển thành văn bản.
  5. Gửi văn bản đã nhận tới ChatGPT .
  6. Gửi phản hồi từ ChatGPT tới người dùng trong Telegram .

Tạo bot cho Telegram và thiết lập cơ bản của nó

Tất cả bắt đầu với việc đăng ký bot. Và để làm điều này, Telegram sử dụng bot đặc biệt của riêng mình - BotFather . Bạn cần viết thư cho anh ấy và thực hiện các bước tuần tự đơn giản.

Telegram BotFather

Do đó, bạn nên có một liên kết đến bot của mình và một mã thông báo cho các yêu cầu đối với API của nó.

Bây giờ bạn có thể chuyển sang thiết lập bot trong AppMaster . Cách dễ nhất để làm điều này là cài đặt mô-đun thích hợp. Bạn chỉ cần chọn nó trong danh sách các mô-đun và chỉ định mã thông báo API của mình trong cài đặt.

Telegram Module

Các mô hình cần thiết sẽ được tạo tự động trong dự án của bạn, các khối để làm việc với Telegram sẽ xuất hiện, cũng như quy trình kinh doanh Telegram cơ bản Telegram: Echo . Đó là giá trị xem xét cẩn thận và hiểu nguyên tắc làm việc.

Telegram Echo business process

Ở đầu vào, nó nhận được một tin nhắn từ Telegram (Mô hình Message ). Nó chứa nội dung của tin nhắn đã gửi ( text ), cũng như mô hình chat mà từ đó bạn có thể nhận được mã định danh của người gửi ( id ). Khối cuối cùng Telegram: Send Message sẽ gửi lại tin nhắn đã nhận cho người gửi, nhưng thay mặt cho bot.

Bạn có thể sử dụng quy trình kinh doanh này để thử nghiệm ban đầu bot và giao tiếp với nó. Để làm điều này, bạn cần tạo một điểm cuối sẽ nhận thông tin và bắt đầu quy trình kinh doanh.

Telegram bot endpoint

Khi tạo nó, điều quan trọng là phải tắt Middleware Token Auth . Điểm cuối phải được mở để sử dụng mà không cần ủy quyền.

Nguyên tắc hoạt động của bot Telegram khá đơn giản - tất cả các tin nhắn sẽ được gửi tới nó sẽ chuyển đến một webhook đặc biệt, webhook này có thể tự động chuyển chúng đi xa hơn và gửi chúng đến điểm cuối bạn chọn để thực hiện các hành động tiếp theo.

Theo đó, bước cuối cùng vẫn là kích hoạt bot - bạn cần đăng ký điểm cuối này trong Telegram và chỉ ra rằng bot này phải được liên kết với nó. Điều này yêu cầu gửi POST -request với URL điểm cuối đầy đủ và cho biết mã thông báo bot của bạn thay vì {Bot API Token} đến địa chỉ

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

Nếu bạn nhận được một tin nhắn phản hồi như vậy, thì mọi thứ đã được thực hiện chính xác.

{

"ok": true,

"result": true,

"description": "Webhook was set"

}

Post Telegram Webhook

Bot đã sẵn sàng hoạt động, bạn có thể gửi tin nhắn cho anh ấy và nhận lại.

Nhận tệp bằng tin nhắn thoại

Mô-đun Telegram được thiết kế chủ yếu để làm việc với tin nhắn văn bản. Và nhiệm vụ của chúng tôi là lấy một tệp có tin nhắn thoại. Với AppMaster , bạn có thể dễ dàng giải quyết vấn đề này. Đầu tiên, chúng ta cần phân tích những gì chúng ta thường nhận được từ Telegram để phân tích cấu trúc của tin nhắn. Khối Get Request Body được thiết kế cho việc này. Nó loại bỏ nhu cầu chỉ định trước cấu trúc yêu cầu và cho phép bạn nhận toàn bộ yêu cầu, bất kể nội dung của nó. Khối này trả về kết quả truy vấn dưới dạng một tập hợp các byte, và bạn có thể sử dụng khối To String để trình bày kết quả ở dạng mà con người có thể đọc được, cũng như lưu nó trong nhật ký (khối Write to Log ) để phân tích thêm.

Telegram Request log

Chúng tôi quan tâm đến hai tham số từ toàn bộ yêu cầu:

Sender ID - được chỉ định trong yêu cầu là "id":300493858
File ID - "file_id":"AwACAgIAAxkBAAMzZBk6QRvO-OYWsWUC-Bu1UXDM2FwAAkktAAKTZclIWTSkfTTw8wYvBA"

Bạn có thể tạo mô hình của riêng mình phù hợp với yêu cầu và sử dụng mô hình đó để nhận các trường bắt buộc. Nhưng sẽ nhanh hơn nếu tạo một biểu thức chính quy ( Regex ) và sử dụng nó. Để làm điều này, khối String Match Regex lấy chính biểu thức làm đầu vào, cũng như chuỗi trong đó khớp với biểu thức đã cho sẽ được kiểm tra.

Trong trường hợp đầu tiên, biểu thức là "id":"\d+

Kết quả là, chúng tôi nhận được chuỗi "id":300493858 , từ đó chúng tôi sẽ cần xóa phần bổ sung ( "id":) bằng cách sử dụng khối Replace String và chỉ để lại mã định danh.

Trong trường hợp thứ hai, nguyên tắc hoàn toàn giống nhau, nhưng một biểu thức phức tạp hơn một chút được sử dụng: "file_id":"[^"]+

Regex to get request ID

Bây giờ chúng tôi có id người gửi và id tệp và chúng tôi có thể sử dụng id đó để lấy chính tệp đó. Để làm điều này, bạn cần chuyển sang Telegram API . Điều này đã được thực hiện trước đây khi đăng ký điểm cuối của bot. Bây giờ bạn cần thực hiện một yêu cầu tương tự để lấy tệp. {File ID} trong URL yêu cầu phải được thay thế bằng ID tệp đã nhận.

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

Để gửi yêu cầu và nhận kết quả của nó, chúng tôi sử dụng khối HTTP Request , chỉ định URLMethod = GET làm tham số cho nó.

Telegram File Request

Từ phản hồi nhận được, bạn có thể tìm ra đường dẫn tương đối đến tệp, nó được chuyển vào tham số " file_path ". Theo đó, bằng cách sử dụng biểu thức chính quy tiếp theo ( "file_path":"[^"]+ ), bạn có thể trích xuất giá trị mong muốn và kết nối với “ https://api.telegram.org/file/bot{Bot API Token}/ ” để nhận được liên kết đầy đủ đến tập tin.

Chuyển đổi tập tin từ OGA sang MP3

Đã nhận được tệp nhưng trở ngại là dịch vụ Whisper không hỗ trợ hoạt động với định dạng OGA . Bạn cần chuyển đổi sang một trong các định dạng phù hợp.

Ví dụ: dịch vụ Zamzar được sử dụng (gói miễn phí của nó hỗ trợ khả năng thực hiện 100 chuyển đổi mỗi tháng) và chuyển đổi sang MP3 .

Bạn có thể tham khảo tài liệu của nó để biết chi tiết hoặc sử dụng một dịch vụ tương tự khác. Chúng tôi sẽ không phân tích chi tiết công việc với nó và chúng tôi sẽ chỉ xem xét phần liên quan trực tiếp đến việc triển khai AppMaster .

Trước hết, yêu cầu sẽ cần dữ liệu xác thực chính xác. Chúng phải được cung cấp ở định dạng Basic Authentication . Để làm điều này, bạn cần chuyển một tiêu đề có giá trị trong yêu cầu:

Key = 'Authorization'

Value = 'Basic '+ ID người dùng và mật khẩu được phân tách bằng “:” ở định dạng base64

Khóa API thu được khi đăng ký dịch vụ là ID người dùng. Bạn cần thêm “:” vào nó và mã hóa nó ở định dạng Base64 bằng cách sử dụng khối To Base64 . Kết quả cần được chuyển thành tiêu đề ( Make Key-Value (String) block).

Zamzar Auth Header

Bước tiếp theo là tạo một mô hình cho truy vấn trong trình thiết kế cơ sở dữ liệu. Yêu cầu phải được gửi ở định dạng Multipart Form , tương ứng, cần phải chuẩn bị một mô hình có dạng của yêu cầu này. Trong ví dụ của chúng tôi, mô hình bao gồm ba trường kiểu String :

  • source_file - đường dẫn đầy đủ đến file nguồn (đã học ở bước trước).
  • source_format - định dạng tệp nguồn, trong ví dụ này, nó là một giá trị cố định " ogg ".
  • target_format - định dạng đích để chuyển đổi. Bạn có thể chọn bất kỳ định dạng nào được Whisper hỗ trợ. Hãy sử dụng " mp3 " làm ví dụ.

Zamzar Request Model

Trong trình chỉnh sửa quy trình công việc, bạn cần sử dụng khối Make để điền dữ liệu mô hình và gửi nó dưới dạng yêu cầu POST tới https://sandbox.zamzar.com/v1/jobs/ bằng cách sử dụng khối HTTP Request (đảm bảo chỉ định Serialize request body = Multipart Form ).

Zamzar Conversion Request

Cần lưu ý rằng yêu cầu này không trả lại tệp đã chuyển đổi mà chỉ tạo một tác vụ để chuyển đổi nó. Bạn cần đăng ký kết quả riêng; đối với điều này, bạn cần có ID của tác vụ đã tạo. ID này phải được lấy từ phần thân của phản hồi cho yêu cầu và đối với điều này, quy trình đã được thực hiện phải được thực hiện bằng cách sử dụng các biểu thức chính quy và trích xuất giá trị id.

Kết quả của việc chuyển đổi phải được áp dụng riêng. Điều này sẽ yêu cầu thêm hai yêu cầu. Đầu tiên là tìm hiểu xem kết quả đã sẵn sàng chưa. Thứ hai là nhặt tập tin đã hoàn thành. Đồng thời, chúng tôi không biết chính xác thời điểm sẵn sàng, vì vậy chúng tôi có thể tổ chức một vòng lặp sẽ gửi các yêu cầu lặp lại để kiểm tra mức độ sẵn sàng trong các khoảng thời gian nhất định (ví dụ: mỗi giây).

Zamzar Conversion Check Loop

HTTP Request phải được gửi bằng phương thức GET tới URL https://sandbox.zamzar.com/v1/jobs/{id} , trong đó {id} là id tác vụ thu được ở bước trước. Điều này sử dụng các tiêu đề giống như trong yêu cầu trước đó.

Từ phản hồi nhận được, bạn cần tìm hiểu trạng thái sẵn sàng. Nếu quá trình chuyển đổi hoàn tất, phản hồi sẽ chứa "status": "successful" và đối với chúng tôi, đây là tín hiệu cho thấy chúng tôi có thể hoàn thành vòng lặp và tiếp tục.

Ngoài trạng thái, phản hồi phải chứa ID của tệp đã hoàn thành ( "target_files":[{"id": ). Nó phải được trích xuất để lấy liên kết cuối cùng tới tệp ở dạng https://sandbox.zamzar.com/v1/files/{ID}/content

Đồng thời, việc nhận tệp chỉ khả dụng đối với người dùng được ủy quyền, vì vậy bạn cần thực hiện HTTP Request bằng cách sử dụng các tiêu đề giống như trong các yêu cầu trước đó.

Theo kết quả của yêu cầu, nội dung của tệp sẽ được lấy, tệp này phải được đặt tên và lưu để sử dụng tiếp.

Zamzar save converted file

Gửi tệp MP3 tới Whisper để chuyển đổi thành văn bản

Bây giờ mọi thứ đã sẵn sàng cho bước tiếp theo - gửi tệp có tin nhắn thoại để nhận dạng. Điều này sẽ yêu cầu một yêu cầu khác ở định dạng Multipart Form . Không giống như ví dụ trước, yêu cầu sẽ cần chuyển chính tệp chứ không phải liên kết đến tệp đó.

Có thể tạo mô hình cho yêu cầu như vậy trong phần External HTTP Request . Trong trường hợp này, bạn không thể tạo hoàn toàn một yêu cầu mà chỉ giới hạn bản thân trong việc tạo một mô hình nội dung yêu cầu. Bản thân mô hình bao gồm hai tham số:

  1. File ( Loại Virtual File ) - cùng một tệp cần được nhận dạng.
  2. model (loại String ) - ở đây chúng tôi chỉ định giá trị whisper-1 .

Whisper request model

Ngoài ra, đối với yêu cầu, cần lấy khóa để làm việc với API OpenAI và tạo tiêu đề ủy quyền của loại Bearer Token .

Key = 'Authorization'

Value = 'Bearer '+ OpenAI API Key

Tiếp theo, bạn có thể gửi chính yêu cầu POST để nhận dạng tin nhắn thoại tới dịch vụ Whisper tại URL https://api.openai.com/v1/audio/transcriptions

Whisper HTTP Request

Do nhận dạng thành công tệp, phản hồi sẽ nhận được ở dạng {"text": "Hello world.”}

Gửi tin nhắn đã nhận tới ChatGPT

Bạn có thể tiếp tục sử dụng khối HTTP Request để gửi yêu cầu tới ChatGPT . Để khám phá tài liệu API, cũng như tạo các mô hình cho các yêu cầu và phản hồi một cách độc lập. Nhưng bạn cũng có thể sử dụng một tùy chọn đơn giản hơn ở dạng mô-đun làm sẵn từ AppMaster để làm việc với OpenAI , mô-đun này phải được cài đặt trong phần mô-đun.

OpenAI Module

Trong phiên bản đủ tối thiểu, bạn chỉ cần chỉ định các tham số của mô hình OAI ChatCompletionMessage ( role = user , content = tin nhắn sẽ được gửi), thêm nó vào mảng và gửi yêu cầu tới ChatGPT bằng OpenAI: Create Chat Completion khối (đặt tham số model = gpt-4 ).

OpenAI Request

Do đó, chúng tôi nhận được phản hồi từ ChatGPT . Chúng tôi đọc nó từ tham số content của mô hình OAI ChatCompletionChoice .

ChatGPT Response

Gửi phản hồi từ ChatGPT tới người dùng trong Telegram

Bước cuối cùng chỉ là lặp lại những gì đã được thực hiện trước đó - gửi tin nhắn đến Telegram . Nhưng nếu chúng tôi bắt đầu bằng cách trả lại tin nhắn cho người gửi, thì bây giờ tin nhắn này đã khởi chạy một loạt các hành động khác nhau và kết quả được trả về dưới dạng phản hồi từ ChatGPT .

Telegram send ChatGPT response

Trong quá trình phát triển một bot như vậy, đáng để xem xét:

  1. Telegram hoạt động theo cách mà mỗi yêu cầu do bot gửi phải được xử lý thành công. Nếu không, anh ta sẽ cố gắng lặp lại nó nhiều lần, điều đó có nghĩa là trong trường hợp có bất kỳ vấn đề gì, bạn sẽ nhận được nó nhiều lần. Đảm bảo rằng logic được xây dựng theo cách sao cho yêu cầu không gây ra lỗi và có thể được xử lý thành công.
  2. Không phải tất cả các yêu cầu sẽ hoạt động như dự định trong lần thử đầu tiên. Bạn sẽ cần tìm kiếm các lỗi và để làm điều này, hãy sắp xếp các khối Write to Log . Chúng hữu ích cho cả việc kiểm tra xem mỗi khối có thực sự nhận được dữ liệu mà bạn định truyền hay không và để phân tích kết quả của khối và nghiên cứu phản hồi một cách chi tiết.
  3. Là một phần của hướng dẫn, chúng tôi giả định rằng tất cả các yêu cầu đều có thể dự đoán được và thành công, đồng thời quá trình này diễn ra khá tuyến tính. Trên thực tế, sẽ cần cung cấp nhiều tùy chọn cho các hành động (ví dụ: phải làm gì nếu người dùng gửi tin nhắn văn bản thay vì tin nhắn thoại hoặc thậm chí là ảnh) và xử lý lỗi (kiểm tra trạng thái của các yêu cầu HTTP, tính đến các tùy chọn phản hồi khác nhau).
Was this article helpful?

AppMaster.io 101 Khóa học tai nạn

10 Mô-đun
2 Tuần

Không biết chắc nên bắt đầu từ đâu? Bắt đầu với khóa học sụp đổ của chúng tôi dành cho người mới bắt đầu và khám phá AppMaster từ A đến Z.

Bắt đầu khóa học
Development it’s so easy with AppMaster!

Cần sự giúp đỡ nhiều hơn?

Giải quyết mọi vấn đề với sự giúp đỡ của các chuyên gia của chúng tôi. Tiết kiệm thời gian và tập trung vào việc xây dựng các ứng dụng của bạn.

headphones

Liên hệ hỗ trợ

Hãy cho chúng tôi biết về vấn đề của bạn và chúng tôi sẽ tìm ra giải pháp cho bạn.

message

trò chuyện cộng đồng

Thảo luận câu hỏi với những người dùng khác trong cuộc trò chuyện của chúng tôi.

Tham gia cộng đồng