---
sidebar_label: เวอร์ชันออฟไลน์ (อินทราเน็ตองค์กร)
title: AI Short ติดตั้งใช้งานออฟไลน์ | อินทราเน็ตองค์กรไม่ต้องพึ่งเซิร์ฟเวอร์ภายนอก
description: AI Short เวอร์ชันออฟไลน์ออกแบบมาสำหรับองค์กรและทีมงานที่ไม่สามารถเข้าถึงอินเทอร์เน็ตภายนอกได้ ไม่ต้องมีเซิร์ฟเวอร์แบ็กเอนด์ ไม่ต้องลงทะเบียนบัญชี ข้อมูลทั้งหมดเก็บไว้ในเบราว์เซอร์ ติดตั้งครั้งเดียวพร้อมใช้งานทันที
---

# ติดตั้งใช้งานออฟไลน์

> **กลุ่มผู้อ่านเป้าหมาย**: ผู้ดูแลระบบไอที (IT administrator) หรือผู้รับผิดชอบด้านเทคนิคที่ดูแลการติดตั้ง ส่วนผู้ใช้งานทั่วไปเพียงเปิด URL อินทราเน็ตที่ผู้ดูแลระบบจัดเตรียมไว้ก็พอ ไม่จำเป็นต้องอ่านเอกสารฉบับนี้

**สถานการณ์ที่เหมาะสม**: อินทราเน็ตขององค์กร เครือข่ายของหน่วยงานราชการ ระบบของธนาคารและสถาบันการเงิน สภาพแวดล้อมที่ต้องปฏิบัติตาม PDPA หรือกฎหมายคุ้มครองข้อมูลส่วนบุคคล สถานพยาบาลที่ดูแลข้อมูลผู้ป่วย เครือข่ายสถานศึกษา รวมถึงสภาพแวดล้อมอื่น ๆ ที่ **ไม่สามารถหรือไม่สะดวกในการเข้าถึงอินเทอร์เน็ตภายนอก**

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

## วิธีการใช้งานของทีม

เวอร์ชันออฟไลน์เป็นเว็บไซต์แบบ static ล้วน เมื่อติดตั้งบนเซิร์ฟเวอร์อินทราเน็ตแล้ว สมาชิกในทีมเข้าถึง URL อินทราเน็ตผ่านเบราว์เซอร์ได้ทันที:

1. **ผู้ดูแลระบบ** ติดตั้งเวอร์ชันออฟไลน์ลงบนเซิร์ฟเวอร์อินทราเน็ต (เช่น `http://192.168.1.100:3000`)
2. **สมาชิกในทีม** เปิด URL ดังกล่าวบนเบราว์เซอร์ เพื่อเรียกดู ค้นหา และคัดลอก prompt ได้ทันที
3. **คอลเลกชันและ prompt ที่กำหนดเองของแต่ละคน เก็บไว้ในเบราว์เซอร์ของตนเอง** แยกจากกันโดยสิ้นเชิง
4. ไม่ต้องลงทะเบียนบัญชี ไม่ต้องติดตั้งซอฟต์แวร์ใด ๆ เปิดแล้วใช้ได้เลย

```
เซิร์ฟเวอร์อินทราเน็ต (ติดตั้งเวอร์ชันออฟไลน์)
   ├── คลังข้อมูล prompt (ใช้ร่วมกันทั้งทีม จาก static JSON)
   │
   ├── เบราว์เซอร์ของผู้ใช้ A → localStorage (คอลเลกชันและ prompt ที่กำหนดเองของ A)
   ├── เบราว์เซอร์ของผู้ใช้ B → localStorage (คอลเลกชันและ prompt ที่กำหนดเองของ B)
   └── เบราว์เซอร์ของผู้ใช้ C → localStorage (คอลเลกชันและ prompt ที่กำหนดเองของ C)
```

