พิจารณาสร้างแอปพลิเคชันเพื่อทำงานร่วมกับ ChatGPT หน้าที่ของมันคือการรับข้อความเสียงผ่าน Telegram แปลงเป็นข้อความ โอนไปยัง ChatGPT และส่งการตอบกลับกลับไปที่ Telegram ในระหว่างกระบวนการสร้าง คุณจะต้องทำตามขั้นตอนต่อไปนี้:
- การสร้างบอทสำหรับ Telegram และการตั้งค่าพื้นฐาน
- รับไฟล์พร้อมข้อความเสียง ( Telegram ใช้รูปแบบ .oga )
- แปลงไฟล์จาก oga เป็น mp3
- การถ่ายโอนไฟล์ mp3 ไปยังบริการ Whisper เพื่อแปลงเป็นข้อความ
- การส่งข้อความที่ได้รับไปยัง ChatGPT
- ส่งการตอบกลับจาก ChatGPT ไปยังผู้ใช้ใน Telegram
การสร้างบอทสำหรับ Telegram และการตั้งค่าพื้นฐาน
ทุกอย่างเริ่มต้นด้วยการลงทะเบียนบอท และสำหรับสิ่งนี้ Telegram ใช้บอทพิเศษของตัวเอง - BotFather คุณต้องเขียนถึงเขาและทำตามขั้นตอนตามลำดับง่ายๆ
ดังนั้น คุณควรมีลิงก์ไปยังบอทและโทเค็นสำหรับการร้องขอไปยัง API ของมัน
ตอนนี้คุณสามารถตั้งค่าบอทใน AppMaster ได้แล้ว วิธีที่ง่ายที่สุดคือการติดตั้งโมดูลที่เหมาะสม คุณเพียงแค่ต้องเลือกในรายการโมดูลและระบุโทเค็น API ของคุณในการตั้งค่า
โมเดลที่จำเป็นจะถูกสร้างขึ้นโดยอัตโนมัติในโครงการของคุณ บล็อกสำหรับการทำงานกับ Telegram จะปรากฏขึ้น รวมถึงกระบวนการทางธุรกิจพื้นฐานของ Telegram Telegram: Echo ควรพิจารณาอย่างรอบคอบและเข้าใจหลักการทำงาน
ที่อินพุตจะได้รับข้อความจาก Telegram ( โมเดล Message ) ประกอบด้วยข้อความของข้อความที่ส่ง ( text ) รวมถึงรูปแบบ chat ซึ่งคุณสามารถรับตัวระบุผู้ส่งได้ ( id ) บล็อกสุดท้าย Telegram: Send Message ส่งข้อความที่ได้รับกลับไปยังผู้ส่ง แต่ในนามของบอท
คุณสามารถใช้กระบวนการทางธุรกิจนี้เพื่อทดสอบบอทเบื้องต้นและสื่อสารกับบอทได้ ในการทำเช่นนี้ คุณต้องสร้างจุดสิ้นสุดที่จะรับข้อมูลและเริ่มกระบวนการทางธุรกิจ
เมื่อสร้าง สิ่งสำคัญคือต้องปิดการใช้งาน Middleware Token Auth จุดสิ้นสุดต้องเปิดให้ใช้งานโดยไม่ได้รับอนุญาต
หลักการทำงานของบอท Telegram นั้นค่อนข้างง่าย - ข้อความทั้งหมดที่จะถูกส่งไปยังเว็บฮุคพิเศษซึ่งสามารถถ่ายโอนเพิ่มเติมโดยอัตโนมัติและส่งไปยังปลายทางที่คุณเลือกเพื่อดำเนินการเพิ่มเติม
ดังนั้นขั้นตอนสุดท้ายยังคงเปิดใช้งานบอท - คุณต้องลงทะเบียนปลายทางนี้ใน Telegram และระบุว่าควรเชื่อมโยงกับบอทนี้ สิ่งนี้จำเป็นต้องส่งคำขอ POST พร้อม URL ปลายทางแบบเต็มและระบุโทเค็นบอทของคุณแทน {Bot API Token} ไปยังที่อยู่
https://api.telegram.org/bot{Bot API Token}/setWebhook
หากคุณได้รับข้อความตอบกลับแสดงว่าทุกอย่างถูกต้อง
{
"ok": true,
"result": true,
"description": "Webhook was set"
}
บอทพร้อมที่จะทำงาน คุณสามารถส่งข้อความถึงเขาและรับมันกลับมาได้
รับไฟล์พร้อมข้อความเสียง
โมดูล Telegram ได้รับการออกแบบมาสำหรับการทำงานกับข้อความเป็นหลัก และหน้าที่ของเราคือรับไฟล์พร้อมข้อความเสียง ด้วย AppMaster คุณสามารถแก้ปัญหานี้ได้อย่างง่ายดาย ก่อนอื่นเราต้องวิเคราะห์สิ่งที่เราได้รับจาก Telegram เพื่อแยกวิเคราะห์โครงสร้างของข้อความ บล็อก Get Request Body ได้รับการออกแบบมาสำหรับสิ่งนี้ ไม่จำเป็นต้องระบุโครงสร้างคำขอล่วงหน้า และช่วยให้คุณได้รับคำขอทั้งหมด โดยไม่คำนึงถึงเนื้อหา บล็อกนี้ส่งคืนผลลัพธ์ของคิวรีเป็นชุดของไบต์ และคุณสามารถใช้บล็อก To String เพื่อนำเสนอผลลัพธ์ในรูปแบบที่มนุษย์อ่านได้ รวมทั้งบันทึกไว้ในบันทึก (บล็อก Write to Log ) เพื่อการวิเคราะห์เพิ่มเติม
เราสนใจสองพารามิเตอร์จากคำขอทั้งหมด:
Sender ID - ระบุในคำขอเป็น "id":300493858
File ID - "file_id":"AwACAgIAAxkBAAMzZBk6QRvO-OYWsWUC-Bu1UXDM2FwAAkktAAKTZclIWTSkfTTw8wYvBA"
คุณสามารถสร้างแบบจำลองของคุณเองที่ตรงกับคำขอและใช้เพื่อรับฟิลด์ที่จำเป็น แต่จะเร็วกว่าในการสร้างนิพจน์ทั่วไป ( Regex ) และใช้งาน ในการดำเนินการนี้ บล็อก String Match Regex จะใช้นิพจน์เองเป็นอินพุต เช่นเดียวกับสตริงที่จะตรวจสอบการจับคู่กับนิพจน์ที่กำหนด
ในกรณีแรก นิพจน์คือ "id":"\d+
เป็นผลให้เราได้รับสตริง "id":300493858 ซึ่งเราจะต้องลบส่วนพิเศษ ( "id":) โดยใช้บล็อก Replace String และปล่อยเฉพาะตัวระบุเท่านั้น
ในกรณีที่สอง หลักการเหมือนกันทุกประการ แต่ใช้นิพจน์ที่ซับซ้อนกว่าเล็กน้อย: "file_id":"[^"]+
ตอนนี้เรามีรหัสผู้ส่งและรหัสไฟล์แล้ว และเราสามารถใช้รหัสนั้นเพื่อรับไฟล์ได้ ในการทำเช่นนี้คุณต้องหันไปใช้ Telegram API สิ่งนี้ได้ทำไปแล้วก่อนหน้านี้เมื่อลงทะเบียนจุดสิ้นสุดของบอท ตอนนี้คุณต้องส่งคำขอที่คล้ายกันเพื่อรับไฟล์ ต้องแทนที่ {File ID} ใน URL คำขอด้วย ID ไฟล์ที่ได้รับ
https://api.telegram.org/bot{Bot API Token}/setWebhook/getFile?file_id={File ID}
ในการส่งคำขอและรับผลลัพธ์ เราใช้บล็อก HTTP Request โดยระบุ URL และ Method = GET เป็นพารามิเตอร์สำหรับคำขอนั้น
จากคำตอบที่ได้รับ คุณสามารถค้นหาเส้นทางสัมพัทธ์ไปยังไฟล์ ซึ่งจะถูกส่งผ่านในพารามิเตอร์ " 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 '+ ID ผู้ใช้และรหัสผ่านคั่นด้วย “:” ในรูปแบบ base64
รหัส API ที่ได้รับเมื่อลงทะเบียนกับบริการคือ ID ผู้ใช้ คุณต้องเพิ่ม “:” ลงไปและเข้ารหัสในรูปแบบ Base64 โดยใช้บล็อก To Base64 ผลลัพธ์จะต้องเปลี่ยนเป็นส่วนหัว (บล็อก Make Key-Value (String) )
ขั้นตอนต่อไปคือการสร้างแบบจำลองสำหรับแบบสอบถามในตัวออกแบบฐานข้อมูล คำขอจะต้องส่งในรูปแบบ Multipart Form ตามลำดับ จำเป็นต้องเตรียมแบบจำลองของแบบฟอร์มคำขอนี้ ในตัวอย่างของเรา โมเดลประกอบด้วยสามฟิลด์ประเภท String :
- source_file - เส้นทางแบบเต็มไปยังไฟล์ต้นฉบับ (ได้เรียนรู้ในขั้นตอนก่อนหน้า)
- source_format - รูปแบบไฟล์ต้นฉบับในตัวอย่างนี้ เป็นค่าคงที่ " ogg "
- target_format - รูปแบบเป้าหมายสำหรับการแปลง คุณสามารถเลือกรูปแบบใดก็ได้ที่ Whisper รองรับ ลองใช้ " mp3 " เป็นตัวอย่าง
ในตัวแก้ไขกระบวนการทางธุรกิจ คุณต้องใช้บล็อก Make เพื่อกรอกข้อมูลโมเดลและส่งเป็นคำขอ POST ไปที่ https://sandbox.zamzar.com/v1/jobs/ โดยใช้บล็อก HTTP Request (อย่าลืม ระบุ Serialize request body = Multipart Form )
ควรสังเกตว่าคำขอนี้ไม่ส่งคืนไฟล์ที่แปลงแล้ว แต่สร้างงานเพื่อแปลงเท่านั้น คุณต้องสมัครเพื่อรับผลแยกต่างหาก สำหรับสิ่งนี้ คุณต้องมี ID ของงานที่สร้างขึ้น ID นี้ต้องได้รับจากเนื้อหาของการตอบสนองต่อคำขอ และสำหรับสิ่งนี้ กระบวนการที่ทำไปแล้วควรทำโดยใช้นิพจน์ทั่วไปและแยกค่า ID
ผลลัพธ์ของการแปลงจะต้องใช้แยกต่างหาก สิ่งนี้จะต้องมีคำขออีกสองคำขอ อย่างแรกคือการดูว่าผลลัพธ์พร้อมหรือไม่ ประการที่สองคือการรับไฟล์ที่เสร็จแล้ว ในเวลาเดียวกันเราไม่ทราบเวลาที่แน่นอนของความพร้อม ดังนั้นเราจึงสามารถจัดระเบียบลูปที่จะส่งคำขอซ้ำ ๆ เพื่อตรวจสอบความพร้อมในช่วงเวลาที่กำหนด (เช่น ทุก ๆ วินาที)
ต้องส่ง HTTP Request โดยใช้วิธี GET ไปยัง URL https://sandbox.zamzar.com/v1/jobs/{id} โดยที่ {id} คือรหัสงานที่ได้รับในขั้นตอนก่อนหน้า ซึ่งใช้ส่วนหัวเดียวกันกับในคำขอก่อนหน้า
จากคำตอบที่ได้รับ คุณต้องค้นหาสถานะความพร้อม หากการแปลงเสร็จสมบูรณ์ การตอบกลับจะมี "status": "successful" และสำหรับเรา นี่เป็นสัญญาณว่าเราสามารถดำเนินการวนซ้ำให้เสร็จสิ้นและดำเนินการต่อไปได้
นอกจากสถานะแล้ว การตอบกลับต้องมี ID ของไฟล์ที่เสร็จสมบูรณ์แล้ว ( "target_files":[{"id": ) ต้องแตกไฟล์เพื่อรับลิงก์สุดท้ายไปยังไฟล์ในรูปแบบ https://sandbox.zamzar.com/v1/files/{ID}/content
ในขณะเดียวกัน การรับไฟล์จะมีให้สำหรับผู้ใช้ที่ได้รับอนุญาตเท่านั้น ดังนั้นคุณต้องดำเนิน HTTP Request โดยใช้ส่วนหัวเดียวกันกับในคำขอก่อนหน้า
ตามคำขอจะได้เนื้อหาของไฟล์ซึ่งจะต้องตั้งชื่อและบันทึกเพื่อใช้ต่อไป
การส่งไฟล์ MP3 ไปที่ Whisper เพื่อแปลงเป็นข้อความ
ตอนนี้ทุกอย่างพร้อมสำหรับขั้นตอนต่อไป - การส่งไฟล์พร้อมข้อความเสียงเพื่อจดจำ ซึ่งจะต้องมีคำขออื่นในรูปแบบ Multipart Form ไม่เหมือนตัวอย่างก่อนหน้านี้ คำขอจะต้องถ่ายโอนไฟล์เอง ไม่ใช่ลิงก์ไปยังไฟล์นั้น
สามารถสร้างแบบจำลองสำหรับคำขอดังกล่าวได้ในส่วน External HTTP Request ในกรณีนี้ คุณไม่สามารถสร้างคำขอได้อย่างสมบูรณ์ แต่จำกัดตัวเองให้สร้างแบบจำลองเนื้อหาคำขอเท่านั้น ตัวแบบประกอบด้วยสองพารามิเตอร์:
- File ( ประเภท Virtual File ) - ไฟล์เดียวกับที่ต้องรู้จัก
- model (ประเภท String ) - ที่นี่เราระบุค่า whisper-1 .
นอกจากนี้ สำหรับคำขอ จำเป็นต้องได้รับคีย์สำหรับการทำงานกับ OpenAI API และสร้างส่วนหัวการให้สิทธิ์ประเภท Bearer Token
Key = 'Authorization'
Value = 'Bearer '+ OpenAI API Key
จากนั้น คุณสามารถส่งคำขอ POST เพื่อรับรู้ข้อความเสียงไปยังบริการ Whisper ที่ URL https://api.openai.com/v1/audio/transcriptions
เนื่องจากการจดจำไฟล์สำเร็จ จะได้รับการตอบกลับในรูปแบบ {"text": "Hello world.”}
การส่งข้อความที่ได้รับไปยัง ChatGPT
คุณสามารถใช้บล็อก HTTP Request เพื่อส่งคำขอไปยัง ChatGPT ต่อไปได้ เพื่อสำรวจเอกสารประกอบ API ตลอดจนสร้างแบบจำลองสำหรับคำขอและการตอบสนองโดยอิสระ แต่คุณยังสามารถใช้ตัวเลือกที่ง่ายกว่าในรูปแบบของโมดูลสำเร็จรูปจาก AppMaster เพื่อทำงานกับ OpenAI ซึ่งจะต้องติดตั้งในส่วนโมดูล
ในเวอร์ชันขั้นต่ำที่เพียงพอ คุณต้องระบุพารามิเตอร์ของโมเดล OAI ChatCompletionMessage ( role = user , content = ข้อความที่จะส่ง) เพิ่มไปยังอาร์เรย์ และส่งคำขอไปยัง ChatGPT ด้วย OpenAI: Create Chat Completion บล็อก (ตั้งค่าพารามิเตอร์ model = gpt-4 )
เป็นผลให้เราได้รับการตอบกลับจาก ChatGPT เราอ่านจากพารามิเตอร์ content ของโมเดล OAI ChatCompletionChoice
ส่งการตอบกลับจาก ChatGPT ไปยังผู้ใช้ใน Telegram
ขั้นตอนสุดท้ายคือการทำซ้ำสิ่งที่ได้ทำไปแล้วก่อนหน้านี้ - ส่งข้อความไปที่ Telegram แต่ถ้าเราเริ่มต้นด้วยการส่งคืนข้อความกลับไปยังผู้ส่ง ตอนนี้ข้อความนี้ได้เปิดตัวชุดของการดำเนินการต่างๆ และผลลัพธ์จะถูกส่งกลับเป็นการตอบกลับจาก ChatGPT
ในกระบวนการพัฒนาบอทดังกล่าว ควรพิจารณา:
- Telegram ทำงานในลักษณะที่แต่ละคำขอที่ส่งโดยบอทจะต้องได้รับการประมวลผลให้สำเร็จ มิฉะนั้นเขาจะพยายามทำซ้ำหลาย ๆ ครั้งซึ่งหมายความว่าในกรณีที่มีปัญหาใด ๆ คุณจะได้รับซ้ำแล้วซ้ำอีก ตรวจสอบให้แน่ใจว่าตรรกะถูกสร้างขึ้นในลักษณะที่คำขอไม่ส่งผลให้เกิดข้อผิดพลาดและสามารถดำเนินการได้สำเร็จ
- ไม่ใช่ทุกคำขอจะทำงานตามที่ตั้งใจไว้ในการลองครั้งแรก คุณจะต้อง ค้นหาข้อผิดพลาด และสำหรับสิ่งนี้ ให้จัดเรียงบล็อก Write to Log มีประโยชน์ทั้งในการตรวจสอบว่าแต่ละบล็อกได้รับข้อมูลจริงที่คุณวางแผนจะส่งและสำหรับวิเคราะห์ผลลัพธ์ของบล็อกและศึกษาการตอบสนองโดยละเอียด
- ในส่วนหนึ่งของแนวทางนี้ เราสันนิษฐานว่าคำขอทั้งหมดสามารถคาดเดาได้และประสบความสำเร็จ และกระบวนการค่อนข้างเป็นเส้นตรง ในทางปฏิบัติ จำเป็นต้องจัดเตรียมตัวเลือกต่างๆ สำหรับการดำเนินการ (เช่น จะทำอย่างไรหากผู้ใช้ส่งข้อความแทนข้อความเสียงหรือแม้แต่รูปภาพ) และการจัดการข้อผิดพลาด (การตรวจสอบสถานะของคำขอ HTTP คำนึงถึงตัวเลือกการตอบสนองที่แตกต่างกัน)