# 待命排班 API 參考

Source: https://instatus.com/help/zh-tw/api/on-call-schedules

## 欄位的可用值

**限制類型**

| 值 | 說明 |
| --------------- | -------------------------------------------- |
| `NONE` | 無限制 |
| `TIMEOFDAY` | 依每日特定時段限制 |
| `TIMEINTERVALS` | 依特定時間區間限制 |

**輪值類型**

| 值 | 說明 |
| -------- | ---------------------------------- |
| `DAILY` | 每日輪值 |
| `WEEKLY` | 每週輪值 |
| `CUSTOM` | 依自訂排班輪值 |

**星期**

| 值 | 說明 |
| ----------- | ----------- |
| `SATURDAY` | 星期六 |
| `SUNDAY` | 星期日 |
| `MONDAY` | 星期一 |
| `TUESDAY` | 星期二 |
| `WEDNESDAY` | 星期三 |
| `THURSDAY` | 星期四 |
| `FRIDAY` | 星期五 |

## 取得待命排班成員

**端點：**

```bash
GET /on-call-schedules/:id/members
```

**請求範例**

```bash
GET /on-call-schedules/clzmgn2ze40301poblv9e1pq5/members
```

**回應範例**

```json
{
  "currentMembers": [
    {
      "id": "clh8nmaan72592bfokqjqd95s1",
      "name": null,
      "email": "member1@email.com",
      "phone": null,
      "avatar": "https://example.com/avatar.jpg"
    }
  ],
  "nextMembers": [
    {
      "id": "clzajmm98115510h5olxn5i7ljr",
      "name": null,
      "email": "member2@email.com",
      "phone": null,
      "avatar": null
    }
  ],
  "allMembers": [
    {
      "id": "clh8nmaan72592bfokqjqd95s1",
      "name": null,
      "email": "member1@email.com",
      "phone": null,
      "avatar": "https://example.com/avatar.jpg"
    },
    {
      "id": "clzajmm98115510h5olxn5i7ljr",
      "name": null,
      "email": "member2@email.com",
      "phone": null,
      "avatar": null
    }
  ]
}
```

## 建立待命排班

**端點：**

```bash
POST /on-call-schedules
```

**請求範例**

```json
{
  "name": "Primary On-call Schedule",
  "description": "This schedule is for the primary on-call team.",
  "onCallShifts": [
    {
      "name": "Primary",
      "members": [
        {
          "workspaceMemberId": "member123",
          "color": "#FF5733"
        },
        {
          "workspaceMemberId": "member456",
          "color": "#33C4FF"
        }
      ],
      "rotationType": "WEEKLY",
      "customRotationTypeValue": null,
      "customRotationTypeUnit": null,
      "startDate": "2023-08-08T08:00:00Z",
      "endDate": "2024-08-21T08:42:00.000Z",
      "restrictionType": "TIMEINTERVALS",
      "timeOfDayRestrictionStartTime": null,
      "timeOfDayRestrictionEndTime": null,
      "timeIntervals": [
        {
          "startDay": "SATURDAY",
          "startDayTime": "1970-01-01T21:00:00.000Z",
          "endDay": "SUNDAY",
          "endDayTime": "1970-01-01T03:00:00.000Z"
        }
      ]
    }
  ]
}
```

**回應範例**

```json
{
  "id": "clzmgn2ze40301poblv9e1pq5",
  "name": "Primary On-call Schedule",
  "description": "This schedule is for the primary on-call team.",
  "status": "ACTIVE",
  "onCallShifts": [
    {
      "id": "clzmgn2zt40361pobj78giwf7",
      "name": "Primary",
      "order": 1,
      "members": [
        {
          "id": "clzmgn2zt40401pobjzq0pwjd",
          "order": 3,
          "color": "#0470a6",
          "workspaceMember": {
            "id": "member123",
            "user": {
              "id": "clh8nmaan72592bfokqjqd95s1",
              "name": null,
              "email": "member12@email.com",
              "avatar": null
            }
          }
        },
        {
          "id": "clzmgn2zt40381pob690bwaxx",
          "order": 1,
          "color": "#195397",
          "workspaceMember": {
            "id": "member456",
            "user": {
              "id": "clzajmm98115510h5olxn5i7ljr",
              "name": null,
              "email": "member45@email.com",
              "avatar": null
            }
          }
        }
      ],
      "rotationType": "WEEKLY",
      "customRotationTypeValue": null,
      "customRotationTypeUnit": null,
      "startDate": "2024-08-09T08:42:34.557Z",
      "endDate": "2024-08-21T08:42:00.000Z",
      "restrictionType": "TIMEINTERVALS",
      "timeOfDayRestrictionStartTime": null,
      "timeOfDayRestrictionEndTime": null,
      "timeIntervals": [
        {
          "id": "clzmjq8bn313521ioblyzg7hic",
          "startDay": "SATURDAY",
          "startDayTime": "1970-01-01T21:00:00.000Z",
          "endDay": "SUNDAY",
          "endDayTime": "1970-01-01T03:00:00.000Z"
        }
      ]
    }
  ]
}
```

