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

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

**ก่อนหน้านี้:** [การเชื่อมต่อ](./integrations)
:::

`@easy-cms/plugin-notify` ส่งข้อความสั้น ๆ ไปยังแชตสำหรับ event ที่ผู้ดูแลเลือก พร้อมลิงก์ไปยังหน้านั้นใน admin
เริ่มจาก Telegram และออกแบบไว้ให้เพิ่มช่องทางอื่น (LINE, Slack, Discord) ได้ภายหลัง

```bash [pm]
npm install @easy-cms/plugin-notify
```

```ts
import { notifyPlugin } from '@easy-cms/plugin-notify'

export default defineConfig({
  serverURL: 'https://example.com', // สำหรับลิงก์ไปยัง admin
  // …
  plugins: [notifyPlugin()],
})
```

plugin เพิ่ม collection `notify-messages` (คิวของมัน ไม่แสดงใน admin) และงานตั้งเวลาหนึ่งงาน ให้สร้าง migration
(`easy-cms migrate:create notify` ดู [Migrations](./deployment)) และต้องมีอะไรสักอย่างรันงานตั้งเวลา
ไม่ว่าจะเป็นเซิร์ฟเวอร์หรือ cron ([งานตั้งเวลา](./jobs))

## เชื่อม Telegram {#connecting-telegram}

1. ใน Telegram คุยกับ **@BotFather**: `/newbot` แล้วคัดลอก token ที่ได้
2. ส่งข้อความหาบอทใหม่ หรือเพิ่มบอทเข้ากลุ่มที่จะรับข้อความ
3. ใน admin ไปที่ **Settings → การเชื่อมต่อ → Telegram → เชื่อมบัญชี** วาง **Bot token** กด
   **ค้นหา Chat ID** แล้วเลือกแชต
4. เลือก **ภาษา** ของข้อความ (ถ้าว่าง: ภาษาของ admin) และ **เหตุการณ์** (ถ้าไม่เลือก: ทั้งหมด) แล้ว
   **บันทึก** Easy CMS จะส่งข้อความทดสอบไปที่แชต และปุ่ม **ทดสอบ** ส่งอีกครั้งได้

เชื่อมได้หลายแชต (ทีมร้านค้าสำหรับคำสั่งซื้อ ทีมนักพัฒนาสำหรับข้อผิดพลาด) แต่ละแชตได้รับเฉพาะ event ที่ติ๊กไว้
`TELEGRAM_BOT_TOKEN` ใน environment จะใช้แทน token ที่กรอกใน admin

## Event {#events}

| Event | ข้อความบอกอะไร |
|---|---|
| `form.submitted` | ชื่อฟอร์มและผู้ส่ง จาก[ตัวสร้างฟอร์ม](./forms) ไม่รวมคำตอบ เพราะอาจเป็นข้อมูลส่วนตัว ให้อ่านใน admin |
| `order.created` | เลขคำสั่งซื้อ ยอดรวม และอีเมล จาก[ร้านค้า](./ecommerce) |
| `scheduled.failed` | เอกสารที่เผยแพร่หรือเลิกเผยแพร่ตามเวลาไม่สำเร็จ และสาเหตุ |
| `delivery.failed` | webhook หรืออีเมลที่ส่งไม่สำเร็จหลังลองซ้ำครบแล้ว |
| `backup.failed` | สาเหตุที่[สำรองข้อมูล](./backups)ไม่สำเร็จ |
| `integration.failed` | การเชื่อมต่อที่ใช้งานไม่ได้ (ไม่รวมช่องทางแจ้งเตือนเอง) |

event เหล่านี้คือ [event ข้อผิดพลาด](./webhooks#when-something-fails) ที่ webhook รับได้ด้วย

## การส่ง {#delivery}

ข้อความส่งทันที ถ้าส่งไม่สำเร็จ งาน `notify:send` จะลองใหม่หลัง 1, 5 และ 30 นาที หลังจากนั้นจะเลิกส่ง
และการเชื่อมต่อจะแสดงข้อผิดพลาดในหน้าการเชื่อมต่อและแดชบอร์ด token ผิดหรือแชตที่บอทออกไปแล้วจะไม่ลองซ้ำ

การเชื่อมต่อหนึ่งส่งได้ไม่เกิน 60 ข้อความต่อชั่วโมง (`limit`) ข้อความที่เกินจะถูกนับไว้ แล้วแชตจะได้ข้อความเดียว
บอกจำนวน เมื่อชั่วโมงถัดไปเปิดให้ส่งได้ ข้อความที่ส่งแล้วเก็บไว้ 7 วัน

## ตัวเลือก {#options}

| ตัวเลือก | ค่าเริ่มต้น | |
|---|---|---|
| `channels` | `[telegram]` | ช่องทางที่ส่งข้อความ |
| `limit` | `60` | จำนวนข้อความสูงสุดต่อชั่วโมงของการเชื่อมต่อหนึ่ง |
| `slug` | `notify-messages` | collection ของคิว |

## ขั้นต่อไป {#next-steps}

- [การเชื่อมต่อ](./integrations): การเชื่อมต่อ secret และแดชบอร์ด
- [Webhooks](./webhooks#listening-on-the-server): `cms.on` และ `listeners` สำหรับ event ของคุณเอง
