Pertimbangkan untuk membuat aplikasi agar berfungsi dengan ChatGPT . Tugasnya adalah menerima pesan suara melalui Telegram , mengubahnya menjadi teks, mentransfernya ke ChatGPT , dan mengirim tanggapan kembali ke Telegram . Selama proses pembuatan, Anda harus melalui langkah-langkah berikut:
- Pembuatan bot untuk Telegram dan pengaturan dasarnya.
- Menerima file dengan pesan suara ( Telegram menggunakan format .oga ).
- Mengkonversi file dari oga ke mp3 .
- Mentransfer file mp3 ke layanan Whisper untuk dikonversi ke teks.
- Mengirim teks yang diterima ke ChatGPT .
- Mengirim tanggapan dari ChatGPT ke pengguna di Telegram .
Membuat bot untuk Telegram dan pengaturan dasarnya
Semuanya dimulai dengan fakta mendaftarkan bot. Dan untuk ini, Telegram menggunakan bot khusus - BotFather . Anda perlu menulis kepadanya dan melalui langkah-langkah sederhana yang berurutan.
Akibatnya, Anda harus memiliki tautan ke bot Anda dan token untuk permintaan ke API-nya.
Sekarang Anda dapat melanjutkan untuk menyiapkan bot di AppMaster . Cara termudah untuk melakukannya adalah dengan memasang modul yang sesuai. Anda hanya perlu memilihnya di daftar modul dan menentukan token API Anda di pengaturan.
Model yang diperlukan akan dibuat secara otomatis di proyek Anda, blok untuk bekerja dengan Telegram akan muncul, serta proses bisnis dasar Telegram: Echo . Perlu mempertimbangkan dengan hati-hati dan memahami prinsip kerja.
Di pintu masuk, ia menerima pesan dari Telegram ( Model Message ). Ini berisi teks dari pesan terkirim ( text ), serta model chat dari mana Anda bisa mendapatkan pengenal pengirim ( id ). Blok terakhir Telegram: Send Message mengirim kembali pesan yang diterima ke pengirim, tetapi atas nama bot.
Anda dapat menggunakan proses bisnis ini untuk pengujian awal bot dan berkomunikasi dengannya. Untuk melakukannya, Anda perlu membuat titik akhir yang akan menerima informasi dan memulai proses bisnis.
Saat membuatnya, penting untuk menonaktifkan Middleware Token Auth . Titik akhir harus terbuka untuk digunakan tanpa otorisasi.
Prinsip pengoperasian bot Telegram cukup sederhana - semua pesan yang akan dikirim ke sana masuk ke webhook khusus, yang dapat secara otomatis mentransfernya lebih jauh dan mengirimkannya ke titik akhir pilihan Anda untuk tindakan lebih lanjut.
Karenanya, langkah terakhir tetap mengaktifkan bot - Anda perlu mendaftarkan titik akhir ini di Telegram dan menunjukkan bahwa bot ini harus dikaitkan dengannya. Ini membutuhkan pengiriman permintaan POST dengan URL titik akhir lengkap dan menunjukkan token bot Anda alih-alih {Bot API Token} ke alamat tersebut
https://api.telegram.org/bot{Bot API Token}/setWebhook
Jika Anda menerima pesan seperti itu sebagai tanggapan, maka semuanya telah dilakukan dengan benar.
{
"ok": true,
"result": true,
"description": "Webhook was set"
}
Bot siap bekerja, Anda dapat mengiriminya pesan dan mendapatkannya kembali.
Menerima file dengan pesan suara
Modul Telegram dirancang terutama untuk bekerja dengan pesan teks. Dan tugas kita adalah mendapatkan file dengan pesan suara. Dengan AppMaster , Anda dapat dengan mudah menyelesaikan masalah ini. Pertama, kita perlu menganalisis apa yang biasanya kita terima dari Telegram untuk menguraikan struktur pesan. Blok Get Request Body dirancang untuk ini. Ini menghilangkan kebutuhan untuk menentukan struktur permintaan terlebih dahulu dan memungkinkan Anda untuk menerima seluruh permintaan, apa pun isinya. Blok ini mengembalikan hasil kueri sebagai satu set byte, dan Anda dapat menggunakan blok To String untuk menyajikan hasil dalam bentuk yang dapat dibaca manusia, serta menyimpannya dalam log ( blok Write to Log ) untuk analisis lebih lanjut.
Kami tertarik pada dua parameter dari seluruh permintaan:
Sender ID - ditentukan dalam permintaan sebagai "id":300493858
File ID - "file_id":"AwACAgIAAxkBAAMzZBk6QRvO-OYWsWUC-Bu1UXDM2FwAAkktAAKTZclIWTSkfTTw8wYvBA"
Anda dapat membuat model Anda sendiri yang sesuai dengan permintaan dan menggunakannya untuk mendapatkan bidang yang diperlukan. Tetapi akan lebih cepat untuk membuat ekspresi reguler ( Regex ) dan menggunakannya. Untuk melakukan ini, blok String Match Regex mengambil ekspresi itu sendiri sebagai input, serta string di mana kecocokan dengan ekspresi yang diberikan akan diperiksa.
Dalam kasus pertama, ekspresinya adalah "id":"\d+
Hasilnya, kita mendapatkan string "id":300493858 , dari mana kita perlu menghapus ekstra ( "id":) menggunakan blok Replace String dan hanya menyisakan pengidentifikasi itu sendiri.
Dalam kasus kedua, prinsipnya persis sama, tetapi ekspresi yang sedikit lebih rumit digunakan: "file_id":"[^"]+
Sekarang kita memiliki id pengirim dan id file, dan kita dapat menggunakannya untuk mendapatkan file itu sendiri. Untuk melakukan ini, Anda perlu beralih ke Telegram API . Ini telah dilakukan sebelumnya saat mendaftarkan titik akhir bot. Sekarang Anda perlu membuat permintaan serupa untuk mendapatkan file tersebut. {File ID} di URL permintaan harus diganti dengan ID file yang diterima.
https://api.telegram.org/bot{Bot API Token}/setWebhook/getFile?file_id={File ID}
Untuk mengirim permintaan dan menerima hasilnya, kami menggunakan blok HTTP Request , dengan menetapkan URL dan Method = GET sebagai parameternya.
Dari respons yang diterima, Anda dapat mengetahui jalur relatif ke file, yang diteruskan dalam parameter " file_path ". Karenanya, menggunakan ekspresi reguler berikutnya ( "file_path":"[^"]+ ) Anda dapat mengekstrak nilai yang diinginkan dan terhubung dengan “ https://api.telegram.org/file/bot{Bot API Token}/ ” ke dapatkan tautan lengkap ke file tersebut.
Mengkonversi file dari OGA ke MP3
File diterima, tetapi kendalanya adalah layanan Whisper tidak mendukung bekerja dengan format OGA . Anda perlu mengonversi ke salah satu format yang sesuai.
Sebagai contoh, layanan Zamzar digunakan (paket gratisnya mendukung kemampuan untuk membuat 100 konversi per bulan) dan mengonversi ke MP3 .
Anda dapat merujuk ke dokumentasinya untuk perincian atau menggunakan layanan serupa lainnya. Kami tidak akan menganalisis pekerjaan dengannya secara mendetail, dan kami hanya akan mempertimbangkan bagian yang berhubungan langsung dengan penerapan AppMaster .
Pertama-tama, permintaan akan membutuhkan data autentikasi yang benar. Mereka harus disediakan dalam format Basic Authentication . Untuk melakukan ini, Anda harus memberikan header dengan nilai dalam permintaan:
Key = 'Authorization'
Value = 'Basic '+ User ID dan password dipisahkan dengan “:” dalam format base64
Kunci API yang diperoleh saat mendaftar ke layanan adalah ID pengguna. Anda perlu menambahkan ":" ke dalamnya dan menyandikannya dalam format Base64 menggunakan blok To Base64 . Hasilnya perlu diubah menjadi header ( blok Make Key-Value (String) ).
Langkah selanjutnya adalah membuat model untuk kueri di perancang basis data. Permintaan harus dikirim dalam format Multipart Form , masing-masing perlu disiapkan model formulir permintaan ini. Dalam contoh kita, model terdiri dari tiga bidang bertipe String :
- source_file - path lengkap ke file sumber (dipelajari pada langkah sebelumnya).
- source_format - format file sumber, dalam contoh ini adalah nilai tetap " ogg ".
- target_format - format target untuk konversi. Anda dapat memilih format apa saja yang didukung oleh Whisper . Mari gunakan " mp3 " sebagai contoh.
Di editor proses bisnis, Anda perlu menggunakan blok Make untuk mengisi data model dan mengirimkannya sebagai permintaan POST ke https://sandbox.zamzar.com/v1/jobs/ menggunakan blok HTTP Request (pastikan untuk tentukan Serialize request body = Multipart Form ).
Perlu dicatat bahwa permintaan ini tidak mengembalikan file yang dikonversi tetapi hanya membuat tugas untuk mengonversinya. Anda perlu mengajukan hasilnya secara terpisah; untuk ini, Anda memerlukan ID dari tugas yang dibuat. ID ini harus diperoleh dari badan respons terhadap permintaan, dan untuk ini, proses yang sudah dikerjakan harus dilakukan dengan menggunakan ekspresi reguler dan mengekstraksi nilai id.
Hasil konversi harus diterapkan secara terpisah. Ini akan membutuhkan dua permintaan lagi. Yang pertama adalah mencari tahu apakah hasilnya sudah siap. Yang kedua adalah mengambil file yang sudah jadi. Pada saat yang sama, kami tidak mengetahui waktu kesiapan yang tepat, sehingga kami dapat mengatur loop yang akan mengirimkan permintaan berulang kali untuk memeriksa kesiapan pada interval tertentu (misalnya, setiap detik).
HTTP Request harus dikirim menggunakan metode GET ke URL https://sandbox.zamzar.com/v1/jobs/{id} , di mana {id} adalah id tugas yang diperoleh pada langkah sebelumnya. Ini menggunakan header yang sama seperti pada permintaan sebelumnya.
Dari respon yang diterima, Anda perlu mengetahui status kesiapan. Jika konversi selesai, respons akan berisi "status": "successful" dan bagi kami, ini adalah sinyal bahwa kami dapat menyelesaikan putaran dan melanjutkan.
Selain status, respons harus berisi ID dari file yang telah selesai ( "target_files":[{"id": ). Itu harus diekstraksi untuk mendapatkan tautan terakhir ke file dalam bentuk https://sandbox.zamzar.com/v1/files/{ID}/content
Pada saat yang sama, menerima file hanya tersedia untuk pengguna yang berwenang, jadi Anda perlu menjalankan HTTP Request menggunakan header yang sama seperti permintaan sebelumnya.
Sebagai hasil dari permintaan, konten file akan diperoleh, yang harus diberi nama dan disimpan untuk digunakan lebih lanjut.
Mengirim file MP3 ke Whisper untuk dikonversi ke teks
Sekarang semuanya siap untuk langkah selanjutnya - mengirim file dengan pesan suara untuk dikenali. Ini akan membutuhkan permintaan lain dalam format Multipart Form . Tidak seperti contoh sebelumnya, permintaan perlu mentransfer file itu sendiri dan bukan tautan ke sana.
Model untuk permintaan semacam itu dapat dibuat di bagian External HTTP Request . Dalam hal ini, Anda tidak dapat membuat permintaan sepenuhnya tetapi membatasi diri Anda hanya untuk membuat model badan permintaan. Model itu sendiri terdiri dari dua parameter:
- File ( Jenis Virtual File ) - file yang sama yang perlu dikenali.
- model (ketik String ) - di sini kita tentukan nilainya whisper-1 .
Selain itu, untuk permintaan, Anda perlu mendapatkan kunci untuk bekerja dengan API OpenAI dan membuat header otorisasi dari jenis Bearer Token .
Key = 'Authorization'
Value = 'Bearer '+ OpenAI API Key
Selanjutnya, Anda dapat mengirimkan permintaan POST sendiri untuk mengenali pesan suara ke layanan Whisper di URL https://api.openai.com/v1/audio/transcriptions
Sebagai hasil dari pengenalan file yang berhasil, respons akan diterima dalam bentuk {"text": "Hello world.”}
Mengirim teks yang diterima ke ChatGPT
Anda dapat terus menggunakan blok HTTP Request untuk mengirim permintaan ke ChatGPT . Untuk menjelajahi dokumentasi API, serta membuat model untuk permintaan dan respons secara mandiri. Namun Anda juga bisa menggunakan opsi yang lebih sederhana berupa modul siap pakai dari AppMaster untuk bekerja dengan OpenAI , yang harus dipasang di bagian modul.
Dalam versi minimum yang cukup, Anda hanya perlu menentukan parameter model OAI ChatCompletionMessage ( role = user , content = message to be sent), menambahkannya ke array, dan mengirim permintaan ke ChatGPT dengan OpenAI: Create Chat Completion blok (atur model = gpt-4 ).
Hasilnya, kami mendapat respons dari ChatGPT . Kami membacanya dari parameter content model OAI ChatCompletionChoice .
Mengirim respons dari ChatGPT ke pengguna di Telegram
Langkah terakhir tinggal mengulang apa yang sudah dilakukan sebelumnya - kirim pesan ke Telegram . Tetapi jika kita mulai dengan mengembalikan pesan kembali ke pengirim, sekarang pesan ini telah meluncurkan serangkaian tindakan yang berbeda dan hasilnya dikembalikan sebagai tanggapan dari ChatGPT .
Dalam proses pengembangan bot semacam itu, ada baiknya mempertimbangkan:
- Telegram bekerja sedemikian rupa sehingga setiap permintaan yang dikirim oleh bot harus berhasil diproses. Jika tidak, dia akan mencoba mengulanginya berkali-kali, yang berarti jika ada masalah, Anda akan menerimanya lagi dan lagi. Pastikan logika dibangun sedemikian rupa sehingga permintaan tidak menghasilkan kesalahan dan dapat diproses dengan sukses.
- Tidak semua permintaan akan berfungsi sebagaimana mestinya pada percobaan pertama. Anda perlu mencari error , dan untuk ini, atur ke blok Write to Log . Mereka berguna baik untuk memeriksa apakah setiap blok benar-benar menerima data yang Anda rencanakan untuk dikirim dan untuk menganalisis hasil blok dan mempelajari responsnya secara mendetail.
- Sebagai bagian dari panduan, kami berasumsi bahwa semua permintaan dapat diprediksi dan berhasil, serta prosesnya cukup linier. Dalam praktiknya, akan diperlukan untuk menyediakan berbagai opsi tindakan (misalnya, apa yang harus dilakukan jika pengguna mengirim pesan teks alih-alih pesan suara atau bahkan gambar) dan penanganan kesalahan (memeriksa status permintaan HTTP, memperhitungkan opsi respons yang berbeda).