พิจารณาสร้างแอปพลิเคชันเพื่อทำงานร่วมกับ 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 ) รวมถึงรูปแบบ chat ซึ่งคุณสามารถรับตัวระบุผู้ส่งได้ ( id ) บล็อกสุดท้าย Telegram: Send Message ส่งข้อความที่ได้รับกลับไปยังผู้ส่ง แต่ในนามของบอท

คุณสามารถใช้กระบวนการทางธุรกิจนี้เพื่อทดสอบบอทเบื้องต้นและสื่อสารกับบอทได้ ในการทำเช่นนี้ คุณต้องสร้างจุดสิ้นสุดที่จะรับข้อมูลและเริ่มกระบวนการทางธุรกิจ

Telegram bot endpoint

เมื่อสร้าง สิ่งสำคัญคือต้องปิดการใช้งาน 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"

}

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 ซึ่งเราจะต้องลบส่วนพิเศษ ( "id":) โดยใช้บล็อก Replace String และปล่อยเฉพาะตัวระบุเท่านั้น

ในกรณีที่สอง หลักการเหมือนกันทุกประการ แต่ใช้นิพจน์ที่ซับซ้อนกว่าเล็กน้อย: "file_id":"[^"]+

Regex to get request 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 เป็นพารามิเตอร์สำหรับคำขอนั้น

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 '+ ID ผู้ใช้และรหัสผ่านคั่นด้วย “:” ในรูปแบบ base64

รหัส API ที่ได้รับเมื่อลงทะเบียนกับบริการคือ ID ผู้ใช้ คุณต้องเพิ่ม “:” ลงไปและเข้ารหัสในรูปแบบ Base64 โดยใช้บล็อก To Base64 ผลลัพธ์จะต้องเปลี่ยนเป็นส่วนหัว (บล็อก Make Key-Value (String) )

Zamzar Auth Header

ขั้นตอนต่อไปคือการสร้างแบบจำลองสำหรับแบบสอบถามในตัวออกแบบฐานข้อมูล คำขอจะต้องส่งในรูปแบบ Multipart Form ตามลำดับ จำเป็นต้องเตรียมแบบจำลองของแบบฟอร์มคำขอนี้ ในตัวอย่างของเรา โมเดลประกอบด้วยสามฟิลด์ประเภท String :

  • source_file - เส้นทางแบบเต็มไปยังไฟล์ต้นฉบับ (ได้เรียนรู้ในขั้นตอนก่อนหน้า)
  • source_format - รูปแบบไฟล์ต้นฉบับในตัวอย่างนี้ เป็นค่าคงที่ " ogg "
  • target_format - รูปแบบเป้าหมายสำหรับการแปลง คุณสามารถเลือกรูปแบบใดก็ได้ที่ Whisper รองรับ ลองใช้ " mp3 " เป็นตัวอย่าง

Zamzar Request Model

ในตัวแก้ไขกระบวนการทางธุรกิจ คุณต้องใช้บล็อก Make เพื่อกรอกข้อมูลโมเดลและส่งเป็นคำขอ POST ไปที่ https://sandbox.zamzar.com/v1/jobs/ โดยใช้บล็อก HTTP Request (อย่าลืม ระบุ Serialize request body = Multipart Form )

Zamzar Conversion Request

ควรสังเกตว่าคำขอนี้ไม่ส่งคืนไฟล์ที่แปลงแล้ว แต่สร้างงานเพื่อแปลงเท่านั้น คุณต้องสมัครเพื่อรับผลแยกต่างหาก สำหรับสิ่งนี้ คุณต้องมี ID ของงานที่สร้างขึ้น ID นี้ต้องได้รับจากเนื้อหาของการตอบสนองต่อคำขอ และสำหรับสิ่งนี้ กระบวนการที่ทำไปแล้วควรทำโดยใช้นิพจน์ทั่วไปและแยกค่า ID

