---
title: งานตามกำหนดเวลา
description: งานตามกำหนดเวลาจะเรียก HTTP หนึ่งครั้งไปยังแอปหนึ่งขององค์กรคุณตามเวลาที่กำหนด คล้าย Google Cloud Scheduler
url: https://agentlab.cresclab.com/docs/th/deploy/scheduled-jobs
language: th
updated: 2026-10-06
---

# งานตามกำหนดเวลา

งานตามกำหนดเวลาจะเรียก HTTP หนึ่งครั้งไปยังแอปหนึ่งขององค์กรคุณตามเวลาที่กำหนด คล้าย Google Cloud Scheduler

## องค์ประกอบของงาน

การเรียกจะไปถึงเวอร์ชันที่เผยแพร่อยู่ในขณะนั้น

| ฟิลด์     | คำอธิบาย                                                                                                         |
| --------- | ---------------------------------------------------------------------------------------------------------------- |
| แอป       | แอปคอนเทนเนอร์ที่จะเรียก                                                                                         |
| พาธ       | ต่อท้ายที่อยู่ของแอป ขึ้นต้นด้วย `/` ใส่ query string ได้ เช่น `/tasks/daily`                                    |
| เมธอด     | `GET`, `POST`, `PUT`, `PATCH` หรือ `DELETE` ค่าเริ่มต้นคือ `POST` จะส่งเนื้อหาเฉพาะกับ `POST`, `PUT` และ `PATCH` |
| กำหนดเวลา | นิพจน์ cron 5 ฟิลด์: นาที ชั่วโมง วันที่ เดือน วันในสัปดาห์ ถี่สุดนาทีละครั้ง                                    |
| เขตเวลา   | ค่าเริ่มต้นคือ `Asia/Taipei`                                                                                     |

ตัวอย่างนิพจน์ cron

| นิพจน์         | เวลาที่รัน                      |
| -------------- | ------------------------------- |
| `0 9 * * *`    | ทุกวัน เวลา 09:00               |
| `*/15 * * * *` | ทุก 15 นาที                     |
| `0 8 * * 1`    | ทุกวันจันทร์ เวลา 08:00         |
| `0 0 1 * *`    | วันที่ 1 ของทุกเดือน เวลา 00:00 |

## สร้างงาน

1. **เพิ่มเอนด์พอยต์ในแอป** เช่น `POST /tasks/daily` สำหรับงานที่ทำซ้ำ แล้วดีพลอยและเผยแพร่
2. **สร้างงาน** เปิด **ดีพลอย › งานตามกำหนดเวลา** เลือกแอป แล้วใส่พาธและกำหนดเวลา
3. **รันเองหนึ่งครั้ง** ใช้ **รันทันที** แล้วตรวจรหัสการตอบกลับและบันทึกในประวัติการรัน

## ตรวจว่าการเรียกมาจากกำหนดเวลา

โดยค่าเริ่มต้น การเรียกไม่มีหลักฐานว่ามาจากที่ใด เลือกวิธีใดวิธีหนึ่ง

- ตั้งส่วนหัวของคุณเองในงาน เช่น `X-Cron-Secret` เก็บค่าเป็นความลับของแอป แล้วเปรียบเทียบในโค้ด
- เปิดโทเค็นที่ลงนาม การเรียกจะมี `Authorization: Bearer <JWT>` ให้ตรวจสอบกับ `https://api.agentlab.cresclab.com/.well-known/jwks.json` โดย `aud` คือ `franky:app:<ID แอป>`

## พฤติกรรมของการรัน

| รายการ     | พฤติกรรม                                                                          |
| ---------- | --------------------------------------------------------------------------------- |
| การซ้อนกัน | ไม่ซ้อนกัน รอบที่ถึงเวลาขณะรอบก่อนยังทำงานอยู่จะถูกข้าม                           |
| การส่ง     | อย่างน้อยหนึ่งครั้ง จึงอาจได้รับซ้ำ ให้กรองรายการซ้ำด้วยส่วนหัว `X-Franky-Run-Id` |
| การลองใหม่ | ค่าเริ่มต้น 0 ครั้ง สูงสุด 5 ครั้ง                                                |
| เวลาสูงสุด | 15 วินาทีถึง 30 นาที ค่าเริ่มต้น 3 นาที                                           |

```js server.js
const runId = req.headers["x-franky-run-id"];
if (await alreadyHandled(runId)) {
  res.writeHead(200).end();
  return;
}
```
