ChatGPT ile çalışmak için bir uygulama oluşturmayı düşünün. Görevi, Telegram aracılığıyla sesli mesajlar almak, bunları metne dönüştürmek, ChatGPT aktarmak ve Telegram geri yanıt göndermek olacaktır. Oluşturma işlemi sırasında, aşağıdaki adımlardan geçmeniz gerekecek:

  1. Telegram için bir bot oluşturma ve temel kurulumu.
  2. Sesli mesaj içeren bir dosya alma ( Telegram .oga biçimini kullanır).
  3. Dosyayı oga mp3 dönüştürün.
  4. Metne dönüştürmek için mp3 dosyasını Whisper hizmetine aktarma.
  5. Alınan bir metni ChatGPT gönderme.
  6. Telegram bir kullanıcıya ChatGPT yanıt gönderme.

Telegram için bir bot oluşturma ve temel kurulumu

Her şey bir botu kaydetme gerçeğiyle başlar. Ve bunun için Telegram kendi özel botu olan BotFather kullanıyor. Ona yazmanız ve basit sıralı adımlardan geçmeniz gerekiyor.

Telegram BotFather

Sonuç olarak, botunuza bir bağlantınız ve API'sine yönelik istekler için bir jetonunuz olmalıdır.

Artık botu AppMaster ayarlamaya geçebilirsiniz. Bunu yapmanın en kolay yolu uygun modülü kurmaktır. Modül listesinden seçmeniz ve ayarlarda API belirtecinizi belirtmeniz yeterlidir.

Telegram Module

Projenizde gerekli modeller otomatik olarak oluşturulacak, Telegram ile çalışmak için blokların yanı sıra temel Telegram iş süreci Telegram: Echo görünecektir. Dikkatlice düşünmeye ve çalışma prensibini anlamaya değer.

Telegram Echo business process

Girişte Telegram bir mesaj alır ( Message modeli). Gönderilen mesajın metnini ( text ) ve gönderenin tanımlayıcısını ( id ) alabileceğiniz chat modelini içerir. Son blok Telegram: Send Message , alınan mesajı bot adına gönderene geri gönderir.

Botun ilk testi ve onunla iletişim için bu iş sürecini kullanabilirsiniz. Bunu yapmak için, bilgileri alacak ve bir iş süreci başlatacak bir uç nokta oluşturmanız gerekir.

Telegram bot endpoint

Oluştururken, Middleware Token Auth devre dışı bırakmak önemlidir. Bitiş noktası yetkilendirme olmadan kullanıma açık olmalıdır.

Telegram botunun çalışma prensibi oldukça basittir - kendisine gönderilecek tüm mesajlar, onları otomatik olarak daha fazla aktarabilen ve daha sonraki işlemler için seçtiğiniz uç noktaya gönderebilen özel bir web kancasına gider.

Buna göre, botu etkinleştirmek için son adım kalır - bu uç noktayı Telegram kaydetmeniz ve bu botun onunla ilişkilendirilmesi gerektiğini belirtmeniz gerekir. Bu, tam uç nokta URL'si ile bir POST isteği göndermeyi ve adrese {Bot API Token} yerine bot jetonunuzu belirtmeyi gerektirir.

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

Yanıt olarak böyle bir mesaj alırsanız, her şey doğru şekilde yapılmıştır.

{

"ok": true,

"result": true,

"description": "Webhook was set"

}

Post Telegram Webhook

Bot çalışmaya hazır, ona bir mesaj gönderip geri alabilirsiniz.

Sesli mesaj içeren bir dosya alma

Telegram modülü, öncelikle metin mesajlarıyla çalışmak için tasarlanmıştır. Ve bizim görevimiz sesli mesaj içeren bir dosya almak. AppMaster ile bu sorunu kolayca çözebilirsiniz. İlk olarak, mesajın yapısını ayrıştırmak için genellikle Telegram ne aldığımızı analiz etmemiz gerekiyor. Get Request Body bloğu bunun için tasarlanmıştır. Talep yapısını önceden belirtme ihtiyacını ortadan kaldırır ve içeriği ne olursa olsun talebin tamamını almanızı sağlar. Bu blok, sorgu sonucunu bir bayt kümesi olarak döndürür ve sonucu insan tarafından okunabilir bir biçimde sunmak ve ayrıca daha fazla analiz için günlüklere ( Write to Log bloğu) kaydetmek için To String bloğunu kullanabilirsiniz.

