# วิธีการเก็บรวบรวมข้อมูล

Canonical page: https://phishdestroy.github.io/TgWitness/th/docs/reference/collection/

ขอบเขตการสังเกตการณ์, การอัปเดตแบบเรียลไทม์, การตรวจสอบซ้ำ, ไฟล์แนบ, การดำเนินการของผู้ใช้เอง และความหมายของช่องว่าง (gap) — บันทึกอย่างละเอียดทีละรายการ

TgWitness บันทึกสิ่งที่บัญชี Telegram ที่เชื่อมต่อไว้สังเกตเห็น บันทึกนี้เก็บรักษา การสังเกตเหล่านั้น ลำดับการเกิด และบริบทที่มาพร้อมกับมัน มัน ไม่สันนิษฐานการกระทำที่มองไม่เห็นจากข้อความที่หายไป หรือจากบัญชีที่กำลังเชื่อมต่ออยู่

## ตั้งแต่การเข้าสู่ระบบจนถึงบันทึก

แผนผังกระบวนการ · อนุมัติบัญชีผู้ใช้ → เลือกกลุ่มและช่องที่เข้าถึงได้; เลือกกลุ่มและช่องที่เข้าถึงได้ → บันทึกการตั้งค่าเหตุการณ์และไฟล์แนบ; บันทึกการตั้งค่าเหตุการณ์และไฟล์แนบ → เริ่มการสังเกต; เริ่มการสังเกต → รับข่าวสารล่าสุดจากลูกค้าที่ใช้งานอยู่; รับข่าวสารล่าสุดจากลูกค้าที่ใช้งานอยู่ → ปฏิบัติตามนโยบายเกี่ยวกับแหล่งข้อมูลและเหตุการณ์; ปฏิบัติตามนโยบายเกี่ยวกับแหล่งข้อมูลและเหตุการณ์ → เพิ่มบันทึกการสังเกตที่มีลายเซ็น; เพิ่มบันทึกการสังเกตที่มีลายเซ็น → ตรวจสอบหรือส่งออกบันทึก; เพิ่มบันทึกการสังเกตที่มีลายเซ็น → ประมวลผลไฟล์แนบที่อยู่ในคิว; ประมวลผลไฟล์แนบที่อยู่ในคิว → เพิ่มผลลัพธ์การดาวน์โหลด · อนุมัติบัญชีผู้ใช้ · เลือกกลุ่มและช่องที่เข้าถึงได้ · บันทึกการตั้งค่าเหตุการณ์และไฟล์แนบ · เริ่มการสังเกต · รับข่าวสารล่าสุดจากลูกค้าที่ใช้งานอยู่ · ปฏิบัติตามนโยบายเกี่ยวกับแหล่งข้อมูลและเหตุการณ์ · เพิ่มบันทึกการสังเกตที่มีลายเซ็น · ตรวจสอบหรือส่งออกบันทึก · ประมวลผลไฟล์แนบที่อยู่ในคิว · เพิ่มผลลัพธ์การดาวน์โหลด

**แผนภาพในรูปแบบข้อความ**

1. อนุมัติบัญชีผู้ใช้ → เลือกกลุ่มและช่องที่เข้าถึงได้
2. เลือกกลุ่มและช่องที่เข้าถึงได้ → บันทึกการตั้งค่าเหตุการณ์และไฟล์แนบ
3. บันทึกการตั้งค่าเหตุการณ์และไฟล์แนบ → เริ่มการสังเกต
4. เริ่มการสังเกต → รับข่าวสารล่าสุดจากลูกค้าที่ใช้งานอยู่
5. รับข่าวสารล่าสุดจากลูกค้าที่ใช้งานอยู่ → ปฏิบัติตามนโยบายเกี่ยวกับแหล่งข้อมูลและเหตุการณ์
6. ปฏิบัติตามนโยบายเกี่ยวกับแหล่งข้อมูลและเหตุการณ์ → เพิ่มบันทึกการสังเกตที่มีลายเซ็น
7. เพิ่มบันทึกการสังเกตที่มีลายเซ็น → ตรวจสอบหรือส่งออกบันทึก
8. เพิ่มบันทึกการสังเกตที่มีลายเซ็น → ประมวลผลไฟล์แนบที่อยู่ในคิว
9. ประมวลผลไฟล์แนบที่อยู่ในคิว → เพิ่มผลลัพธ์การดาวน์โหลด

การอนุญาต การเข้าถึงแหล่งข้อมูล ตัวเก็บข้อมูลที่กำลังทำงาน และการส่งข้อมูลที่สมบูรณ์ เป็น เรื่องที่ต่างกัน การเข้าสู่ระบบที่สำเร็จไม่ได้หมายความว่าจะได้รับสิทธิ์เข้าถึงทุกกลุ่ม การเชื่อมต่อระบบขนส่งไม่ได้หมายความว่าทุกการอัปเดตที่เกี่ยวข้องได้ส่งถึงแล้ว