:::tip คำแนะนำ
คลัง prompt (prompt ที่คัดสรร) เป็นข้อมูล static ที่ถูก bundle ตอนสร้าง build ดังนั้นผู้ใช้ทุกคนจะเห็นเนื้อหาเหมือนกัน ส่วนคอลเลกชัน, prompt ที่กำหนดเอง, การเรียงลำดับ และแท็กของผู้ใช้แต่ละคน จะเก็บไว้ใน localStorage ของเบราว์เซอร์ตนเอง แยกจากกันโดยอิสระ
:::

## ความแตกต่างกับเวอร์ชันออนไลน์

| ฟังก์ชัน | เวอร์ชันออนไลน์ | เวอร์ชันออฟไลน์ |
| ------- | -------------- | -------------- |
| เรียกดู / ค้นหา / กรอง prompt | ใช่ | ใช่ |
| คัดลอก prompt | ใช่ | ใช่ |
| จัดการคอลเลกชัน | เก็บที่เซิร์ฟเวอร์ | เก็บที่เบราว์เซอร์ |
| Prompt ที่กำหนดเอง | เก็บที่เซิร์ฟเวอร์ | เก็บที่เบราว์เซอร์ |
| คอลเลกชันของฉัน (ลากวางจัดเรียง, แท็ก) | ใช่ | ใช่ |
| รองรับหลายภาษา (18 ภาษา) | ใช่ | ใช่ |
| นำเข้า / ส่งออกข้อมูล | ใช่ | ใช่ (รูปแบบใช้ร่วมกันได้) |
| หน้ารายละเอียด prompt | ใช่ | ใช่ (ข้อมูล static, ไม่มีคอมเมนต์) |
| ลงทะเบียน / เข้าสู่ระบบ | ใช่ | ไม่ (ไม่ต้องมีบัญชี) |
| รายการ prompt ชุมชน / โหวต | ใช่ | ไม่ |
| คอมเมนต์และความคิดเห็น | ใช่ | ไม่ |

## การจัดเก็บข้อมูล

ข้อมูลของผู้ใช้แต่ละคนถูกเก็บไว้ใน localStorage ของ **เบราว์เซอร์ตนเอง** โดยไม่เกี่ยวข้องกับเซิร์ฟเวอร์:

| ข้อมูล | คีย์ที่เก็บ | คำอธิบาย |
| ----- | ---------- | ------- |
| รายการคอลเลกชัน | `local_favorites` | อาร์เรย์ของ ID prompt ที่รวบรวมไว้ |
| Prompt ที่กำหนดเอง | `local_user_prompts` | ข้อมูล prompt ที่ผู้ใช้สร้างขึ้น |
| ลำดับการแสดงผล | `local_myspace_order` | ลำดับการ์ดในคอลเลกชันของฉัน |
| แท็กที่กำหนดเอง | `local_custom_tags` | คำจำกัดความและการกำหนดแท็ก |

:::caution ข้อควรระวัง
- พื้นที่จัดเก็บของเบราว์เซอร์มีขีดจำกัดประมาณ 5MB ซึ่งเพียงพอต่อการใช้งานทั่วไป
- การล้างข้อมูลเบราว์เซอร์จะทำให้ข้อมูลส่วนตัวสูญหาย — แนะนำให้สำรองข้อมูลเป็นประจำผ่าน "ตั้งค่า > ส่งออกข้อมูล"
- เมื่อเปลี่ยนเครื่องคอมพิวเตอร์หรือเบราว์เซอร์ ต้องนำเข้าข้อมูลใหม่
:::

## การติดตั้ง

เวอร์ชันออฟไลน์อยู่บน branch ที่ชื่อ `offline` หลังจากผู้ดูแลระบบติดตั้งเรียบร้อยแล้วครั้งเดียว สมาชิกในทีมก็ใช้งานได้โดยไม่ต้องดำเนินการอะไรเพิ่มเติม