Telegram Request log

Tüm istekten iki parametre ile ilgileniyoruz:

Sender ID - istekte "id":300493858
File ID - "file_id":"AwACAgIAAxkBAAMzZBk6QRvO-OYWsWUC-Bu1UXDM2FwAAkktAAKTZclIWTSkfTTw8wYvBA"

Taleple eşleşen kendi modelinizi oluşturabilir ve gerekli alanları almak için kullanabilirsiniz. Ancak normal bir ifade ( Regex ) oluşturmak ve onu kullanmak daha hızlı olacaktır. Bunu yapmak için, String Match Regex bloğu, ifadenin kendisini ve verilen ifadeyle eşleşmesinin kontrol edileceği dizeyi girdi olarak alır.

İlk durumda, ifade şu şekildedir "id":"\d+

Sonuç olarak, "id":300493858 dizesini alırız ve bu dizeden, Replace String bloğunu kullanarak fazladan ( "id":) kaldırmamız ve yalnızca tanımlayıcının kendisini bırakmamız gerekir.

İkinci durumda, prensip tamamen aynıdır, ancak biraz daha karmaşık bir ifade kullanılır: "file_id":"[^"]+

Regex to get request ID

Artık gönderen kimliğine ve dosya kimliğine sahibiz ve bunu dosyanın kendisini almak için kullanabiliriz. Bunun için Telegram API dönmeniz gerekiyor. Bu, botun uç noktasını kaydederken daha önce yapılmıştır. Şimdi dosyayı almak için benzer bir talepte bulunmanız gerekiyor. İstek URL'sindeki {File ID} alınan dosya kimliğiyle değiştirilmelidir.

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

Bir istek göndermek ve sonucunu almak için, bunun için parametre olarak URL ve Method = GET belirterek HTTP Request bloğunu kullanırız.

Telegram File Request

Alınan yanıttan dosyanın göreli yolunu öğrenebilirsiniz, " file_path " parametresinde iletilir. Buna göre, bir sonraki normal ifadeyi ( "file_path":"[^"]+ ) kullanarak istediğiniz değeri çıkarabilir ve " https://api.telegram.org/file/bot{Bot API Token}/ " ile bağlanabilirsiniz. dosyanın tam bağlantısını alın.

Dosyayı OGA MP3 dönüştürün

Dosya alındı, ancak engel şu ki, Whisper hizmeti OGA formatıyla çalışmayı desteklemiyor. Uygun biçimlerden birine dönüştürmeniz gerekir.

Örnek olarak, Zamzar hizmeti kullanılır (ücretsiz planı ayda 100 dönüşüm yapma yeteneğini destekler) ve MP3 dönüştürme .

Ayrıntılar için belgelerine başvurabilir veya benzer başka bir hizmet kullanabilirsiniz. Çalışmayı ayrıntılı olarak analiz etmeyeceğiz ve yalnızca AppMaster uygulanmasıyla doğrudan ilgili olan kısmı ele alacağız.

Her şeyden önce, istek doğru kimlik doğrulama verilerine ihtiyaç duyacaktır. Basic Authentication biçiminde sağlanmalıdırlar. Bunu yapmak için, istekte değerler içeren bir başlık iletmeniz gerekir:

Key = 'Authorization'

Value = 'Basic '+ base64 biçiminde “:” ile ayrılmış Kullanıcı Kimliği ve şifre

Hizmete kaydolurken elde edilen API anahtarı, kullanıcı kimliğidir. İçine “:” eklemeniz ve To Base64 bloğunu kullanarak Base64 formatında kodlamanız gerekir. Sonucun bir başlığa dönüştürülmesi gerekir ( Make Key-Value (String) ).

Zamzar Auth Header