ผลลัพธ์ของการแปลงจะต้องใช้แยกต่างหาก สิ่งนี้จะต้องมีคำขออีกสองคำขอ อย่างแรกคือการดูว่าผลลัพธ์พร้อมหรือไม่ ประการที่สองคือการรับไฟล์ที่เสร็จแล้ว ในเวลาเดียวกันเราไม่ทราบเวลาที่แน่นอนของความพร้อม ดังนั้นเราจึงสามารถจัดระเบียบลูปที่จะส่งคำขอซ้ำ ๆ เพื่อตรวจสอบความพร้อมในช่วงเวลาที่กำหนด (เช่น ทุก ๆ วินาที)

Zamzar Conversion Check Loop

ต้องส่ง 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 โดยใช้ส่วนหัวเดียวกันกับในคำขอก่อนหน้า

ตามคำขอจะได้เนื้อหาของไฟล์ซึ่งจะต้องตั้งชื่อและบันทึกเพื่อใช้ต่อไป

Zamzar save converted file

การส่งไฟล์ MP3 ไปที่ Whisper เพื่อแปลงเป็นข้อความ

ตอนนี้ทุกอย่างพร้อมสำหรับขั้นตอนต่อไป - การส่งไฟล์พร้อมข้อความเสียงเพื่อจดจำ ซึ่งจะต้องมีคำขออื่นในรูปแบบ Multipart Form ไม่เหมือนตัวอย่างก่อนหน้านี้ คำขอจะต้องถ่ายโอนไฟล์เอง ไม่ใช่ลิงก์ไปยังไฟล์นั้น

สามารถสร้างแบบจำลองสำหรับคำขอดังกล่าวได้ในส่วน External HTTP Request ในกรณีนี้ คุณไม่สามารถสร้างคำขอได้อย่างสมบูรณ์ แต่จำกัดตัวเองให้สร้างแบบจำลองเนื้อหาคำขอเท่านั้น ตัวแบบประกอบด้วยสองพารามิเตอร์:

  1. File ( ประเภท Virtual File ) - ไฟล์เดียวกับที่ต้องรู้จัก
  2. model (ประเภท String ) - ที่นี่เราระบุค่า whisper-1 .

Whisper request model

นอกจากนี้ สำหรับคำขอ จำเป็นต้องได้รับคีย์สำหรับการทำงานกับ OpenAI API และสร้างส่วนหัวการให้สิทธิ์ประเภท Bearer Token

Key = 'Authorization'

Value = 'Bearer '+ OpenAI API Key

จากนั้น คุณสามารถส่งคำขอ POST เพื่อรับรู้ข้อความเสียงไปยังบริการ Whisper ที่ URL https://api.openai.com/v1/audio/transcriptions

Whisper HTTP Request

