---
title: การแจ้งเตือนแบบ Direct - คีย์ API ส่วนตัวสำหรับแจ้งเตือนทันที
sidebarTitle: Direct
description: ส่งการแจ้งเตือนโดยตรงด้วยคีย์ API ส่วนตัว ไม่ต้องตั้งค่าช่อง สร้างคีย์ Direct แล้วยิงการแจ้งเตือนทันทีพร้อมหัวข้อ เนื้อหา และลิงก์
---

# การแจ้งเตือนแบบ Direct

การแจ้งเตือนแบบ Direct ช่วยให้คุณส่งการแจ้งเตือนส่วนตัวผ่าน webhook URL ง่าย ๆ โดยไม่ต้องตั้งค่าช่อง ไม่ต้องมีเทมเพลต และไม่ต้องมีผู้ติดตาม แค่สร้างคีย์ เรียก URL แล้วคุณก็ได้รับการแจ้งเตือนบนเครื่องทันที

## Direct คืออะไร

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

ด้วย Direct คุณจะได้คีย์ API ส่วนตัวที่ผูกกับ webhook URL เฉพาะตัว เมื่อคุณเรียก URL นั้นพร้อมหัวข้อและเนื้อหา ระบบจะส่งการแจ้งเตือนถึงคุณโดยตรง ไม่ต้องตั้งค่าช่องใด ๆ

### ควรใช้ Direct หรือช่องเมื่อใด

| | Direct | ช่อง |
|---|---|---|
| **การตั้งค่า** | สร้างคีย์แล้วใช้ URL | สร้างช่องแล้วตั้งค่าเทมเพลต |
| **ผู้รับ** | คุณคนเดียว | ทุกคนที่ติดตาม |
| **เทมเพลต** | ไม่มี — คุณระบุหัวข้อ/เนื้อหาในแต่ละคำขอ | ตั้งค่าเทมเพลตพร้อมตัวแปรได้ |
| **เงื่อนไข** | ไม่มี | รองรับการส่งแบบมีเงื่อนไข |
| **เหมาะกับ** | สคริปต์ส่วนตัว แจ้งเตือนเร็ว ๆ งานอัตโนมัติ | การแจ้งเตือนที่แชร์กัน เวิร์กโฟลว์ที่มีโครงสร้าง |

## เริ่มต้นใช้งาน

### 1. สร้างคีย์ Direct

ในแอป Echobell ให้แตะ **Direct** ที่ด้านบนของรายการช่อง จากนั้นแตะ **Create** เพื่อสร้างคีย์ Direct ใหม่ ตั้งชื่อที่สื่อความหมาย (เช่น "Build Server", "Home Lab", "Trading Bot")

### 2. คัดลอก Webhook URL

คีย์ Direct แต่ละอันมี webhook URL เฉพาะตัวในรูปแบบนี้:

```
https://hook.echobell.one/d/{your-key-token}
```

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

### 3. ส่งการแจ้งเตือน

เรียก webhook URL พร้อมส่ง JSON body ที่มี `title` และ `body`:

```http
POST https://hook.echobell.one/d/YOUR_KEY_TOKEN
Content-Type: application/json

{
  "title": "Build Complete",
  "body": "Project X built successfully in 3m 42s"
}
```

เท่านี้เอง คุณจะได้รับการแจ้งเตือนทันที

## การส่งคำขอ

### คำขอแบบ POST (แนะนำ)

ส่ง JSON body ที่บรรจุเนื้อหาการแจ้งเตือนของคุณ:

```http
POST https://hook.echobell.one/d/YOUR_KEY_TOKEN
Content-Type: application/json

{
  "title": "Deployment Status",
  "body": "v2.1.0 deployed to production",
  "externalLink": "https://dashboard.example.com/deploys/latest"
}
```

### คำขอแบบ GET

คุณส่งพารามิเตอร์ผ่าน query string ก็ได้เช่นกัน:

```http
GET https://hook.echobell.one/d/YOUR_KEY_TOKEN?title=Alert&body=CPU+at+95%25
```

### POST Only

คีย์ Direct แต่ละอันมีการตั้งค่า **POST Only** ของตัวเองในแอป Echobell ซึ่งปิดอยู่โดยค่าเริ่มต้น

เมื่อเปิดใช้งาน จะมีเพียง `POST` เท่านั้นที่ทริกเกอร์คีย์นั้นได้ ส่วนคำขอ `GET` ไปยัง webhook URL ของคีย์จะถูกปฏิเสธด้วย `405 Method Not Allowed` และจะไม่มีการส่งการแจ้งเตือน:

```json
{
  "success": false,
  "notificationTriggered": false,
  "message": "This trigger only accepts POST requests; GET triggering is disabled in its settings."
}
```

คำขอ `HEAD` ไม่ได้รับผลกระทบ โดยจะตอบกลับ `200` และไม่ทริกเกอร์การแจ้งเตือนเสมอ ไม่ว่า POST Only จะเปิดหรือปิดอยู่

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

### ฟิลด์ของคำขอ

ชื่อฟิลด์ทั้งหมด**ไม่แยกตัวพิมพ์ใหญ่เล็ก** โดย `title`, `Title` และ `TITLE` ถือว่าเหมือนกันทั้งหมด ไม่ว่าจะส่งผ่าน JSON body หรือ query string