## 更新待命排班

**端點：**

```bash
PUT /on-call-schedules/:id
```

**請求範例**

```bash
PUT /on-call-schedules/clzmgn2ze40301poblv9e1pq5
```

```json
{
  "id": "clzmgn2ze40301poblv9e1pq5",
  "name": "Name Update",
  "description": "This schedule is for the primary on-call team.",
  "status": "ACTIVE",
  "onCallShifts": [
      {
          "id": "clzmgn2zt40361pobj78giwf7",
          "name": "Primary",
          "order": 1,
          "members": [
              {
                  "id": "clzmgn2zt40401pobjzq0pwjd",
                  "order": 3,
                  "color": "#0470a6",
                  "workspaceMember": {
                      "id": "member123",
                      "user": {
                          "id": "clh8nmaan72592bfokqjqd95s1",
                          "name": null,
                          "email": "member12@email.com",
                          "avatar": null
                      }
                  }
              },
              {
                  "id": "clzmgn2zt40381pob690bwaxx",
                  "order": 1,
                  "color": "#195397",
                  "workspaceMember": {
                      "id": "member456",
                      "user": {
                          "id": "clzajmm98115510h5olxn5i7ljr",
                          "name": null,
                          "email": "member45@email.com",
                          "avatar": null
                      }
                  }
              }
          ],
          "rotationType": "WEEKLY",
          "customRotationTypeValue": null,
          "customRotationTypeUnit": null,
          "startDate": "2024-08-09T08:42:34.557Z",
          "endDate": "2024-08-21T08:42:00.000Z",
          "restrictionType": "TIMEINTERVALS",
          "timeOfDayRestrictionStartTime": null,
          "timeOfDayRestrictionEndTime": null,
          "timeIntervals": [
              {
                  "id": "clzmjq8bn313521ioblyzg7hic",
                  "startDay": "SATURDAY",
                  "startDayTime": "1970-01-01T21:00:00.000Z",
                  "endDay": "SUNDAY",
                  "endDayTime": "1970-01-01T03:00:00.000Z"
              }
          ]
      }
  ]
}
```

**回應範例**

```json
{
  "id": "clzmgn2ze40301poblv9e1pq5",
  "name": "Name Update",
  "description": "This schedule is for the primary on-call team.",
  "status": "ACTIVE",
  "onCallShifts": [
      {
          "id": "clzmgn2zt40361pobj78giwf7",
          "name": "Primary",
          "order": 1,
          "members": [
              {
                  "id": "clzmgn2zt40401pobjzq0pwjd",
                  "order": 3,
                  "color": "#0470a6",
                  "workspaceMember": {
                      "id": "member123",
                      "user": {
                          "id": "clh8nmaan72592bfokqjqd95s1",
                          "name": null,
                          "email": "member12@email.com",
                          "avatar": null
                      }
                  }
              },
              {
                  "id": "clzmgn2zt40381pob690bwaxx",
                  "order": 1,
                  "color": "#195397",
                  "workspaceMember": {
                      "id": "member456",
                      "user": {
                          "id": "clzajmm98115510h5olxn5i7ljr",
                          "name": null,
                          "email": "member45@email.com",
                          "avatar": null
                      }
                  }
              }
          ],
          "rotationType": "WEEKLY",
          "customRotationTypeValue": null,
          "customRotationTypeUnit": null,
          "startDate": "2024-08-09T08:42:34.557Z",
          "endDate": "2024-08-21T08:42:00.000Z",
          "restrictionType": "TIMEINTERVALS",
          "timeOfDayRestrictionStartTime": null,
          "timeOfDayRestrictionEndTime": null,
          "timeIntervals": [
              {
                  "id": "clzmjq8bn313521ioblyzg7hic",
                  "startDay": "SATURDAY",
                  "startDayTime": "1970-01-01T21:00:00.000Z",
                  "endDay": "SUNDAY",
                  "endDayTime": "1970-01-01T03:00:00.000Z"
              }
          ]
      }
  ]
}
```

## 刪除待命排班

**端點：**

```bash
DELETE /on-call-schedules/:id
```

**請求範例**

```bash
DELETE /on-call-schedules/schedule-id-1
```

**回應範例**

```
204 No Content
```