เนื่องจากการจดจำไฟล์สำเร็จ จะได้รับการตอบกลับในรูปแบบ {"text": "Hello world.”}

การส่งข้อความที่ได้รับไปยัง ChatGPT

คุณสามารถใช้บล็อก HTTP Request เพื่อส่งคำขอไปยัง ChatGPT ต่อไปได้ เพื่อสำรวจเอกสารประกอบ API ตลอดจนสร้างแบบจำลองสำหรับคำขอและการตอบสนองโดยอิสระ แต่คุณยังสามารถใช้ตัวเลือกที่ง่ายกว่าในรูปแบบของโมดูลสำเร็จรูปจาก AppMaster เพื่อทำงานกับ OpenAI ซึ่งจะต้องติดตั้งในส่วนโมดูล

OpenAI Module

ในเวอร์ชันขั้นต่ำที่เพียงพอ คุณต้องระบุพารามิเตอร์ของโมเดล OAI ChatCompletionMessage ( role = user , content = ข้อความที่จะส่ง) เพิ่มไปยังอาร์เรย์ และส่งคำขอไปยัง ChatGPT ด้วย OpenAI: Create Chat Completion บล็อก (ตั้งค่าพารามิเตอร์ model = gpt-4 )

OpenAI Request

เป็นผลให้เราได้รับการตอบกลับจาก ChatGPT เราอ่านจากพารามิเตอร์ content ของโมเดล OAI ChatCompletionChoice

ChatGPT Response

ส่งการตอบกลับจาก ChatGPT ไปยังผู้ใช้ใน Telegram

ขั้นตอนสุดท้ายคือการทำซ้ำสิ่งที่ได้ทำไปแล้วก่อนหน้านี้ - ส่งข้อความไปที่ Telegram แต่ถ้าเราเริ่มต้นด้วยการส่งคืนข้อความกลับไปยังผู้ส่ง ตอนนี้ข้อความนี้ได้เปิดตัวชุดของการดำเนินการต่างๆ และผลลัพธ์จะถูกส่งกลับเป็นการตอบกลับจาก ChatGPT

Telegram send ChatGPT response

ในกระบวนการพัฒนาบอทดังกล่าว ควรพิจารณา:

  1. Telegram ทำงานในลักษณะที่แต่ละคำขอที่ส่งโดยบอทจะต้องได้รับการประมวลผลให้สำเร็จ มิฉะนั้นเขาจะพยายามทำซ้ำหลาย ๆ ครั้งซึ่งหมายความว่าในกรณีที่มีปัญหาใด ๆ คุณจะได้รับซ้ำแล้วซ้ำอีก ตรวจสอบให้แน่ใจว่าตรรกะถูกสร้างขึ้นในลักษณะที่คำขอไม่ส่งผลให้เกิดข้อผิดพลาดและสามารถดำเนินการได้สำเร็จ
  2. ไม่ใช่ทุกคำขอจะทำงานตามที่ตั้งใจไว้ในการลองครั้งแรก คุณจะต้อง ค้นหาข้อผิดพลาด และสำหรับสิ่งนี้ ให้จัดเรียงบล็อก Write to Log มีประโยชน์ทั้งในการตรวจสอบว่าแต่ละบล็อกได้รับข้อมูลจริงที่คุณวางแผนจะส่งและสำหรับวิเคราะห์ผลลัพธ์ของบล็อกและศึกษาการตอบสนองโดยละเอียด
  3. ในส่วนหนึ่งของแนวทางนี้ เราสันนิษฐานว่าคำขอทั้งหมดสามารถคาดเดาได้และประสบความสำเร็จ และกระบวนการค่อนข้างเป็นเส้นตรง ในทางปฏิบัติ จำเป็นต้องจัดเตรียมตัวเลือกต่างๆ สำหรับการดำเนินการ (เช่น จะทำอย่างไรหากผู้ใช้ส่งข้อความแทนข้อความเสียงหรือแม้แต่รูปภาพ) และการจัดการข้อผิดพลาด (การตรวจสอบสถานะของคำขอ HTTP คำนึงถึงตัวเลือกการตอบสนองที่แตกต่างกัน)
Was this article helpful?

AppMaster.io 101 หลักสูตรความผิดพลาด

10 โมดูล
2 สัปดาห์ที่ผ่านมา

ไม่แน่ใจว่าจะเริ่มต้นที่ไหน? เริ่มต้นด้วยหลักสูตรเร่งรัดสำหรับผู้เริ่มต้นและสำรวจ AppMaster จาก A ถึง Z

เริ่มหลักสูตร
Development it’s so easy with AppMaster!

ต้องการความช่วยเหลือเพิ่มเติมหรือไม่?

แก้ปัญหาด้วยความช่วยเหลือจากผู้เชี่ยวชาญของเรา ประหยัดเวลาและมุ่งเน้นที่การสร้างแอปพลิเคชันของคุณ

headphones

ติดต่อฝ่ายสนับสนุน

บอกเราเกี่ยวกับปัญหาของคุณ แล้วเราจะหาทางแก้ไขให้คุณ

message

ชุมชนแชท

สนทนาคำถามกับผู้ใช้รายอื่นในการแชทของเรา

เข้าร่วมชุมชน