Telegram getFile: กู้คืนลิงก์ดาวน์โหลดที่หมดอายุอย่างปลอดภัย
หากลิงก์ดาวน์โหลดไฟล์ของบอต Telegram หมดอายุ ให้เรียก getFile อีกครั้งด้วย file_id ของไฟล์ แล้วใช้ file_path ที่ได้กลับมา Telegram รับประกันว่าลิงก์ที่เตรียมไว้จะใช้ได้อย่างน้อยหนึ่งชั่วโมง ไม่ใช่ตลอดไป และห้ามใช้ file_unique_id แทนรหัสสำหรับดาวน์โหลด วิธีนี้ใช้กับ Bot API ทางการ ส่วน URL ชั่วคราวของไฟล์แนบที่มาจาก webhook แบบรวมมีข้อกำหนดคนละชุด
ประเด็นสำคัญ
- การรับข้อความสื่อไม่ได้แปลว่าแอปบันทึกเนื้อหาไฟล์แล้ว
- เก็บรหัสไฟล์และบริบทของข้อความไว้ โดยถือว่า URL เป็นเพียงตำแหน่งดาวน์โหลดชั่วคราว
- เมื่อลิงก์ Bot API หมดอายุ ให้ขอใหม่ผ่าน
getFileแทนการลอง URL เดิมไม่สิ้นสุด - อย่านำอายุลิงก์หรือวิธีต่ออายุของ Telegram ไปใช้กับ URL ไฟล์แนบของ UnifyPort
getFile ส่งอะไรกลับมา และควรเก็บอะไร
เอกสาร Telegram Bot API ระบุว่า getFile ใช้รับข้อมูลพื้นฐานและเตรียมไฟล์สำหรับดาวน์โหลด เมื่อสำเร็จจะได้ออบเจ็กต์ File รหัสแต่ละชนิดมีหน้าที่ต่างกัน
| ค่า | หน้าที่ตามเอกสาร | แนวทางใช้ในแอป |
|---|---|---|
file_id | ดาวน์โหลดหรือนำไฟล์กลับมาใช้ | เก็บพร้อมตัวตนของบอตที่รับไฟล์ เพื่อเรียก getFile ภายหลัง |
file_unique_id | ระบุไฟล์เดียวกันข้ามเวลาและบอต แต่ใช้ดาวน์โหลดหรือนำกลับมาใช้ไม่ได้ | ใช้เชื่อมโยงข้อมูลได้ แต่ไม่ใช่รหัสดาวน์โหลด |
file_path | พาธสำหรับดาวน์โหลดไฟล์ที่เตรียมไว้ | ใช้ค่าจากคำตอบล่าสุด ไม่ถือว่าพาธเก่าเป็นที่อยู่ถาวร |
file_name, mime_type | เมทาดาทาของเอกสารที่ผู้ส่งระบุ ซึ่งอาจไม่มี | เก็บจากข้อความขาเข้าหากมี และตรวจสอบก่อนใช้ |
เก็บรหัสแชตและข้อความต้นทางด้วย ตัวตนของไฟล์ไม่ใช่สิทธิ์เข้าถึงบทสนทนา หากไฟล์เดียวกันปรากฏในอีกแชต ไม่ควรให้แชตนั้นเข้าถึงสำเนาที่เก็บไว้โดยอัตโนมัติ
ฟิลด์เหล่านี้เป็นของ Bot API ไม่ใช่ฟิลด์ใหม่ในอีเวนต์ UnifyPort หากยังเลือกวิธีเชื่อมต่ออยู่ อ่าน เปรียบเทียบ Bot API webhook กับ webhook ขาเข้าแบบรวม ก่อน
แยกสาเหตุที่ดาวน์โหลดไฟล์ Telegram ไม่สำเร็จ
เลือกวิธีกู้คืนจากขั้นตอนที่ล้มเหลวจริง ไม่ใช่จากการที่กล่องข้อความยังแสดงภาพขนาดย่อได้
| สิ่งที่พบ | ตรวจสอบต่อ | ขอบเขตการกู้คืน |
|---|---|---|
getFile ล้มเหลว | ข้อมูลรับรองของบอต, file_id จริง, ข้อผิดพลาดที่ตอบกลับ และขนาดไฟล์ | แก้คำขอหรือเลือกวิธีดาวน์โหลดที่รองรับก่อนลองใหม่ |
| ลิงก์ที่เคยใช้ได้หยุดทำงาน | ขอผลลัพธ์ getFile ใหม่ | ลองตำแหน่งใหม่ อย่าถือว่าทุกข้อผิดพลาด HTTP คือการหมดอายุ |
| ดาวน์โหลดหมดเวลา | เครือข่าย เวลาจำกัดของ worker และความพร้อมของพื้นที่จัดเก็บ | จำกัดการลองใหม่ และขอตำแหน่งใหม่หากสงสัยว่าลิงก์หมดอายุ |
| ดาวน์โหลดได้แต่แยกวิเคราะห์ไม่ได้ | เนื้อหาไฟล์จริงและรูปแบบที่ตัวอ่านรองรับ | ลิงก์ใหม่ไม่แก้เนื้อหาที่เสียหรือรูปแบบที่ไม่รองรับ |
| รับ webhook แล้วแต่ไม่มีไฟล์ในระบบของเรา | งานดาวน์โหลดที่บันทึกถาวรและผลของ worker | การรับอีเวนต์กับการบันทึกไฟล์เป็นคนละขั้นตอน |
ปัจจุบัน เอกสาร API และ Bots FAQ ระบุว่า Bot API ที่ Telegram โฮสต์มีขนาดดาวน์โหลดสูงสุด 20 MB อย่าสับสนกับขีดจำกัดการอัปโหลดหรือความสามารถทั้งหมดของแอป Telegram เอกสาร API ยังระบุว่าการใช้เซิร์ฟเวอร์ Bot API แบบ local ดาวน์โหลดได้โดยไม่มีขีดจำกัดขนาดนี้ แต่นั่นคือการเลือกโครงสร้างพื้นฐาน ไม่ใช่พารามิเตอร์ที่ทำให้ endpoint แบบโฮสต์รับไฟล์ใหญ่ขึ้น
คำว่าอย่างน้อยหนึ่งชั่วโมงคือการรับประกันอายุขั้นต่ำ ไม่ได้ให้รอหนึ่งชั่วโมง และไม่ได้แปลว่าทุกลิงก์จะเสียทันทีเมื่อครบชั่วโมง วิธีที่เอกสารระบุคือเรียก getFile อีกครั้งหลังลิงก์หมดอายุ
บันทึกไฟล์หลังรับข้อมูลอย่างคงทน
ขั้นตอนต่อไปนี้เป็นข้อเสนอด้านสถาปัตยกรรมแอป ไม่ใช่การรับประกันการส่งข้อมูลของ Telegram
- บันทึก update ที่รับมาและเมทาดาทาที่พอสำหรับสร้างงานดาวน์โหลด ทำให้งานถูกเก็บอย่างถาวรก่อนตอบรับการส่ง
- ให้ worker หาตำแหน่งดาวน์โหลดก่อนดึงไฟล์จริง แทนการเก็บ URL จำนวนมากไว้ในคิวจนเก่า
- สตรีมข้อมูลลงพื้นที่ชั่วคราวแบบส่วนตัว พร้อมกำหนดขนาดและเวลาสูงสุดเอง ถือว่าชื่อไฟล์และ MIME type จากผู้ส่งเป็นข้อมูลที่ยังไม่น่าเชื่อถือ
- เปิดใช้งานตัวอ้างอิงไฟล์ในพื้นที่จัดเก็บของคุณหลังดาวน์โหลดและตรวจเนื้อหาเสร็จเท่านั้น อย่าส่งไฟล์ที่ยังไม่สมบูรณ์ไปยังหน้าจอเจ้าหน้าที่หรือกระบวนการ AI
- เมื่อผิดพลาด ให้เก็บเหตุผลที่ปิดบังข้อมูลอ่อนไหวแล้ว และตัดสินใจว่าจะลองใหม่แบบจำกัดหรือไม่ หากกู้คืนไม่ได้ ให้แสดงว่าไฟล์แนบใช้งานไม่ได้ แทนการบอกว่าไม่ได้รับข้อความ
ใช้ชื่อไฟล์หรือ object key ที่แอปสร้างเอง ไม่ใช้พาธที่ผู้ใช้ส่งมาโดยตรง จำกัดปลายทางเครือข่ายของ worker ไม่ส่งต่อข้อมูลรับรองของบริการไปยังโฮสต์ใดก็ได้ และไม่บันทึกข้อมูลรับรองหรือ URL แบบลงลายเซ็นลง log ทั่วไป การตรวจลายเซ็นอีเวนต์ผ่านไม่ได้ยืนยันว่าเอกสารแนบปลอดภัยที่จะเปิด
ควรทดสอบงานที่ล่าช้า ตำแหน่งที่หมดอายุ ไฟล์ใหญ่เกินกำหนด การไม่มีชื่อไฟล์ซึ่งเป็นฟิลด์ไม่บังคับ และ worker หยุดระหว่างบันทึก เกณฑ์ผ่านไม่ใช่แค่ HTTP สำเร็จ แต่บทสนทนาที่ได้รับอนุญาตถูกต้องต้องได้สำเนาที่ใช้ได้หรือสถานะล้มเหลวที่ชัดเจน รายการนี้เป็นการทดสอบที่แนะนำ ไม่ใช่ผลทดสอบจริง
ไฟล์แนบ UnifyPort ใช้ข้อกำหนดการกู้คืนต่างกัน
อินเทอร์เฟซที่ไม่เป็นทางการของ UnifyPort ส่งอีเวนต์ message.received แบบมาตรฐานจากบัญชีรับส่งข้อความที่เชื่อมต่อ เอกสารอีเวนต์มาตรฐาน อธิบาย data.message.attachments[] และ URL ของ OSS แบบลงลายเซ็นชั่วคราว ส่วน คู่มือจับคู่ฟิลด์สื่อ Telegram อธิบายฟิลด์ที่ต้องเก็บ บทความนี้เน้นความพร้อมของไฟล์หลังสร้างงานดาวน์โหลด
สำหรับเส้นทางนี้:
- ตรวจลายเซ็นและบันทึกอีเวนต์อย่างคงทนตาม เอกสารการส่ง webhook แล้วประมวลผล URL ที่ใช้ได้โดยเร็วตามนโยบายเก็บรักษา
- จัดการกรณีไม่มี URL อย่างชัดเจน รูปแบบไฟล์ใหญ่เกินกำหนดตามเอกสารใช้
attachments[].metadata.is_big_fileและละurlอย่าสร้าง URL ขึ้นจากรหัสข้อความ - อย่าสมมติว่าไฟล์แนบมาตรฐานมี
file_idของ Bot API และอย่าส่ง URL นั้นเข้าgetFile - อย่ากำหนดการรับประกันหนึ่งชั่วโมงหรือขีดจำกัด 20 MB ของ Bot API เป็นข้อเท็จจริงของ UnifyPort
เอกสารสาธารณะของ UnifyPort ไม่ได้ระบุ endpoint สำหรับขอ URL ไฟล์แนบใหม่ และระบุว่าไม่มี REST API อ่านประวัติข้อความหรือการรับประกันส่ง payload ที่พลาดไปซ้ำ หาก URL ใช้ไม่ได้และไม่มีสำเนาที่เก็บเอง อย่าสัญญาว่าเชื่อมต่อบัญชีใหม่แล้วจะกู้คืนได้ ให้บันทึกข้อจำกัดและจัดการขอส่งใหม่โดยมีสิทธิ์ที่เหมาะสม หรือให้เจ้าหน้าที่ติดตามเมื่อจำเป็น
คำถามที่พบบ่อย
ใช้ file_unique_id กับ getFile ได้หรือไม่?
ไม่ได้ Telegram ระบุชัดว่าใช้ดาวน์โหลดหรือนำไฟล์กลับมาใช้ไม่ได้ ต้องเก็บ file_id สำหรับขั้นตอนดาวน์โหลด
ลิงก์หมดอายุเมื่อครบหนึ่งชั่วโมงเสมอหรือไม่?
ไม่เสมอ รับประกันเพียงว่าใช้ได้อย่างน้อยหนึ่งชั่วโมง เมื่อหมดอายุให้ขอลิงก์ใหม่ผ่าน getFile
ควรส่ง URL ต้นฉบับให้เบราว์เซอร์หรือบริการ AI หรือไม่?
ควรให้ backend ดาวน์โหลดก่อน แล้วใช้ตัวอ้างอิงพื้นที่จัดเก็บที่ผ่านการตรวจสิทธิ์ของแอป อย่าเผยข้อมูลรับรองหรือกระจาย URL ชั่วคราวแบบลงลายเซ็นเพียงเพื่อแสดงไฟล์แนบ
getFile ต่ออายุ URL ไฟล์แนบ UnifyPort ได้หรือไม่?
ไม่มีข้อกำหนดที่ระบุว่าทำงานร่วมกันแบบนั้นได้ ให้ทำตามเอกสารของแต่ละอินเทอร์เฟซ และอย่าสมมติว่ามีคำสั่งต่ออายุ
ขั้นตอนถัดไปและแหล่งข้อมูล
ตรวจ ข้อกำหนดอีเวนต์ webhook มาตรฐาน แล้วเพิ่มสถานะบันทึกไฟล์สำเร็จและล้มเหลวที่ชัดเจนให้ worker ก่อนเชื่อมต่อระบบอัตโนมัติปลายทาง
ตรวจสอบข้อมูลเมื่อ 2026-09-24
เปลี่ยนการเชื่อมต่อข้อความให้เป็น pipeline ผลิตภัณฑ์ที่เสถียร
เริ่มจากการส่งผ่าน API เดียว แล้วส่งข้อความขาเข้าทั้งหมดกลับสู่ระบบธุรกิจของคุณด้วย event มาตรฐาน