### ติดตั้งด้วย Docker (แนะนำ)

วิธีติดตั้งที่ง่ายที่สุด เพียงคำสั่งบรรทัดเดียวก็รันบนเซิร์ฟเวอร์อินทราเน็ตได้:

```bash
# ใช้ image เวอร์ชันออฟไลน์ที่สร้างไว้แล้ว
docker run -d -p 3000:3000 --name aishort-offline ghcr.io/rockbenben/chatgpt-shortcut:offline

# หรือใช้ Docker Hub
docker run -d -p 3000:3000 --name aishort-offline rockben/chatgpt-shortcut:offline
```

หลังติดตั้งเสร็จ สมาชิกในทีมเข้าใช้ผ่าน `http://<IP-เซิร์ฟเวอร์>:3000` ได้ทันที

ใช้ `docker-compose`:

```yml
services:
  aishort-offline:
    container_name: aishort-offline
    image: ghcr.io/rockbenben/chatgpt-shortcut:offline
    ports:
      - "3000:3000"
    restart: unless-stopped
```

### สร้างจาก source code

หากต้องการปรับแต่งเนื้อหา prompt หรือแก้ไขการตั้งค่า:

```bash
# Clone branch ออฟไลน์
git clone -b offline https://github.com/rockbenben/ChatGPT-Shortcut.git
cd ChatGPT-Shortcut

# ติดตั้ง dependencies
yarn

# พัฒนาในเครื่อง
yarn start

# Build เฉพาะภาษาเดียว (ภาษาไทย)
yarn build --locale th

# Build ทุกภาษา
yarn build
```

ผลลัพธ์จากการ build จะอยู่ในไดเรกทอรี `build/` และสามารถนำไปติดตั้งบน static file server ใดก็ได้ (Nginx, Apache, Caddy ฯลฯ)

### ตัวอย่างการตั้งค่า Nginx

```nginx
server {
    listen 3000;
    server_name _;
    root /path/to/build;
    index index.html;

    location / {
        try_files $uri $uri/ /index.html;
    }
}
```

### ติดตั้งบนแพลตฟอร์ม

หากติดตั้งบน Vercel, Cloudflare Pages หรือแพลตฟอร์มอื่นที่คล้ายกัน เพียงเลือก branch `offline` ส่วนขั้นตอนอื่น ๆ เหมือนกับเวอร์ชันออนไลน์ ดูรายละเอียดเพิ่มเติมที่ [การติดตั้งโปรเจกต์](../deploy)

## นำเข้าและส่งออกข้อมูล

### ส่งออก

ไปที่ "ตั้งค่า > ส่งออกข้อมูล" เพื่อบันทึกคอลเลกชันส่วนตัวและ prompt ที่กำหนดเองเป็นไฟล์ JSON

### นำเข้า

รองรับการนำเข้าไฟล์ JSON รูปแบบดังต่อไปนี้:

- **ไฟล์ที่ส่งออกจากเวอร์ชันออฟไลน์**: กู้คืนคอลเลกชัน, prompt, ลำดับ และแท็กได้ครบถ้วน
- **ไฟล์ที่ส่งออกจากเวอร์ชันออนไลน์**: ระบบจะประมวลผลให้เข้ากันได้โดยอัตโนมัติ
  - Prompt ของผู้ใช้ → รวมเข้ากับข้อมูลในเครื่อง (ตัดซ้ำตามชื่อเรื่อง)
  - คอลเลกชันที่คัดสรร (card) → รวมเข้ากับคอลเลกชันในเครื่อง
  - คอลเลกชันชุมชน (community) → แปลงเป็น prompt ที่กำหนดเองในเครื่องโดยอัตโนมัติ
  - การเรียงลำดับ MySpace → กู้คืนในเครื่อง
  - แท็กที่กำหนดเอง → เพิ่มต่อท้าย (ไม่เขียนทับของเดิม)