Bir sonraki adım, veritabanı tasarımcısında sorgu için bir model oluşturmaktır. Talebin sırasıyla Multipart Form formatında gönderilmesi gerekmektedir, bu talebin formun bir modelinin hazırlanması gerekmektedir. Örneğimizde, model, String türündeki üç alandan oluşur:

  • source_file - kaynak dosyanın tam yolu (önceki adımda öğrenildi).
  • source_format - kaynak dosya biçimi, bu örnekte sabit bir " ogg " değeridir.
  • target_format - dönüştürme için hedef biçim. Whisper tarafından desteklenen herhangi bir biçimi seçebilirsiniz. Örnek olarak " mp3 " kullanalım.

Zamzar Request Model

İş süreci düzenleyicisinde, model verilerini doldurmak için Make bloğunu kullanmanız ve HTTP Request bloğunu kullanarak https://sandbox.zamzar.com/v1/jobs/ adresine POST isteği olarak göndermeniz gerekir (emin olun Serialize request body = Multipart Form ).

Zamzar Conversion Request

Bu isteğin dönüştürülen dosyayı döndürmediği, yalnızca onu dönüştürmek için bir görev oluşturduğu unutulmamalıdır. Sonuç için ayrıca başvurmanız gerekir; bunun için oluşturulan görevin kimliğine ihtiyacınız var. Bu kimlik, talebe verilen yanıtın gövdesinden elde edilmelidir ve bunun için önceden hazırlanmış işlem, düzenli ifadeler kullanılarak ve id değeri çıkarılarak yapılmalıdır.

Dönüştürmenin sonucu ayrıca uygulanmalıdır. Bu, iki istek daha gerektirecektir. Birincisi, sonucun hazır olup olmadığını öğrenmektir. İkincisi, bitmiş dosyayı almaktır. Aynı zamanda, hazır olma zamanını tam olarak bilmiyoruz, bu nedenle belirli aralıklarla (örneğin, her saniye) hazır olup olmadığını kontrol etmek için tekrarlanan istekler gönderecek bir döngü düzenleyebiliriz.

Zamzar Conversion Check Loop

GET yöntemi kullanılarak https://sandbox.zamzar.com/v1/jobs/{id} URL'sine bir HTTP Request gönderilmelidir; burada {id} önceki adımda elde edilen görev kimliğidir. Bu, önceki istekte olduğu gibi aynı başlıkları kullanır.

Alınan yanıttan, hazırlık durumunu bulmanız gerekir. Dönüştürme tamamlandıysa, yanıt "status": "successful" içerecektir ve bu bizim için döngüyü tamamlayıp devam edebileceğimizin bir işaretidir.

