ระบบรับ–ส่งเอกสารภายในหน่วยงานผ่านเว็บ ส่งเอกสารถึงทั้งแผนกหรือเลือกผู้รับรายคน ผู้รับดาวน์โหลดเพื่อลงชื่อรับ ผู้ส่งตรวจได้ว่าใครรับแล้วบ้าง พร้อมแจ้งเตือนทางอีเมล LINE และ Telegram
รุ่น 7.0.4 · PHP 7.4+ · MySQL / MariaDB · MIT License
English — A web-based document circulation system for organisations. Send a document to whole departments or to chosen members; recipients download it to sign for receipt, and the sender sees who has received it. Notifications by e-mail, LINE and Telegram. Built on Now.js (front-end) and Kotchasan (PHP back-end). Upgrades E-Document 6.x sites in place, keeping their data. Documentation is in Thai.
| หน้า | ทำอะไรได้ |
|---|---|
| ส่งเอกสาร | แนบไฟล์ (ชนิดและขนาดตามที่ตั้งค่า) · เลขที่เอกสารออกให้อัตโนมัติหรือกรอกเอง (ตรวจเลขซ้ำ) · ความเร่งด่วน ด่วนมาก/ด่วน/ปกติ · เรื่อง (เว้นว่างจะใช้ชื่อไฟล์) · รายละเอียด |
| ผู้รับ | เลือกแผนก (ทุกคนในแผนกได้รับ) และ/หรือค้นเลือกสมาชิกรายคนจากชื่อหรืออีเมล · ไม่รวมผู้ส่งและสมาชิกที่ถูกระงับ |
| แจ้งเตือนผู้รับ | อีเมล · LINE · Telegram (ช่องทางที่ตั้งค่าไว้) เลือกได้ทุกครั้งที่ส่ง |
| เอกสารขาเข้า | เอกสารที่ส่งถึงตัวเอง · กรองตามความเร่งด่วนและผู้ส่ง · ค้นจากเรื่องหรือเลขที่ · ป้ายเอกสารใหม่/รับแล้ว · ดูรายละเอียด |
| ลงชื่อรับ | การดาวน์โหลดถือเป็นการลงชื่อรับ (ระบบถามยืนยันก่อน) และนับจำนวนครั้งที่ดาวน์โหลด |
| เอกสารขาออก | เอกสารที่ตัวเองส่ง (ผู้จัดการงานสารบรรณเห็นทุกฉบับ) · ดาวน์โหลด · แก้ไข · ลบทีละหลายรายการ |
| ผู้รับ–ประวัติการดาวน์โหลด | รายชื่อผู้รับทุกคนของเอกสาร พร้อมแผนก วันที่รับ และจำนวนครั้งที่ดาวน์โหลด |
| หน้าแรก | การ์ดจำนวนเอกสารใหม่ที่ยังไม่ได้รับ |
| ตั้งค่าโมดูล | คำนำหน้าและรูปแบบเลขที่ · ชนิดไฟล์ที่อัปโหลดได้ · ขนาดไฟล์สูงสุด · เมื่อคลิกดาวน์โหลดให้ดาวน์โหลดหรือเปิดไฟล์ที่รู้จัก (PDF รูปภาพ) ในเบราว์เซอร์ |
แก้ไขเอกสารที่ส่งไปแล้วได้โดยไม่เสียประวัติ ผู้รับเดิมที่ยังอยู่ในรายชื่อคงจำนวนการดาวน์โหลดไว้ ไฟล์ของเอกสารส่งให้เฉพาะผู้รับ ผู้ส่ง และผู้จัดการงานสารบรรณ ลิงก์ที่หลุดไปจึงเปิดด้วยบัญชีอื่นไม่ได้
| กลุ่ม | รายละเอียด |
|---|---|
| สมาชิก | เข้าสู่ระบบ · สมัคร · ยืนยันอีเมล · ลืม/ตั้งรหัสผ่านใหม่ · โปรไฟล์ · ล็อกบัญชีเมื่อเดารหัสผ่านผิดซ้ำ |
| เข้าสู่ระบบด้วยบัญชีอื่น | Google · Facebook · LINE · Telegram |
| องค์กร | แผนก · สถานะสมาชิก · กำหนดสิทธิ์รายสถานะและรายคน |
| หน้าตั้งค่า | ทั่วไป · ข้อมูลหน่วยงาน · ธีม · อีเมล (SMTP) · API · LINE · Telegram · SMS · AI · ภาษา · ประวัติการเข้าระบบและการใช้งาน |
| หลายภาษา | ไทย/อังกฤษ · แก้คำแปลผ่านหน้าเว็บได้ |
| PWA | ติดตั้งเป็นแอปบนมือถือ/เดสก์ท็อปได้ |
| ความปลอดภัย | CSRF ทุกคำขอที่แก้ข้อมูล · รหัสผ่าน bcrypt · Content-Security-Policy · ไฟล์ภายในถูกกันด้วย .htaccess |
| สิทธิ์ | ได้อะไร |
|---|---|
| สมาชิกทุกคน | เอกสารขาเข้า · ลงชื่อรับเอกสาร |
สามารถอัปโหลดไฟล์เอกสารได้ (งานสารบรรณ) · can_upload_edocument |
ส่งเอกสาร · เอกสารขาออกของตัวเอง · แก้ไข/ลบ/ดูผู้รับของเอกสารที่ตัวเองส่ง |
สามารถจัดการ งานสารบรรณ · can_handle_all_edocument |
เห็น แก้ไข ลบ และดูผู้รับของเอกสารทุกฉบับ |
สามารถตั้งค่า ระบบ · can_config |
หน้าตั้งค่าโมดูลงานสารบรรณและหน้าการตั้งค่าอื่น ๆ |
ผู้ดูแลระบบได้ทุกสิทธิ์ · กำหนดสิทธิ์ที่เมนู การตั้งค่า › สิทธิ์การใช้งาน หรือแก้ไขผู้ใช้รายคนที่เมนู ผู้ใช้ ชื่อสิทธิ์เป็นชื่อเดียวกับรุ่น 6.x สมาชิกเดิมไม่ต้องตั้งสิทธิ์ใหม่หลังปรับรุ่น
| ขั้นต่ำ | |
|---|---|
| PHP | 7.4 ขึ้นไป · ส่วนขยาย mbstring zlib xml gd และ PDO MySQL |
| ฐานข้อมูล | MySQL 5.5.3+ หรือ MariaDB 5.5+ (รองรับ utf8mb4) |
| เว็บเซิร์ฟเวอร์ | Apache + mod_rewrite (มี .htaccess มาให้) หรือ Nginx ที่เขียนกฎ rewrite เทียบเท่า |
รัน PHP ผ่าน php-fpm ต้องเปิด
CGIPassAuth On(Apache 2.4.13+) ไม่งั้นหัวAuthorizationถูกตัดทิ้งก่อนถึง PHP แล้วทุก API ตอบ 401 —.htaccessที่ให้มา มีทั้งCGIPassAuthและกฎสำรองไว้แล้ว
-
ดาวน์โหลดหรือ clone แล้วอัปโหลดไฟล์ทั้งหมดขึ้นเซิร์ฟเวอร์
git clone https://github.com/goragodwiriya/edocument.git
-
ให้เว็บเซิร์ฟเวอร์เขียนโฟลเดอร์ของโปรเจ็คได้ ตัวติดตั้งจะสร้าง
settings/และdatas/ให้เอง (สองโฟลเดอร์นี้ไม่อยู่ใน repo) หรือสร้างไว้เองแล้วตั้งให้เขียนได้ -
สร้างฐานข้อมูลเปล่า (แนะนำ charset
utf8mb4) -
เปิด
https://โดเมนของคุณ/install/แล้วทำตามขั้นตอนขั้น ทำอะไร 0 ตรวจความพร้อมของเซิร์ฟเวอร์ 1 ตรวจโฟลเดอร์ที่ต้องเขียนได้ 2 ตั้งบัญชีผู้ดูแลระบบ 3 ใส่ค่าเชื่อมต่อฐานข้อมูล 4 สร้างตาราง นำเข้าคำแปล เสร็จ -
ลบโฟลเดอร์
install/ออกเมื่อติดตั้งเสร็จ -
เข้าสู่ระบบด้วยบัญชีผู้ดูแลที่ตั้งไว้ในขั้นที่ 2
ระบบที่ติดตั้งใหม่มีแผนกตัวอย่าง 3 แผนก และเอกสารตัวอย่าง 5 ฉบับ (เลขที่ SAMPLE-0001–0005)
ส่งถึงผู้ดูแลระบบ ให้ลองเปิดดูเอกสารขาเข้า ขาออก และหน้าผู้รับได้ทันที เอกสารตัวอย่างไม่มีไฟล์แนบ
กดดาวน์โหลดจะแจ้งว่าไม่พบไฟล์ ลบทิ้งได้จากหน้าเอกสารขาออก
- การตั้งค่า › แผนก — ตั้งชื่อแผนกของหน่วยงาน
- ผู้ใช้ — เพิ่มสมาชิกและกำหนดแผนกให้แต่ละคน (การส่งตามแผนกจะถึงเฉพาะคนที่มีแผนกนั้น)
- การตั้งค่า › สิทธิ์การใช้งาน — ให้ผู้ที่ส่งเอกสารได้มีสิทธิ์ "สามารถอัปโหลดไฟล์เอกสารได้" และผู้จัดการงานสารบรรณมีสิทธิ์ "สามารถจัดการ งานสารบรรณ"
- การตั้งค่า › งานสารบรรณ › การตั้งค่าโมดูล — รูปแบบเลขที่ ชนิดและขนาดไฟล์ การดาวน์โหลด
- ช่องทางแจ้งเตือน (ไม่บังคับ)
- อีเมล — การตั้งค่า › การตั้งค่าอีเมล ใส่อีเมลผู้ส่ง (No-Reply) และ SMTP ตัวเลือก "ส่งอีเมลแจ้งไปยังผู้รับ" ในหน้าส่งเอกสารจะแสดงเมื่อตั้งอีเมลผู้ส่งแล้ว และจะแจ้งทาง LINE/Telegram ที่ตั้งค่าไว้ไปพร้อมกัน
- LINE — การตั้งค่า › ตั้งค่า LINE ใส่ Channel access token · ส่งถึงสมาชิกที่เข้าระบบด้วย LINE
- Telegram — การตั้งค่า › ตั้งค่า Telegram ใส่ Bot token · ส่งถึงสมาชิกที่เข้าระบบด้วย Telegram และส่งเข้ากลุ่มตาม Chat ID ที่ตั้งไว้
ใช้ฐานข้อมูลและไฟล์เอกสารเดิมได้ทั้งหมด ไม่ต้องย้ายข้อมูลเอง
- สำรองฐานข้อมูลและโฟลเดอร์
datas/ก่อนเสมอ - วางรุ่นใหม่ในโฟลเดอร์ใหม่ (แนะนำ ไม่อัปโหลดทับของเดิม เพราะไฟล์ PHP รุ่นเก่าจะค้างอยู่)
แล้วคัดลอกจากระบบเดิมมาวาง
settings/config.phpและsettings/database.php— ต้องใช้ไฟล์เดิม ค่าpassword_keyในไฟล์นี้ผสมอยู่ในรหัสผ่านของทุกคนdatas/edocument/— ไฟล์ของเอกสารทั้งหมด (ชื่อไฟล์เดิม)
- เปิด
https://โดเมนของคุณ/install/ตัวติดตั้งจะเข้าโหมด ปรับรุ่น เอง (เพราะsettings/config.phpเป็นรุ่นที่ต่ำกว่า) - เข้าสู่ระบบด้วยบัญชี ผู้ดูแลระบบสูงสุด (สมาชิกลำดับที่ 1) ของระบบเดิม ติ๊กยืนยันว่าสำรองฐานข้อมูลแล้ว แล้วเริ่มปรับรุ่น
- ตรวจตารางเปรียบเทียบจำนวนแถวก่อน/หลังที่ตัวปรับรุ่นแสดง แล้ว ลบโฟลเดอร์
install/
ตัวปรับรุ่นทำให้
- แปลงตารางเป็น InnoDB/
utf8mb4และปรับโครงสร้างให้ตรงกับการติดตั้งใหม่ โดยไม่ลบข้อมูล - เอกสาร รายชื่อผู้รับ จำนวนการดาวน์โหลด สมาชิก แผนก สิทธิ์ และประวัติการใช้งานอยู่ครบ
- เลขที่เอกสารอัตโนมัตินับต่อจากเลขเดิม
- ค่าตั้งค่าของงานสารบรรณ (คำนำหน้า รูปแบบเลขที่ ชนิด/ขนาดไฟล์ การดาวน์โหลด) ใช้ค่าเดิม
- รันซ้ำได้ ถ้าหยุดกลางทางให้เปิดตัวปรับรุ่นอีกครั้ง
รหัสผ่านของสมาชิกเดิม — รุ่นใหม่เก็บรหัสผ่านแบบ bcrypt และไม่รับรหัสผ่านรูปแบบเก่า (sha1) ผู้ดูแลระบบสูงสุดถูกแปลงให้ตอนปรับรุ่น สมาชิกคนอื่นต้องตั้งรหัสผ่านใหม่ด้วย ลืมรหัสผ่าน (ต้องตั้งค่าอีเมลก่อน) หรือให้ผู้ดูแลแก้รหัสผ่านให้ที่เมนู ผู้ใช้ (แก้ไขรายคน หรือส่งคำขอตั้งรหัสผ่านใหม่ทางอีเมล) แจ้งสมาชิกล่วงหน้าก่อนเปิดใช้งาน
รุ่นใหม่ต้องใช้ PHP 7.4 ขึ้นไป (รุ่น 6.x ใช้ PHP 5.6 ได้) ตรวจเวอร์ชันของเซิร์ฟเวอร์ก่อนปรับรุ่น
├── modules/
│ ├── edocument/ งานสารบรรณ — API (controllers/) โมเดล (models/) สคริปต์หน้าเว็บ (admin.js)
│ │ ├── install/ ตารางของโมดูล + ข้อมูลตัวอย่าง (database.sql) และตัวปรับรุ่น (upgrade.php)
│ │ └── tests/ ชุดทดสอบ end-to-end
│ ├── index/ แกนระบบ: สมาชิก สิทธิ์ ตั้งค่า ภาษา หน้าแรก
│ ├── download/ อัปโหลด/ดาวน์โหลดไฟล์ของแกน
│ ├── export/ พิมพ์และส่งออกเอกสาร
│ └── timeline/ โปรโตคอลไทม์ไลน์ข้ามระบบ
├── templates/ หน้าเว็บ (HTML + data-*) · templates/edocument/ คือหน้าของงานสารบรรณ
├── language/ คำแปลไทย/อังกฤษ (.php และ .json ต้องมีคีย์ตรงกัน)
├── Gcms/ ส่วนกลางของแอป: API base ตาราง อีเมล LINE Telegram SMS AI
├── Kotchasan/ เฟรมเวิร์กฝั่ง PHP
├── Now/ เฟรมเวิร์กฝั่งเบราว์เซอร์ (ซอร์ส js/ และบันเดิล dist/)
├── install/ ตัวติดตั้ง ตัวปรับรุ่น และเครื่องมือบรรทัดคำสั่ง
├── settings/ ค่ากำหนดที่ตัวติดตั้งเขียนให้ (ไม่อยู่ใน repo)
├── datas/ ไฟล์ที่ระบบสร้าง: datas/edocument/ เก็บไฟล์เอกสาร (ไม่อยู่ใน repo)
├── index.php หน้าเดียวของแอป (SPA)
└── api.php ทางเข้าของ API ทั้งหมด (api/<โมดูล>/<controller>/<เมธอด>)
# งานสารบรรณ: สร้างฐานทดสอบจากสคีมาและข้อมูลของรุ่น 6.x → รันตัวปรับรุ่นจริงสองรอบ
# → เทียบโครงสร้างกับการติดตั้งใหม่ → เรียก API ทุกตัว แล้วลบฐานทดสอบทิ้ง
php modules/edocument/tests/run.php
# ตัวติดตั้งและตัวปรับรุ่น: ฐานหลายสภาพ (รุ่นปัจจุบัน รุ่นเก่า ข้อมูลเยอะ ปรับรุ่นค้าง ฯลฯ)
php install/cli-testdb.php
# แฟ้มภาษา: หาคีย์ที่โค้ดเรียกแต่ยังไม่มีคำแปล
php install/cli-language.phpชุดทดสอบสร้างและลบฐานข้อมูลของตัวเอง ใช้สิทธิ์ MySQL จาก settings/database.php
แต่ไม่แตะฐานข้อมูลและไฟล์ตั้งค่าของไซต์
php install/cli-fresh.php <dbname> [prefix] --admin=<user> --password=<pass> # ติดตั้งลงฐานเปล่า
php install/cli-upgrade.php <username> <password> --confirm-backup # รันตัวปรับรุ่นกับฐานใน settings/
php install/cli-verify.php <dbname> [prefix] # ตรวจว่าฐานผ่านเกณฑ์ของรุ่นนี้Now/ และ Kotchasan/ เป็นเฟรมเวิร์กกลางที่ใช้ร่วมกับโปรเจ็คอื่น แก้ที่ต้นทางแล้วนำมาวางทับ
ไม่แก้ในโปรเจ็คนี้โดยตรง เอกสารอยู่ที่ nowjs.net · docs.nowjs.net
และ kotchasan.com · docs.kotchasan.com
MIT — Copyright (c) 2026 Goragod Wiriya
Goragod Wiriya · goragod.com · github.com/goragodwiriya
มีคำถามหรือพบปัญหา แจ้งได้ที่ Issues หรือบอร์ดของ คชสาร
บริจาคช่วยค่าเซิร์ฟเวอร์ได้ที่
ธนาคารกสิกรไทย สาขากาญจนบุรี
เลขที่บัญชี 221-2-78341-5
ชื่อบัญชี กรกฎ วิริยะ