### ย้ายข้อมูลจากเวอร์ชันออนไลน์

1. ส่งออกข้อมูลจากหน้า "บัญชีของฉัน" บนเวอร์ชันออนไลน์ (aishort.top)
2. นำเข้าไฟล์ JSON ดังกล่าวจากหน้า "ตั้งค่า" บนเวอร์ชันออฟไลน์
3. คอลเลกชันชุมชนจะถูกแปลงเป็น prompt ในเครื่องโดยอัตโนมัติ ส่วนคอลเลกชันที่คัดสรรจะซิงค์ตามปกติ

## คำถามที่พบบ่อย

### หลังติดตั้งแล้วทีมงานใช้งานอย่างไร?

หลังผู้ดูแลระบบติดตั้งบนเซิร์ฟเวอร์อินทราเน็ตเรียบร้อยแล้ว เพียงแจ้ง URL การเข้าใช้งาน (เช่น `http://192.168.1.100:3000`) ให้ทีมงานทราบ แต่ละคนเปิดผ่านเบราว์เซอร์ ไม่ต้องติดตั้งโปรแกรม ไม่ต้องลงทะเบียน

### ข้อมูลของแต่ละคนจะกระทบกันหรือไม่?

ไม่กระทบกัน คอลเลกชันและ prompt ที่กำหนดเองของแต่ละคนเก็บไว้ใน localStorage ของเบราว์เซอร์ตนเอง แยกจากกันโดยสิ้นเชิง บนเซิร์ฟเวอร์มีเพียงคลัง prompt ที่ใช้ร่วมกัน (อ่านอย่างเดียว)

### ข้อมูลจะสูญหายหรือไม่?

การกระทำต่อไปนี้จะทำให้ข้อมูลส่วนตัวสูญหาย:

- ล้างข้อมูล/แคชของเบราว์เซอร์
- ใช้โหมดส่วนตัว/ไม่ระบุตัวตน
- เปลี่ยนเครื่องคอมพิวเตอร์หรือเบราว์เซอร์

แนะนำให้สำรองข้อมูลที่สำคัญเป็นประจำในรูปแบบไฟล์ JSON ผ่าน "ตั้งค่า > ส่งออกข้อมูล"

### แชร์ prompt ที่กำหนดเองภายในทีมได้หรือไม่?

ทำได้ คนใดคนหนึ่งส่งออกเป็นไฟล์ JSON แล้วสมาชิกคนอื่นนำเข้าผ่าน "ตั้งค่า > นำเข้าข้อมูล" ก็ใช้ได้ ระบบจะตัดข้อมูลซ้ำให้อัตโนมัติ

### อัปเดตคลัง prompt อย่างไร?

คลัง prompt เป็นข้อมูล static ที่ bundle ตอนสร้าง build วิธีอัปเดต:

1. ผู้ดูแลระบบดึงโค้ดล่าสุดจาก branch `offline`
2. Build และติดตั้งใหม่ (หรือดึง Docker image ล่าสุด)
3. สมาชิกในทีมเพียงรีเฟรชเบราว์เซอร์ก็จะเห็นเนื้อหาใหม่ (ข้อมูลส่วนตัวไม่ได้รับผลกระทบ)

### รูปแบบข้อมูลของเวอร์ชันออฟไลน์เข้ากันได้กับเวอร์ชันออนไลน์หรือไม่?

เข้ากันได้ รูปแบบ JSON ที่ส่งออกเหมือนกัน สามารถนำเข้าสองทิศทางระหว่างสองเวอร์ชันได้ ID ของ prompt จะแตกต่างกัน (เวอร์ชันออนไลน์ใช้ server-side ID ส่วนเวอร์ชันออฟไลน์ใช้ ID ที่อิงตาม timestamp) แต่การนำเข้าจะตัดข้อมูลซ้ำตามชื่อเรื่อง จึงไม่เกิดปัญหาขัดแย้งกัน