Duruma ek olarak yanıt, tamamlanan dosyanın kimliğini içermelidir ( "target_files":[{"id": ). Dosyanın son bağlantısını https://sandbox.zamzar.com/v1/files/{ID}/content biçiminde almak için çıkarılmalıdır.

Aynı zamanda, bir dosyayı almak yalnızca yetkili kullanıcılar tarafından kullanılabilir, bu nedenle önceki isteklerde olduğu gibi aynı başlıkları kullanarak bir HTTP Request yürütmeniz gerekir.

Talep sonucunda, bir isim verilmesi ve daha sonra kullanılmak üzere kaydedilmesi gereken dosyanın içeriği elde edilecektir.

Zamzar save converted file

Metne dönüştürmek için bir MP3 dosyasını Whisper gönderme

Artık bir sonraki adım için her şey hazır - tanıma için sesli mesaj içeren bir dosya göndermek. Bu, Multipart Form biçiminde başka bir istek gerektirecektir. Yalnızca önceki örnekten farklı olarak, isteğin dosyaya bir bağlantı değil, dosyanın kendisini aktarması gerekir.

External HTTP Request bölümünde böyle bir istek için bir model oluşturulabilir. Bu durumda, tamamen bir istek oluşturamazsınız ve kendinizi yalnızca bir istek gövde modeli oluşturmakla sınırlandırırsınız. Modelin kendisi iki parametreden oluşur:

  1. File ( Virtual File türü) - tanınması gereken aynı dosya.
  2. model ( String yazın) - burada whisper-1 değerini belirtiyoruz.

Whisper request model

Ayrıca istek için OpenAI API ile çalışmak için bir anahtar elde etmek ve Bearer Token türünde bir yetkilendirme başlığı oluşturmak gerekir.

Key = 'Authorization'

Value = 'Bearer '+ OpenAI API Key

Ardından, sesli mesajı tanımak için POST isteğini https://api.openai.com/v1/audio/transcriptions URL'sindeki Whisper hizmetine gönderebilirsiniz.

Whisper HTTP Request

Dosyanın başarılı bir şekilde tanınması sonucunda {"text": "Hello world.”} şeklinde bir yanıt alınacaktır.

Alınan bir metni ChatGPT gönderme

ChatGPT istek göndermek için HTTP Request bloklarını kullanmaya devam edebilirsiniz. API belgelerini keşfetmenin yanı sıra istekler ve yanıtlar için bağımsız olarak modeller oluşturmak. Ancak OpenAI ile çalışmak için AppMaster hazır bir modül biçiminde daha basit bir seçeneği de kullanabilirsiniz, bu modüller bölümüne kurulması gerekir.

OpenAI Module

Yeterli minimum sürümde, yalnızca OAI ChatCompletionMessage modelinin parametrelerini ( role = user , content = gönderilecek mesaj) belirtmeniz, diziye eklemeniz ve OpenAI: Create Chat Completion ile ChatGPT bir istek göndermeniz yeterlidir. blok (parametre model = gpt-4 ).

OpenAI Request

Sonuç olarak, ChatGPT bir yanıt alıyoruz. OAI ChatCompletionChoice modelinin content parametresinden okuyoruz.

ChatGPT Response

Telegram bir kullanıcıya ChatGPT yanıt gönderme

Son adım, yalnızca daha önce yapılmış olanı tekrarlamak - Telegram bir mesaj göndermek. Ancak mesajı gönderene basitçe geri göndererek başlarsak, şimdi bu mesaj bir dizi çeşitli eylem başlattı ve sonuç, ChatGPT bir yanıt olarak döndürüldü.

Telegram send ChatGPT response

Böyle bir bot geliştirme sürecinde şunları dikkate almaya değer:

  1. Telegram bot tarafından gönderilen her isteğin başarıyla işlenmesini gerektirecek şekilde çalışır. Aksi takdirde defalarca tekrar etmeye çalışacaktır, bu da herhangi bir sorun olması durumunda tekrar tekrar alacağınız anlamına gelir. Mantığın, isteğin hatayla sonuçlanmayacağı ve başarılı bir şekilde işlenebileceği şekilde oluşturulduğundan emin olun.
  2. Tüm istekler ilk denemede istendiği gibi çalışmaz. Hataları aramanız ve bunun için Write to Log bloklarını düzenlemeniz gerekecek. Hem her bloğun, iletmeyi planladığınız verileri gerçekten alıp almadığını kontrol etmek hem de bloğun sonucunu analiz etmek ve yanıtı ayrıntılı olarak incelemek için kullanışlıdırlar.
  3. Kılavuzun bir parçası olarak, tüm isteklerin öngörülebilir ve başarılı olduğunu ve sürecin oldukça doğrusal olduğunu varsaydık. Uygulamada, eylemler (örneğin, kullanıcı sesli mesaj veya hatta resim yerine bir metin mesajı gönderirse ne yapılacağı) ve hata işleme (HTTP isteklerinin durumunu kontrol etme, farklı yanıt seçeneklerini dikkate alın).
Was this article helpful?

AppMaster.io 101 Çarpışma Kursu

10 Modüller
2 haftalar

Nereden başlayacağınızdan emin değil misiniz? Yeni başlayanlar için hızlandırılmış kursumuzla başlayın ve AppMaster'ı A'dan Z'ye keşfedin.

Kursa Başlayın
Development it’s so easy with AppMaster!

Daha Fazla Yardıma mı ihtiyacınız var?

Herhangi bir sorunu uzmanlarımızın yardımıyla çözün. Zamandan tasarruf edin ve uygulamalarınızı oluşturmaya odaklanın.

headphones

İletişim desteği

Bize sorununuzu anlatın, size bir çözüm bulalım.

message

Topluluk Sohbeti

Soruları sohbetimizde diğer kullanıcılarla tartışın.

Topluluğa Katılın