| ฟิลด์ | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|
| `title` | string | ไม่ | หัวข้อการแจ้งเตือน หากไม่ระบุจะใช้ค่าเริ่มต้นเป็น "Direct Notification" |
| `body` | string | ไม่ | ข้อความเนื้อหาของการแจ้งเตือน |
| `externalLink` | string | ไม่ | ลิงก์ที่คลิกได้ซึ่งแสดงในบันทึกการแจ้งเตือน |
| `notificationType` | string | ไม่ | ระดับความเร่งด่วนของการแจ้งเตือน รับค่า `active`, `time-sensitive` หรือ `calling` ค่าเริ่มต้นคือ `active` ดู [ประเภทการแจ้งเตือน](#ประเภทการแจ้งเตือน) |

### ประเภทการแจ้งเตือน

คุณควบคุมระดับความเร่งด่วนของการแจ้งเตือนแบบ Direct ได้ด้วยฟิลด์ `notificationType`:

| ประเภท | คำอธิบาย |
|---|---|
| `active` | การแจ้งเตือนมาตรฐาน ส่งตามปกติ เป็นค่าเริ่มต้น |
| `time-sensitive` | การแจ้งเตือนความสำคัญสูงที่ทะลุโหมดโฟกัสได้ |
| `calling` | การแจ้งเตือนแบบสายโทรเข้าสำหรับสถานการณ์วิกฤต **ต้องมีการสมัครสมาชิก premium ที่ใช้งานอยู่** หากไม่มี premium ระบบจะลดระดับลงเป็น `time-sensitive` |

ตัวอย่างการระบุประเภทการแจ้งเตือน:

```http
POST https://hook.echobell.one/d/YOUR_KEY_TOKEN
Content-Type: application/json

{
  "title": "Server Down",
  "body": "Production server is unresponsive",
  "notificationType": "calling"
}
```

## รูปแบบการตอบกลับ

คำขอที่สำเร็จจะได้รับการตอบกลับดังนี้:

```json
{
  "success": true,
  "message": "Notification triggered successfully."
}
```

หากคีย์ไม่ถูกต้องหรือไม่พบ (สังเกตว่ายังคงตอบกลับด้วย HTTP `200`):

```json
{
  "success": false,
  "message": "Direct key not found."
}
```

## การจัดการคีย์ Direct

### หลายคีย์

คุณสร้างคีย์ Direct หลายอันสำหรับวัตถุประสงค์ต่างกันได้:

- **"CI Server"** — สำหรับการแจ้งเตือนเรื่องบิลด์และการดีพลอย
- **"Home Automation"** — สำหรับการแจ้งเตือนจากเซ็นเซอร์ IoT
- **"Cron Jobs"** — สำหรับผลของงานตามตารางเวลา
- **"Trading Bot"** — สำหรับการแจ้งเตือนตลาด

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

### รีเซ็ตโทเคน

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

### ลบคีย์

การลบคีย์ Direct จะทำให้ webhook URL ของคีย์นั้นใช้ไม่ได้อย่างถาวร คำขอใด ๆ ที่ส่งไปยัง URL เดิมจะล้มเหลว

## กรณีใช้งานที่พบบ่อย

### สคริปต์เชลล์

```bash
# แจ้งเตือนเมื่องานที่ใช้เวลานานทำงานเสร็จ
./run-migration.sh && \
curl -X POST https://hook.echobell.one/d/YOUR_KEY_TOKEN \
  -H "Content-Type: application/json" \
  -d '{"title": "Migration Complete", "body": "Database migration finished successfully"}'
```

### Cron Job

```bash
# ใน crontab: แจ้งเตือนเมื่อสำรองข้อมูลเสร็จ
0 2 * * * /usr/local/bin/backup.sh && curl -s -X POST https://hook.echobell.one/d/YOUR_KEY_TOKEN -H "Content-Type: application/json" -d '{"title": "Backup Done", "body": "Nightly backup completed"}'
```

### Python

```python
import requests

requests.post(
    "https://hook.echobell.one/d/YOUR_KEY_TOKEN",
    json={
        "title": "Training Complete",
        "body": f"Model accuracy: {accuracy:.2%}",
        "externalLink": "https://wandb.ai/runs/abc123"
    }
)
```

### Node.js

```javascript
await fetch("https://hook.echobell.one/d/YOUR_KEY_TOKEN", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    title: "Deploy Complete",
    body: `Version ${version} deployed to production`,
  }),
});
```

### GitHub Actions

```yaml
- name: Notify via Echobell Direct
  if: always()
  env:
    ECHOBELL_DIRECT_URL: ${{ secrets.ECHOBELL_DIRECT_URL }}
  run: |
    curl -X POST "$ECHOBELL_DIRECT_URL" \
      -H "Content-Type: application/json" \
      -d '{"title": "Build ${{ job.status }}", "body": "${{ github.repository }} @ ${{ github.sha }}"}'
```

## แนวปฏิบัติที่ดี

### ความปลอดภัย

- **ถือว่า URL ของคีย์ Direct เป็นความลับ** — ใครก็ตามที่มี URL นี้ส่งการแจ้งเตือนถึงคุณได้
- **ใช้ตัวแปรสภาพแวดล้อม** ในการเก็บโทเคนของคีย์ในสคริปต์และ CI/CD
- **รีเซ็ตโทเคน** ทันทีหากสงสัยว่าคีย์รั่วไหล
- **สร้างคีย์แยกกัน** สำหรับแต่ละบริการ เพื่อให้เพิกถอนได้ทีละอัน

### การจัดระเบียบ

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

### การจัดการข้อผิดพลาด

เมื่อนำ Direct ไปใช้ในสคริปต์ของคุณ ให้แยกเงื่อนไขจากฟิลด์ `success` ใน JSON แทนที่จะดูจากสถานะ HTTP:

- **200 OK**: ระบบได้รับคำขอแล้ว ให้ตรวจสอบ JSON body โดย `success: true` หมายถึงทริกเกอร์การแจ้งเตือนแล้ว ส่วน `success: false` หมายถึงยังไม่ได้ทริกเกอร์ คีย์ Direct ที่ไม่รู้จักหรือถูกรีเซ็ตจะตอบกลับด้วย HTTP `200` พร้อม `{ "success": false, "message": "Direct key not found." }` ซึ่ง**ไม่ใช่** `404`
- **400 Bad Request**: โทเคนของคีย์มีความยาวไม่ถูกต้อง ให้แก้ไข URL
- **405 Method Not Allowed**: คีย์นั้นเปิด [POST Only](#post-only) ไว้ แต่คำขอไม่ใช่ `POST` ให้เปลี่ยนฝั่งผู้เรียกเป็น `POST` หรือปิดการตั้งค่านี้

Echobell ไม่จำกัดอัตราการเรียก Direct จึงไม่มีการตอบกลับด้วย `429`

## ความเป็นส่วนตัวและความปลอดภัย

### ข้อมูลที่ถูกจัดเก็บ

- **บนเซิร์ฟเวอร์ของเรา**:
  - ข้อมูลเมตาของคีย์ Direct (ชื่อ โทเคนที่ผ่านการแฮช เจ้าของ)
  - payload ของคำขอถูกประมวลผลและเก็บไว้ชั่วคราวเพื่อการส่ง

- **บนเครื่องของคุณ**:
  - เนื้อหาการแจ้งเตือน (หัวข้อ เนื้อหา)
  - ประวัติการทริกเกอร์และเวลาที่เกิดขึ้น
  - ลิงก์ภายนอก

### ข้อมูลที่ไม่ถูกจัดเก็บ

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

## การแก้ปัญหา

### ไม่ได้รับการแจ้งเตือน

1. **ตรวจสอบ webhook URL** — คัดลอกมาจากแอปโดยตรง และดูว่ามีช่องว่างเกินหรือไม่
2. **ตรวจสอบว่าคีย์ยังอยู่** — คีย์อาจถูกลบหรือโทเคนถูกรีเซ็ตไปแล้ว
3. **ตรวจสอบสิทธิ์การแจ้งเตือน** — แอป Echobell ต้องได้รับสิทธิ์แจ้งเตือนบนเครื่องของคุณ
4. **ทดสอบด้วย curl** — เพื่อตัดปัญหาจากไคลเอนต์ HTTP ของคุณออกไป:
   ```bash
   curl -X POST https://hook.echobell.one/d/YOUR_KEY_TOKEN \
     -H "Content-Type: application/json" \
     -d '{"title": "Test", "body": "Hello from Direct"}'
   ```

### ข้อผิดพลาดของคำขอ

- **แจงส่วน JSON ไม่สำเร็จ**: ตรวจสอบว่าตั้งเฮดเดอร์ `Content-Type: application/json` ไว้แล้ว และ body เป็น JSON ที่ถูกต้อง
- **ไม่พบคีย์**: body ที่มี `"success": false` พร้อมข้อความ `"Direct key not found."` หมายความว่าโทเคนถูกรีเซ็ตหรือคีย์ถูกลบ (สถานะ HTTP ยังคงเป็น `200`)

### ยังแก้ปัญหาไม่ได้ใช่ไหม

- เยี่ยมชม [ศูนย์ช่วยเหลือ](/docs/support) ของเราเพื่อขอความช่วยเหลือเพิ่มเติม
- ติดต่อเราที่ echobell@weelone.com พร้อมแจ้ง:
  - คำอธิบายปัญหา
  - ตัวอย่างคำขอ (ปิดบังโทเคนไว้)
  - พฤติกรรมที่คาดหวังเทียบกับที่เกิดขึ้นจริง

## ขั้นตอนถัดไป

- **[การเชื่อมต่อ Webhook](/docs/webhook)** — สำหรับการแจ้งเตือนที่แชร์ร่วมกันและใช้เทมเพลตผ่านช่อง
- **[ไวยากรณ์เทมเพลต](/docs/template)** — เรียนรู้เรื่องเทมเพลตการแจ้งเตือนของช่อง
- **[ทริกเกอร์อีเมล](/docs/email-trigger)** — ทริกเกอร์การแจ้งเตือนผ่านอีเมล
- **[สำรวจการเชื่อมต่อ](/docs/features)** — เชื่อมกับเครื่องมือที่คุณใช้อยู่แล้ว
