← บทความทั้งหมด
คู่มือ

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

  1. บันทึก update ที่รับมาและเมทาดาทาที่พอสำหรับสร้างงานดาวน์โหลด ทำให้งานถูกเก็บอย่างถาวรก่อนตอบรับการส่ง
  2. ให้ worker หาตำแหน่งดาวน์โหลดก่อนดึงไฟล์จริง แทนการเก็บ URL จำนวนมากไว้ในคิวจนเก่า
  3. สตรีมข้อมูลลงพื้นที่ชั่วคราวแบบส่วนตัว พร้อมกำหนดขนาดและเวลาสูงสุดเอง ถือว่าชื่อไฟล์และ MIME type จากผู้ส่งเป็นข้อมูลที่ยังไม่น่าเชื่อถือ
  4. เปิดใช้งานตัวอ้างอิงไฟล์ในพื้นที่จัดเก็บของคุณหลังดาวน์โหลดและตรวจเนื้อหาเสร็จเท่านั้น อย่าส่งไฟล์ที่ยังไม่สมบูรณ์ไปยังหน้าจอเจ้าหน้าที่หรือกระบวนการ AI
  5. เมื่อผิดพลาด ให้เก็บเหตุผลที่ปิดบังข้อมูลอ่อนไหวแล้ว และตัดสินใจว่าจะลองใหม่แบบจำกัดหรือไม่ หากกู้คืนไม่ได้ ให้แสดงว่าไฟล์แนบใช้งานไม่ได้ แทนการบอกว่าไม่ได้รับข้อความ

ใช้ชื่อไฟล์หรือ 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

UnifyPort API

เปลี่ยนการเชื่อมต่อข้อความให้เป็น pipeline ผลิตภัณฑ์ที่เสถียร

เริ่มจากการส่งผ่าน API เดียว แล้วส่งข้อความขาเข้าทั้งหมดกลับสู่ระบบธุรกิจของคุณด้วย event มาตรฐาน