## ขอบเขตการสังเกต: การสนทนาที่เลือกไว้, โฟลเดอร์ หรือบัญชีทั้งหมด

แหล่งข้อมูล → **ขอบเขตการสังเกต**กำหนดว่าพื้นที่ทำงานจะบันทึกการสนทนาใด

| โหมด | บันทึก | การสนทนาใหม่ |
| --- | --- | --- |
| การสนทนาที่เลือก (ค่าเริ่มต้น) | เฉพาะการสนทนาที่คุณเพิ่มด้วยมือเท่านั้น | ไม่เคยถูกเพิ่มอัตโนมัติ |
| โฟลเดอร์ Telegram | การสนทนาในหนึ่งในโฟลเดอร์ของบัญชี: การสนทนาที่รวมไว้ตามชื่อ พร้อมทั้งหมวดหมู่ของโฟลเดอร์ (ผู้ติดต่อ, ผู้ที่ไม่ใช่ผู้ติดต่อ, กลุ่ม, ช่อง, บอท), หักออกจากการสนทนาที่ถูกยกเว้น และหากโฟลเดอร์ระบุไว้ ก็รวมถึงการสนทนาที่ถูกเก็บถาวร | การสนทนาที่ตรงกันจะถูกเพิ่มทันทีที่เริ่มใช้งาน; การสนทนาที่คุณเพิ่มเข้าไปในโฟลเดอร์ใน Telegram จะถูกบันทึกภายในหนึ่งชั่วโมง |
| บัญชีทั้งหมด | ทุกการสนทนาที่บัญชีนี้เห็น | ทุกการสนทนาใหม่ กลุ่มสนทนา การสนทนาส่วนตัว หรือบอท จะถูกเพิ่มเข้ามาทันทีที่มีการอัปเดตครั้งแรก |

- **ประเภทแหล่งข้อมูล** (ช่อง, กลุ่ม, การสนทนาส่วนตัว, บอท) ช่วยจำกัดโหมดโฟลเดอร์และ โหมดบัญชีทั้งหมด การสนทนาที่เลือกสามารถเป็นประเภทใดก็ได้ รวมถึงการสนทนาส่วนตัวและบอท
- **การสนทนาที่ถูก**ยกเว้นจะไม่ถูกบันทึกเลย ไม่ว่าในโหมดใดก็ตาม ในโหมดโฟลเดอร์และโหมดบัญชีทั้งหมด *การคลิก "ยกเว้น"* หรือ *"ลบ"* บนแหล่งข้อมูลจะทำให้แหล่งข้อมูลนั้นถูกเพิ่มเข้าสู่รายชื่อนี้ ดังนั้นระบบจะไม่เพิ่มมันเข้าไปอีกครั้ง การเลือกการสนทนาอีกครั้งด้วยมือ (ในส่วน "แหล่งข้อมูล" หรือจาก "การสนทนา") จะลบการสนทนานั้นออกจากรายชื่อ รายชื่อ สามารถเก็บได้สูงสุด 5,000 การสนทนา; หากเกินจำนวนนี้ *การกด "ลบ"* จะถูกปฏิเสธ และสามารถหยุดการบันทึกการสนทนานั้นแทนได้
- **การดำเนินการของบัญชีนี้** (เปิดโดยค่าเริ่มต้น): ข้อความที่บัญชีนี้ส่ง การแก้ไข และ การกดปุ่มบนคีย์บอร์ดเพื่อตอบกลับ หากปิดไว้ ข้อความที่ส่งออกไปและการแก้ไขจะไม่ถูกบันทึก
- การเปลี่ยนไปยังโฟลเดอร์หรือบัญชีทั้งหมดจะขอการยืนยัน: โหมดเหล่านี้บันทึก การสนทนาส่วนตัวและข้อความของบุคคลที่สาม และควรใช้ในบัญชีเฉพาะเท่านั้น การยืนยันและการเปลี่ยนแปลงขอบเขตทุกครั้งจะถูกบันทึกเป็นบันทึก`scope.changed`ที่ลงนามแล้ว
- การสนทนาที่เพิ่มเข้ามาตามขอบเขตจะปรากฏเป็นแหล่งข้อมูลที่มีเครื่องหมาย *"auto*" และถูกบันทึกเป็น `scope.applied` (เมื่อเริ่มต้นและทุกชั่วโมง) หรือ `source.discovered` (การสนทนาใหม่ระหว่างการเฝ้าสังเกต) การกลับ ไปยังการสนทนาที่เลือกไว้จะทำให้แหล่งข้อมูลที่เพิ่มเข้ามาโดยอัตโนมัติทั้งหมดถูกหยุดชั่วคราว

สิ่งที่โหมดเหล่านี้ไม่สามารถทำได้:

- **การสนทนาแบบลับ (Secret chats)** ได้รับการเข้ารหัสแบบ end-to-end ระหว่างอุปกรณ์สองเครื่อง และไม่เคยส่งถึง TgWitness ในรูปแบบใดก็ตาม
- **ไม่มีการบันทึกข้อมูลใดๆ เมื่อ TgWitness ไม่ทำงาน** หลังจากรีสตาร์ท ระบบจะขอข้อมูลอัปเดตที่พลาดไปจาก Telegram และตรวจสอบการสนทนาใหม่ แต่ Telegram ไม่ส่งข้อมูลทั้งหมดกลับมาหลังจาก การหยุดให้บริการเป็นเวลานาน รายงานและ`verify.py` แสดงช่วงเวลาดังกล่าวเป็นช่องว่าง (ดู[การครอบคลุม](https://phishdestroy.github.io/TgWitness/th/docs/reference/evidence/#coverage-continuity-gaps-and-unobserved-ids))
- ในตอนแรกจะแสดงเพียง 1,000 บทสนทนาแรกเท่านั้น (ขีดจำกัดนี้อยู่ในส่วน **Parameters**); บทสนทนา ที่เก่ากว่าจะถูกเพิ่มเข้ามาเมื่อมีการใช้งานอีกครั้ง ประวัติก่อนหน้านั้นของบทสนทนาที่เพิ่มเข้ามาจะไม่ถูกดึงมา — ให้ทำการ ถ่ายภาพประวัติ (snapshot) หรือส่งออกบทสนทนาทั้งหมดเมื่อจำเป็น
- เงื่อนไขของโฟลเดอร์ที่เปลี่ยนแปลงตลอดเวลา (ปิดเสียง, อ่านแล้ว) จะไม่ถูกนำไปใช้: การสนทนาดังกล่าว ยังคงถูกติดตามต่อไป
- **ปุ่มบอตแบบอินไลน์ (callback)** ที่ถูกกดในแอปอื่นจะไม่ปรากฏในเซสชัน ที่สอง; การตอบกลับหรือการแก้ไขของบอตจะถูกบันทึกไว้ การกดปุ่มบนคีย์บอร์ดเพื่อตอบกลับจะส่งออกไป ในฐานะข้อความขาออก และถูกติดป้ายว่า `button_press`
- การสนทนาที่มากขึ้นหมายถึงคำขอที่มากขึ้น Telegram จะจำกัดบัญชีสำหรับปริมาณที่พิจารณาว่า เกินความจำเป็น ซึ่งเป็นเหตุผลอีกหนึ่งในการใช้บัญชีเฉพาะ

## ขอบเขตและวิธีการเลือกเหตุการณ์

แต่ละพื้นที่ทำงานมีแหล่งข้อมูลของตัวเอง TgWitness ไม่เข้าร่วมกลุ่ม ไม่รับ คำเชิญ หรือระบุสมาชิกทุกคนโดยอัตโนมัติ แหล่งข้อมูลต้องเป็น แหล่งที่บัญชีดังกล่าวสามารถเข้าถึงได้อยู่แล้ว เมื่อเริ่มต้นทำงาน ตัวเก็บข้อมูลจะตรวจสอบแหล่งข้อมูลที่เลือก เทียบกับบทสนทนาที่บัญชีสามารถมองเห็นได้; บทสนทนา 1,000 รายการแรกจะถูกตรวจสอบ เว้นแต่ในส่วน **Parameters → Chats read from the account’s list** จะกำหนดไว้เป็นอย่างอื่น แหล่งข้อมูลที่ขาดหายไปจะถูกทำเครื่องหมายว่า "**การเข้าถึงยังไม่ได้รับการยืนยัน**" และไม่ถือว่าแหล่งข้อมูลนั้นได้ลบคุณออกจากรายชื่อ

| บริบท | รวบรวม | ผลเมื่อปิดใช้งาน |
| --- | --- | --- |
| ข้อความใหม่ | ข้อความที่ส่งไปทั่วไป | การแก้ไขหรือการลบข้อความในภายหลังอาจไม่มีข้อความที่บันทึกไว้ก่อนหน้านี้เพื่อเปรียบเทียบ |
| การแก้ไข | ส่งเวอร์ชันข้อความที่ได้รับการแก้ไข | การเปลี่ยนแปลงระหว่างขั้นตอนจะไม่ถูกสร้างขึ้นใหม่ในภายหลัง |
| การลบ | แจ้งการลบที่อยู่ในขอบเขตการตรวจสอบ และแจ้งการลบที่ไม่อยู่ในขอบเขตการตรวจสอบระดับบัญชี | การแจ้งเตือนการลบข้อความจะไม่ถูกเพิ่มเข้าไปในบันทึกหลักฐาน |
| ปฏิกิริยา | ส่งภาพถ่ายหน้าจอแสดงปฏิกิริยา | ไม่มีการเพิ่มอัปเดตปฏิกิริยาแยกต่างหาก |
| การเป็นสมาชิก | ส่งข้อความบริการสมาชิกและอัปเดตข้อมูลผู้เข้าร่วม | ข้อสังเกตเกี่ยวกับสมาชิกดังกล่าวไม่ได้ถูกเพิ่มเข้าไป |

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

บันทึกการดำเนินงานและเหตุการณ์บริการกลุ่มอื่น ๆ ยังคงแยกต่างหากจาก สวิตช์เหล่านี้ ข้อความบริการสมาชิกสามารถสร้างบันทึกข้อความได้เมื่อ การเป็นสมาชิกถูกเปิดใช้งาน แม้ว่าการบันทึกข้อความใหม่แบบปกติจะถูกปิดใช้งานก็ตาม วัตถุ Telegram ที่ถูกบันทึกจะรักษาข้อมูลเมตาดาต้าที่ฝังไว้; สวิตช์ไม่ใช่กฎการลบข้อมูล

**การลบข้อความในแชทส่วนตัวและกลุ่มทั่วไปจะปรากฏเป็น** ID ข้อความโดยไม่มีข้อมูลแชท แชทเหล่านี้ใช้ลำดับ ID ข้อความเดียวกันสำหรับทั้งบัญชี ดังนั้นเมื่อข้อความที่มี ID ดังกล่าว ถูกบันทึกไว้ก่อนหน้านี้ แชทที่เกี่ยวข้องก็จะถูกระบุ: การลบข้อความจะถูกบันทึกในแชทนั้นพร้อม `chat_resolution` ที่อธิบายวิธีการ ID ที่ไม่เคยถูกบันทึกจะยังคงเป็นการ**ลบที่ไม่มีขอบเขต** พร้อม แหล่งที่มาที่ไม่ทราบอย่างชัดเจน; ระบบเก็บข้อมูลไม่ทำการคาดเดา Telegram ไม่เคยระบุว่าใครเป็นผู้ลบ ข้อความ; เมื่อข้อความที่ถูกลบถูกส่งจากบัญชีนี้ บันทึกจะระบุเช่นนั้น (`deleted_message_was_outgoing`) โดยไม่ระบุชื่อผู้ลบ

## การดำเนินการของตนเอง

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

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

## โหมดการสืบสวน: การเข้าร่วมทีมและการสนทนากับบอท

**แหล่งข้อมูล → ขอบเขตการสังเกต → โหมดการสืบสวน** จะเตรียมขอบเขตสำหรับบัญชีเฉพาะ ที่เข้าร่วมการสนทนาในกลุ่มทีม, เปิดใช้งานบอท และส่งข้อความไปยังบอทเหล่านั้น: บัญชีทั้งหมด, ทุก ประเภทแหล่งข้อมูล, การดำเนินการของตนเอง, และสำหรับทุกการสนทนาหรือบอทที่ปรากฏขึ้น จะแสดงโปรไฟล์และ ข้อความ 200 ข้อความล่าสุดที่มองเห็นได้ ตรวจสอบแบบฟอร์มและกด "**บันทึกขอบเขต"**; การเปลี่ยนไปใช้ บัญชีทั้งหมดจะขอการยืนยันตามปกติ

- **ปุ่มต่างๆ** ปุ่มที่อยู่ใต้ข้อความจะถูกรักษาไว้พร้อมกับข้อความและแสดงใน**ส่วน Chats**: ลิงก์, เว็บ แอป, ลิงก์เข้าสู่ระบบ, ข้อความเพื่อคัดลอก, ข้อมูล callback, การค้นหาในข้อความ, การขอ หมายเลขโทรศัพท์หรือตำแหน่ง ลิงก์จะแสดงเป็นข้อความและไม่ถูกเปิดโดยแผงควบคุม เมื่อบอท เปลี่ยนแปลงเฉพาะปุ่ม (ลิงก์การชำระเงินใหม่) นั่นถือเป็นเวอร์ชันใหม่ของข้อความ ทั้ง จากการอัปเดตแบบเรียลไทม์และจากการตรวจสอบซ้ำ
- **การสนทนาและบอตใหม่** ในโหมดโฟลเดอร์และโหมดบัญชีทั้งหมด **เมื่อการสนทนาหรือบอตใหม่ ปรากฏขึ้น** จะถูกบันทึกทันทีหลังจากที่มันปรากฏ:

  - โปรไฟล์ในรูปแบบบันทึก`source.profile`: คำอธิบายและคำสั่งของบอท, ข้อความ "เกี่ยวกับ" ของผู้ใช้ กลุ่ม หรือช่อง, สมาชิก, การสนทนาที่เชื่อมโยง และลิงก์เชิญเมื่อ Telegram ส่งคืน ลิงก์ดังกล่าว;
  - ข้อความล่าสุดที่มองเห็นได้ (สูงสุด 1,000 ข้อความ) ในรูปแบบภาพถ่ายประวัติที่มีเครื่องหมาย`new_chat`: ข้อความก่อนหน้าของห้องแชทกลุ่มที่เพิ่งเข้าร่วม หรือสิ่งที่บอทพูดก่อนที่ระบบสังเกตการณ์ จะตรวจพบห้องแชทนั้น ข้อความที่บันทึกไว้แบบเรียลไทม์แล้วจะไม่ถูกบันทึกซ้ำ

  การสนทนาที่อยู่ในรายชื่อแล้วเมื่อเปิดโหมดนี้จะถูกเพิ่มเข้าไปโดยไม่มีการถ่ายภาพหน้าจอ FloodWait จะหยุดการทำงานนี้ชั่วคราวและจะดำเนินการต่อหลังจากนั้น; ความล้มเหลวจะถูกบันทึกไว้และการบันทึก การสนทนาแบบเรียลไทม์จะดำเนินต่อไป - **โปรไฟล์ตามคำขอ การเลือก Chats → Profile → Save profile**จะบันทึกโปรไฟล์ปัจจุบัน ของแหล่งข้อมูลใดก็ตาม; โปรไฟล์ล่าสุดจะแสดงอยู่ด้านบนข้อความ - **ไม่ปรากฏให้เห็น** ปุ่มในไลน์ (callback) ที่ถูกกดในแอป Telegram อื่น หน้าต่างป๊อปอัพ หรือ ลิงก์ที่บอทตอบกลับเมื่อถูกกด รวมถึงลิงก์เชิญที่ใช้ในแอปอื่น จะไม่ส่งถึง TgWitness สิ่งที่บอทส่งหรือแก้ไขหลังจากนั้นจะถูกบันทึกไว้

### การดำเนินการจากคณะผู้อภิปราย

**ส่วน "Chats"** ตอนนี้ได้เพิ่มมินิ-ไคลเอนต์ที่ใช้บัญชี Telegram ของพื้นที่ทำงานที่เลือกไว้:

- เขียนข้อความแบบข้อความธรรมดา หรือเลือก **"Reply" (**ตอบกลับ) ใต้ข้อความที่บันทึกไว้ ข้อความที่ส่งออกไป จะถูกบันทึกไว้ แม้เมื่อตั้งค่าให้ไม่บันทึกการอัปเดตข้อความที่ส่งออกไป
- กด**ปุ่ม "Press"** ใต้ปุ่ม callback หรือปุ่มข้อความปัจจุบัน เซิร์ฟเวอร์จะดึง ข้อความมาอีกครั้งและปฏิเสธการดำเนินการหากข้อความที่ป้อนไม่ตรงกับเวอร์ชันที่บันทึกไว้ ใบยืนยันการรับข้อความ callback จะเก็บข้อความป๊อปอัพ ธงแจ้งเตือน และ URL ของ Telegram ไว้; คำตอบจะแสดง อยู่ใต้บทสนทนาด้วย URL ยังคงเป็นข้อความที่เลือกได้และไม่เปิดอัตโนมัติ
- คลิก "**Open Telegram link**" (เปิดลิงก์ Telegram), ป้อน `@username`, ลิงก์สาธารณะ `https://t.me/name`, `https://t.me/+invite` / `joinchat/invite` หรือลิงก์บอทที่มี `?start=parameter` แล้วคลิก **"Save preview**" (บันทึกตัวอย่าง) ลิงก์ต้นฉบับและตัวอย่างของ Telegram จะถูกลงนามก่อนการเข้าร่วม **การเข้าร่วม / เปิดและ**สังเกตการณ์จะนับเป็นการเข้าร่วมกลุ่ม/ช่อง หรือเปิดผู้ใช้/บอท เพิ่ม การสนทนาเป็นแหล่งข้อมูลที่เปิดใช้งาน และส่ง`/start` ไปยังบอท พร้อมทั้งพารามิเตอร์เริ่มต้น คำขอเข้าร่วมที่รอการอนุมัติจากผู้ดูแลระบบจะถูกบันทึกเป็น "รอการอนุมัติ" ไม่ใช่ "สมาชิก"

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

`interaction.preview`, `interaction.requested` และ `interaction.result` เป็นเหตุการณ์ในบันทึก ที่ลงนามแล้วซึ่งรวมอยู่ในการส่งออกหลักฐาน คำขอระบุบัญชี ข้อความ/ปุ่ม หรือบันทึกตัวอย่าง และระบุว่ากำลังดำเนินการสังเกตการณ์อยู่หรือไม่ ใบตอบรับแยกแยะระหว่างความสำเร็จ การปฏิเสธ การรอการอนุมัติ และผลลัพธ์ที่ไม่ทราบ คำขอที่ถูกขัดจังหวะอาจได้ส่งถึง Telegram แล้ว: ตรวจสอบแชทก่อนเริ่มดำเนินการใหม่ การใช้ ID คำขอซ้ำจะเรียกคืน ใบยืนยันที่บันทึกไว้โดยไม่ต้องทำซ้ำการดำเนินการ รวมถึงหลังการรีสตาร์ท แผงควบคุมจะเก็บรักษา ID ไว้หลังจากได้รับคำตอบที่ไม่ชัดเจนสำหรับการดำเนินการเดียวกันในเซสชันหน้าปัจจุบัน นอกจากนี้ยังเก็บรักษา ID นั้นไว้เมื่อการรีเฟรชหน้าล้มเหลวหลังการดำเนินการสำเร็จ: ใบยืนยัน จะยังคงแสดงอยู่ และการคลิกอีกครั้งจะเรียกคืนมัน RPC แบบ callback และ join มีโอกาส ลองเพียงครั้งเดียว; ส่วนการอ่านที่สามารถลองใหม่ได้จะรักษานโยบายการลองใหม่ที่ตั้งค่าไว้ การเปลี่ยนแชททันที จะลบร่างข้อความและเป้าหมายการตอบกลับ และปิดการส่งข้อความจนกว่าการสนทนาใหม่จะโหลดเสร็จ

มินิ-ไคลเอนต์นี้จัดการปุ่มข้อความและปุ่ม callback ได้ แอปเว็บ คำขอเข้าสู่ระบบ/หมายเลขโทรศัพท์/ตำแหน่ง การชำระเงิน การค้นหาในข้อความ และไฟล์แนบ ยังคงต้องใช้ไคลเอนต์ Telegram; ข้อมูลเมตาดาต้าของปุ่มที่บันทึกไว้ ยังคงแสดงอยู่ องค์ประกอบการควบคุมใหม่ใช้ข้อความภาษาอังกฤษ

## ตรวจสอบระดับใหม่

การตรวจสอบซ้ำจะขอข้อมูลจาก Telegram อีกครั้งสำหรับข้อความที่พลาดไป การแก้ไข และข้อความที่ Telegram ไม่ส่งกลับมาอีก แหล่งข้อมูลที่มีเครื่องหมายดาวเป็นแหล่งข้อมูลลำดับความสำคัญ ซึ่งจะถูกตรวจสอบซ้ำทุก 15 นาทีตามค่าเริ่มต้น; แหล่งข้อมูลอื่น ๆ ทั้งหมดจะถูกตรวจสอบซ้ำทุก 6 ชั่วโมง การสนทนาที่เลือกไว้จะเริ่มต้นเป็นแหล่งข้อมูลลำดับความสำคัญ ส่วนการสนทนาที่เพิ่มผ่าน โฟลเดอร์หรือบัญชีทั้งหมดจะเริ่มต้นเป็นแหล่งข้อมูลปกติ ตรวจสอบซ้ำได้สูงสุด 30 แหล่งต่อรอบ และ ส่วนที่เหลือจะรอจนถึงนาทีถัดไป; หลังจากเชื่อมต่อใหม่ แหล่งข้อมูลลำดับความสำคัญจะได้รับการตรวจสอบก่อน ทั้ง สองช่วงเวลาถูกตั้งค่าไว้ที่ แหล่งข้อมูล → การตั้งค่าการบันทึก → ตรวจสอบซ้ำ (0 จะปิดระดับนั้น) และถูก บันทึกเป็น `recheck.changed`

ข้อความที่พลาดจะถูกดึงขึ้นจากจุดที่รอบการตรวจสอบครั้งก่อนหยุดไว้ โดยจำนวนสูงสุดคือตามการตั้งค่าใน **Parameters → new messages per recheck** (ค่าเริ่มต้นคือ 1,000) ต่อรอบ หลังจากหยุดไปนาน การตรวจสอบซ้ำจึงจะเติมเต็มช่องว่างทั้งหมด แม้ข้อความสดที่ใหม่กว่าช่วงช่องว่างนั้นจะถูกบันทึก ไว้ก่อนก็ตาม การสนทนาที่ยังกำลังตามทันจะถูกตรวจสอบซ้ำอีกครั้งในนาทีถัดไป แทนที่จะ รอจนถึงช่วงเวลาที่กำหนด; `recheck.completed` จะแสดง `continues_after` จนกว่าจะเสร็จสิ้น

การเปรียบเทียบรวมถึงข้อความของข้อความ, เอนทิตี, แป้นพิมพ์ (รวมถึงการลบ), และ เนื้อหา/ข้อมูลระบุตัวตนของไฟล์แนบ การเปลี่ยนแปลงแฮชการเข้าถึงไฟล์หรือการอ้างอิงไฟล์เพียงอย่างเดียวไม่ถือเป็นการ แก้ไข เช่นเดียวกับข้อมูลที่ Telegram เติมเข้าไปเอง: การโหลดตัวอย่างลิงก์, การดูสตอรี, สื่อแบบชำระเงิน ที่บัญชีนี้ปลดล็อก, หรือใบเสร็จรับเงินใบแจ้งหนี้ แต่ละเวอร์ชันที่บันทึกไว้ใน Chats จะเชื่อมโยงไปยังบันทึกสมุดบันทึกฉบับเต็ม รวมถึงเมตาดาต้าของสื่อ

## ประวัติข้อความและที่มา

สมมติว่าผู้เก็บข้อมูลสังเกตเห็นข้อความ “ประชุมเวลา 10:00” ต่อมาเห็นข้อความ “ประชุมเวลา 11:00” และจากนั้นได้รับแจ้งการลบข้อความ ระบบจะบันทึกการสังเกตสามรายการที่แยกกัน โดย ข้อความต้นฉบับยังคงอยู่ การแก้ไขถือเป็นเวอร์ชันที่แยกต่างหาก และแจ้งเตือนบันทึกว่า มีการสังเกตเห็นการลบข้อความ

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

ผู้ส่งข้อความไม่จำเป็นต้องเป็นผู้แก้ไขโดยอัตโนมัติ Telegram โดยทั่วไปไม่ ให้ข้อมูลเกี่ยวกับบุคคลที่ลบข้อความหรือเวลาที่ลบข้อความอย่างแม่นยำ ผู้กระทำที่ไม่ทราบตัวตน จะยังคงไม่ทราบตัวตน ภาพถ่ายหน้าจอของปฏิกิริยาและการอัปเดตของผู้เข้าร่วมมีเพียงจำนวน และข้อมูลประจำตัวที่ Telegram แสดงให้บัญชีนั้นเห็นเท่านั้น

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

## ภาพถ่ายประวัติ

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

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

## การจัดการไฟล์แนบ

การดาวน์โหลดไฟล์แนบถูกเปิดไว้โดยค่าเริ่มต้น และจะหยุดชั่วคราวเมื่อพื้นที่ดิสก์ว่างเหลือน้อยกว่า 1 GiB ผู้รวบรวมจะบันทึก การสังเกตข้อความและงานดาวน์โหลดพร้อมกัน งานนี้รักษาตัวระบุสื่อต้นฉบับ และนโยบายขนาดไว้ ดังนั้นไฟล์แนบที่ได้รับการแก้ไขในภายหลังจะไม่ถูกแทนที่โดยอัตโนมัติ

การดาวน์โหลดจะดำเนินการหลังจากจับข้อความได้ การดาวน์โหลดที่เสร็จสิ้นจะสร้างบันทึก`media.saved` พร้อมด้วย SHA-256 และจำนวนไบต์ งานที่ถูกข้ามไป ล้มเหลว ลองใหม่ และถูกขัดจังหวะ จะมีผลลัพธ์ที่แยกกัน งานที่อยู่ในคิวไม่ใช่หลักฐานว่าไฟล์นั้นได้รับการเก็บรักษาไว้ ไฟล์ที่เสร็จสมบูรณ์ต้องตรงกับจำนวนไบต์ในตัวระบุไฟล์แนบต้นฉบับที่สังเกตได้ การตอบกลับที่สั้นหรือยาวกว่าที่คาดไว้จะไม่ถูกบันทึกเป็นสื่อที่ได้รับการเก็บรักษา

มีการกำหนดขีดจำกัด**ตามประเภท**: รูปภาพ, วิดีโอ, GIF และภาพเคลื่อนไหว, ข้อความวิดีโอแบบวงกลม, ข้อความเสียง, เพลงและเสียง, สติกเกอร์ และไฟล์ แต่ละประเภทสามารถปิดได้และมี ขีดจำกัดขนาดของตัวเองตั้งแต่ 1 ถึง 2,000 MiB; พื้นที่ทำงานใหม่เริ่มต้นด้วย 20 MiB สำหรับรูปภาพ, 100 MiB สำหรับวิดีโอ, 50 MiB สำหรับไฟล์, เสียง และวิดีโอแบบวงกลม, 20 MiB สำหรับข้อความเสียงและ GIFs และ 5 MiB สำหรับสติกเกอร์ การตั้งค่า*ขนาดไฟล์*สูงสุดจะกำหนดทุกประเภทพร้อมกัน นโยบายที่บันทึกไว้ก่อน การกำหนดขีดจำกัดตามประเภทจะยังคงใช้ขีดจำกัดเดียวสำหรับทุกประเภท ประเภทที่ถูกปิดจะสร้าง บันทึก `media.skipped`; ไฟล์ที่มีขนาดไม่ทราบหรือเกินขนาดจะไม่ถูกดาวน์โหลด ไฟล์ขนาดใหญ่จะได้รับการ ความเร็วการดาวน์โหลดอย่างน้อย 256 KiB/s งานจะยังคงอยู่หลังการรีสตาร์ท แต่การอ้างอิงที่หมดอายุ การสูญเสีย สิทธิ์การเข้าถึง หรือไฟล์ที่ถูกลบ อาจยังคงทำให้ไม่สามารถกู้คืนได้ งานที่มีอยู่จะรักษานโยบายที่บันทึก ไว้พร้อมกับงานนั้น

## หยุดชั่วคราว, ล็อก, ตัดการเชื่อมต่อ และเริ่มต้นใหม่

| การดำเนินการหรือเงื่อนไข | ผลลัพธ์ |
| --- | --- |
| เปลี่ยนพื้นที่ทำงาน | เปลี่ยนมุมมองของแผง; เครื่องมือเก็บข้อมูลอื่น ๆ จะรักษาสถานะเดิมไว้ |
| ล็อกแผงควบคุมหรือปิดแท็บ | ทำให้เซิร์ฟเวอร์และระบบการสังเกตการณ์ยังคงทำงานต่อไป |
| หยุดการสังเกต | หยุดการทำงานของตัวเก็บรวบรวมและรักษาไฟล์แนบที่อยู่ในคิว |
| ปิดใช้งานแหล่งข้อมูล | หยุดการบันทึกข้อมูลในอนาคตตามขอบเขตที่กำหนด; งานสื่อที่อยู่ในคิวจะรอจนกว่าเครื่องมือนี้ถูกปิดใช้งาน |
| ลบแหล่งข้อมูล | ระบบจะลืมแหล่งข้อมูลนี้และลบโปรไฟล์ผู้ใช้ที่เกี่ยวข้อง; ข้อมูลที่บันทึกไว้แล้วจะยังคงอยู่ในบันทึกแบบเพิ่มข้อมูลเท่านั้น (append-only journal) ส่วนไฟล์แนบที่ยังรอการบันทึกจะถูกลงบันทึกว่าล้มเหลว (`source_removed`) ในโหมดโฟลเดอร์และโหมดบัญชีทั้งหมด ข้อมูลเหล่านี้ก็จะถูกยกเว้นเช่นกัน |
| เปลี่ยนเส้นทางเชื่อมต่อ | จำเป็นต้องหยุดชั่วคราว ปิดแอปพลิเคชันเก่า และยกเลิกการเข้าสู่ระบบที่ยังไม่เสร็จสิ้น |
| หยุดกระบวนการ Python | หยุดการทำงานของทุกพื้นที่ทำงาน; ไม่มีการบันทึกข้อมูลใดๆ เมื่อระบบอยู่ในสถานะออฟไลน์ |
| เริ่มต้นใหม่หลังการสังเกตการณ์อย่างจริงจัง | ระบบจะพยายามต่อจากขอบเขตที่บันทึกไว้โดยใช้เซสชันที่บันทึกไว้ การหยุดชั่วคราวแบบแมนนวลจะยกเลิกความตั้งใจดังกล่าว |

เครื่องมือเก็บข้อมูลจะบันทึกการตัดการเชื่อมต่อที่ตรวจพบ การลองใหม่ ข้อผิดพลาด การเริ่ม/หยุด และ สัญญาณชีพจร การตรวจสอบการเชื่อมต่อแบบเป็นช่วงอาจพลาดการหยุดชะงักสั้นๆ ได้ หลังการรีสตาร์ท ระบบจะขออัปเดตที่พลาดไปจากตำแหน่งอัปเดตที่บันทึกไว้ และ ตรวจสอบการสนทนาที่สังเกตเห็นอีกครั้งเป็นระยะ ๆ; ดู[รูปแบบหลักฐาน](https://phishdestroy.github.io/TgWitness/th/docs/reference/evidence/#durable-collection-and-process-receipts-02) สแนปช็อตให้บริบท; แต่มันไม่ได้พิสูจน์ว่าช่องว่างนั้นได้รับการแก้ไขแล้ว

## การแยกบัญชีและการตรวจสอบ

แต่ละพื้นที่ทำงานมีบันทึกการตรวจสอบ (journal) การอนุญาต (authorization) กุญแจการลงนาม (signing key) นโยบาย (policy) และคิว (queue) ของตัวเอง มีเพียงไคลเอนต์ที่ใช้งานอยู่เท่านั้นที่สามารถส่งข้อมูลการสังเกตแบบเรียลไทม์ได้ ไคลเอนต์ที่ถูกปฏิเสธ (rejected) อยู่ระหว่างการพิจารณา (pending) ถูกแทนที่ (superseded) และไคลเอนต์ที่ทดสอบการเชื่อมต่อ (connection-test) ไม่สามารถเขียนข้อมูลอัปเดตแบบเรียลไทม์ลงในบันทึกการตรวจสอบได้ บัญชีต่าง ๆ สามารถสังเกตกลุ่มเดียวกันได้ แต่บันทึกการตรวจสอบของแต่ละบัญชีจะยังคงแยกกัน

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

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

ลายเซ็นที่ถูกต้องจะยืนยันความสมบูรณ์ของข้อมูลเมื่อเทียบกับกุญแจที่เชื่อถือได้ ไม่ใช่ แหล่งที่มาของ Telegram หรือความถูกต้องของเนื้อหา เก็บรักษาลายนิ้วมือและจุดตรวจสอบอย่างอิสระ ดู [แบบจำลองหลักฐาน](https://phishdestroy.github.io/TgWitness/th/docs/reference/evidence/) [การดำเนินงานประจำวัน](https://phishdestroy.github.io/TgWitness/th/docs/reference/operations/) และ [ขั้นตอนการรับข้อมูลแบบเรียลไทม์](https://github.com/phishdestroy/TgWitness/blob/main/docs/internal/LIVE_ACCEPTANCE.md) เพื่อทราบข้อกำหนดด้านความเชื่อถือและการส่งมอบ
