# Slack + TickTick + GPT로 만드는 아침 일정 비서 구상기

- 작성자: [단단한 항해사](https://community.clauders.ai/member/imported-member-If9lyjjQzA)
- 공간: [에이전트 / 노코드 자동화](https://community.clauders.ai/automation)
- 게시: 2025-11-24
- 연재: [자동 회고 리포트 만들기](https://community.clauders.ai/series/automated-daily-reflection) 1/1편
- 태그: #회고리포트
- 주소: https://community.clauders.ai/automation/post/slack-ticktick-gpt%EB%A1%9C-%EB%A7%8C%EB%93%9C%EB%8A%94-%EC%95%84%EC%B9%A8-%EC%9D%BC%EC%A0%95-%EB%B9%84%EC%84%9C-%EA%B5%AC%EC%83%81%EA%B8%B0-9a938cb0-e33d-89e3-919c-c640f9fcdf72

---

### 1. 문제 정의: "GPT를 밖으로 꺼내고 싶다"에서 시작

처음 제가 GPT에게 던진 요구는 아주 단순했습니다.

> 지금 너가 하는 기능을 Activepieces를 통해 자동화를 하려고 해.  
> ticktick과 연동도 하고, GPT에 들어오지 않고 슬랙/카카오톡/텔레그램 메시지로도 같은 경험을 하고 싶어.

여기서 GPT와 대화를 나누며 자연스럽게 기능이 쪼개졌습니다.

- 아침 스케줄링

  - 컨디션 질문
  - 오늘 고정 일정 확인 및 스케줄 조정
  - Obj1~3 (핵심 업무) 설정
  - 기타 업무 수집 및 오전/오후 배치
  - Markdown 요약 생성
- 핵심업무(Obj1~3) 진행 보조

  - "Obj 1 시작" 같은 트리거 → Worklog 템플릿 질문 → .md 정리
- TickTick 연동

  - 오늘 Obj1~3를 TickTick에 태스크로 생성
  - 기타 업무와 동기화
- 메신저 인터페이스

  - 텔레그램/슬랙/카톡에서 문자를 보내면 → GPT가 답변 → 다시 같은 채널로 응답

GPT는 이 기능들을 바탕으로 **전체 구조**를 이렇게 잡아줬습니다.

> 메신저 ↔ Activepieces ↔ (OpenAI API + TickTick API + 상태 저장 DB)

이 구조를 기준으로 세부 시나리오를 하나씩 좁혀가기 시작했습니다.

### 2. 시나리오 선택: Daily Schedule v1부터

너무 많은 걸 한 번에 만들기보다는, GPT와 상의해서 다음 3가지 후보 중 하나를 먼저 만들기로 했습니다.

1. 아침 Daily Schedule (컨디션 → 스케줄 → TickTick 생성)
2. Obj 1~3 Worklog 플로우 (작업 시작 시 질문 & 정리)
3. TickTick 태스크를 메신저로 빠르게 추가/관리하는 최소 기능

이 중에서 **1번: 아침 Daily Schedule**을 v1으로 먼저 잡았습니다.

> "하루의 시작 의식"을 먼저 자동화하고,  
> 그 위에 Worklog/리마인더 같은 기능을 나중에 얹는 전략으로.

### 3. 채널 선택: 텔레그램에서 슬랙으로 방향 전환

초기 구상은 텔레그램 봇 기준이었지만, 제가 실제로는 텔레그램을 거의 쓰지 않는다는 문제가 있었습니다.

그래서 GPT에게 이렇게 말했습니다.

> 텔레그램을 안 쓰는데, 굳이 텔레그램으로 해야 할까?  
> 슬랙이나 카카오톡으로 구현할 수 있으면 더 좋겠다.

GPT는

- 구현 난이도
- Activepieces와의 연동 난이도  
  을 고려해서 **1차 채널은 슬랙**으로 정하는 방향을 제안했고, 저도 이에 동의했습니다.

정리하면:

- v1: **슬랙 DM**을 통해 아침 스케줄을 함께 짠다.
- 나중에: 텔레그램 혹은 카카오톡으로 확장 가능성을 열어둔다.

### 4. 0단계 – 전체 아키텍처 구상

GPT와 대화를 통해 정리된 전체 구조는 아래와 같습니다.

- **입력/출력 채널**: 슬랙 봇 DM
- **오케스트레이션**: Activepieces 플로우
- **두뇌(로직)**: OpenAI API (GPT)
- **작업 관리**: TickTick API
- **상태 저장소**: Activepieces Data Store 또는 별도 DB (예: Airtable/Notion)

흐름을 텍스트로 표현하면:

1. 슬랙에서 `/day` 또는 "시작하기"를 입력하거나, 08:30 알림에서 버튼 클릭
2. Activepieces가 슬랙 이벤트를 받아서 해당 `user_id`와 **오늘 날짜**로 세션 조회
3. 세션 상태(phase, answers)에 따라 어떤 질문을 할지 결정 → GPT 호출
4. GPT가 **다음에 보낼 메시지 + 업데이트된 상태**를 JSON으로 반환
5. Activepieces가 JSON을 파싱해서

   - 슬랙으로 메시지 전송
   - 상태를 Data Store에 저장
   - 스케줄이 완성되면 TickTick에 태스크 생성

이때 GPT에게는 매번 이런 형식의 응답을 요구하는 설계까지 했습니다.

```
{
  "reply_text": "사용자에게 보낼 다음 질문 또는 최종 요약",
  "phase": "ASK_CONDITION",
  "answers_delta": {
    "condition": {
      "sleep_hours": 6.5,
      "body_score": 7,
      "condition_score": 6,
      "focus_score": 5
    }
  },
  "is_finished": false,
  "schedule_structured": null
}
```

스케줄이 완성되는 마지막 단계에서는 `is_finished: true`와 함께 아래처럼 구조화된 결과를 돌려주도록 구상했습니다.

```
{
  "reply_text": "오늘 스케줄 정리했어요:\n```markdown\n# Daily Schedule...\n```",
  "phase": "FINISHED",
  "answers_delta": { ... },
  "is_finished": true,
  "schedule_structured": {
    "core": [
      { "title": "Obj1 제목", "block": "10:00-11:30" },
      { "title": "Obj2 제목", "block": "14:00-15:30" },
      { "title": "Obj3 제목", "block": "16:00-17:30" }
    ],
    "misc_am": ["업무 A", "업무 B"],
    "misc_pm": ["업무 C"]
  }
}
```

이 JSON을 기반으로 TickTick에 태스크를 만드는 단계까지 구상했습니다.

### 5. 1단계 – 아침 08:30 슬랙 알림 & 시작 방식

제가 GPT와 함께 정의한 v1 시나리오에서, 사용자는 이렇게 하루를 시작합니다.

1) 08:30 자동 DM 알림

매일 08:30, 슬랙 봇이 DM으로 메시지를 보냅니다.

> 🌅 좋은 아침이에요!  
> 오늘 09:00~18:00 일정 같이 짜볼까요?

> [시작하기] [오늘은 패스]

- 이 알림은 **시간 기반 트리거(크론)**로 Activepieces에서 실행
- 슬랙에서는 Block Kit 버튼으로 구현 → 버튼 클릭이 다시 Activepieces 트리거가 됨

2) 수동 시작도 가능해야 함

알림을 놓쳤거나 아예 보지 못한 날을 위해, GPT와 이렇게 합의했습니다.

- 슬래시 커맨드 `/day` 또는 `/schedule`
- 혹은 봇 DM에 그냥 "시작하기", "오늘 일정 시작" 같은 키워드를 보내도 플로우 시작

그래서 **“푸시 + 풀” 둘 다 열어둔 구조**로 설계했습니다.

### 6. 2단계 – 컨디션 체크 개편: 숫자 기반 입력

처음 GPT가 제안했던 컨디션 질문은 감정 위주의 서술형이었는데,  
저는 나중에 데이터를 쌓아서 패턴을 보고 싶어서 **숫자 기반**으로 바꾸자고 요청했습니다.

그래서 아래와 같이 재정의했습니다.

1. **수면시간**

   - 질문: "어제 총 수면시간은 몇 시간이었나요? 숫자로 적어주시고, 잘 모르겠으면 `?`를 입력해주세요."
   - 입력: `6`, `7.5`, 혹은 `?`
   - 저장: `sleep_hours: 6.0` 또는 `null`
2. **몸 상태 (body_score)**

   - 질문: "지금 몸 상태를 1~10으로 표현하면 몇 점인가요?\n1: 거의 방전 / 10: 완전 쌩쌩"
   - 입력: `1`~`10`
3. **컨디션(종합 느낌, condition_score)**

   - 질문: "오늘 전반적인 컨디션(기분/에너지)을 1~10으로 표현하면 몇 점일까요?"
4. **집중력 (focus_score)**

   - 질문: "지금 집중력은 1~10 중 몇 점 같아요?"

GPT와 정의한 컨디션 데이터 구조는 아래와 같습니다.

```
"condition": {
  "sleep_hours": 6.5,
  "body_score": 7,
  "condition_score": 6,
  "focus_score": 5
}
```

이 값들은

- Daily Schedule 마크다운 상단에 그대로 노출하고,
- 나중에는 "컨디션 vs 하루 성과"를 보기 위한 지표로도 활용할 계획입니다.

### 7. 3단계 – TickTick에서 오늘 고정 일정 불러오기

컨디션을 기록한 다음 단계로, 저는 이렇게 제안했습니다.

> 2단계 고정일정은 TickTick에서 확인하고 알려주면 좋을 것 같다.  
> TickTick에 오늘 날짜 스케줄을 확인하고 이미 잡힌 일정이 있으면/없으면 각각 다르게 안내했으면 좋겠다.

이에 맞춰 GPT와 함께 다음과 같이 설계했습니다.

1) TickTick에서 오늘 일정 조회

- Activepieces가 TickTick API를 통해 **오늘 날짜 기준 일정/태스크 조회**
- 그 중에서

  - 시간 정보가 있는 일정
  - 혹은 "고정일정"으로 분류된 리스트/태그만 필터링

내부적으로는 예를 들어 이런 형태로 가지고 있도록 구상했습니다.

```
"fixed_events_from_ticktick": [
  { "title": "팀 회의", "start": "11:00", "end": "12:00" },
  { "title": "병원", "start": "15:30", "end": "16:00" }
]
```

2) 슬랙에 사용자 친화적으로 보여주기

**고정 일정이 있을 때**

> "현재 TickTick에 오늘 잡힌 일정이 확인됩니다.\n\n11:00~12:00 팀 회의\n15:30~16:00 병원\n\n추가로 더 있는 일정이나, 변경하고 싶은 일정이 있으신가요?"

**고정 일정이 없을 때**

> "현재 TickTick에 기록된 오늘의 고정 일정은 확인되지 않습니다.\n추가 일정이나 변경사항이 있으신가요?\n(예: 11:00~12:00 팀 미팅, 15:00 치과 등)\n없으면 '없어요'라고 답해주세요."

사용자가 여기서

- "변경 없어요"
- "13:00~14:00 점심 약속 있어요"
- "팀 회의는 11:30~12:30으로 변경됐어요"  
  같이 답하면, GPT가 이를 파싱해서 최종 고정 일정 리스트를 확정하는 그림입니다.

3) 기본 타임블록과의 자동 재배치

이후에는

- 09~18시 기본 타임블록(버퍼, Obj1~3, 점심 등)
- 고정 일정 리스트  
  를 가지고 **ScheduleAdjustMechanism 규칙**에 따라 자동 재배치를 하도록 구상했습니다.

예를 들어 이런 규칙들입니다.

- 점심, 퇴근 시간은 최대한 고정
- 고정 일정이 버퍼 시간을 침범하면 버퍼부터 줄이기
- Obj 블록이 60분 이상 잘리면 다른 블록으로 이동/재배치
- 30분 미만이면 앞뒤로 당겨붙이기 등

이 재배치 결과는 나중에

- 핵심 업무(Obj1~3)
- 기타 업무(오전/오후)  
  입력까지 모두 받은 뒤, 최종 Daily Schedule 마크다운에 **표 형태로 정리해서 보여주는 것**까지 함께 설계해 두었습니다.

## 결과와 배운 점

이번 대화와 구상 과정을 통해 느낀 점을 정리해보면:

1. **"무엇을 만들지"를 글로 쓰는 것 자체가 큰 일이다** 🧠

   - 처음에는 그냥 "GPT를 Activepieces로 옮겨서 자동화하고 싶다"는 한 줄짜리 욕망뿐이었습니다.
   - GPT와 시나리오를 쪼개다 보니,  
     → 아침 Daily Schedule, Worklog, 리마인더 등 여러 기능 덩어리가 보이기 시작했습니다.
2. **시나리오를 먼저 잡으니, 구현은 그 다음이었다**

   - "유저 입장에서 아침에 어떤 흐름으로 대화가 흘러가야 자연스러운지"를 먼저 정리했습니다.
   - 그래서 v1을 "아침 08:30 알림 + 컨디션 + 고정 일정까지"로 딱 잘라서 정의할 수 있었고,
   - 나머지 기능들은 v2로 미뤄두는 의사결정이 쉬워졌습니다.
3. **채널 선택도 요구사항의 일부라는 걸 깨달았다**

   - 텔레그램이 예시로 많이 나오지만, 저는 텔레그램을 거의 쓰지 않습니다.
   - 실제 사용하는 도구(슬랙)를 기준으로 다시 설계하니,  
     "내가 정말 내일 아침부터 쓸 수 있는 흐름"이 그려졌습니다.
4. **GPT는 자동화 설계의 파트너로 쓰기 좋다**

   - GPT가 자동화 플로우를 "다 짜주는" 도구가 아니라,  
     **생각을 구조화해주는 파트너**라는 느낌이 들었습니다.
   - 특히 JSON 스키마, 상태 필드, 단계 이름(phase) 같은 것들을 함께 논의하면서  
     제가 머릿속으로만 갖고 있던 흐름이 문서화되었습니다.
5. **다음 단계가 자연스럽게 보인다**

   - 지금까지의 구상 덕분에, 다음에 무엇을 하면 될지가 명확합니다.
   - 예를 들어:

     - 슬랙 기준 `/day` vs 버튼 중심 중 1차 구현 방식 선택
     - GPT 시스템 프롬프트를 실제로 작성
     - Activepieces에서

       - 슬랙 트리거
       - Data Store 구조
       - OpenAI 호출 액션  
         을 블록 단위로 만들기

## 도움 받은 글

- 🤖 ChatGPT 대화 공유 링크(요구사항 구체화 전 과정)
- 🧩 Activepieces 공식 Slack / TickTick 연동 페이지
- 📚 TickTick, 슬랙, OpenAI API 문서 및 Activepieces 관련 블로그 글들

이번 사례는 "아직 구현 전" 단계지만,  
**어떻게 생각을 구조화하고, 어떤 기준으로 v1의 범위를 자를지**에 집중한 구상기입니다.  
앞으로 실제 Activepieces 플로우를 만들면서 겪는 시행착오도 이어서 정리해볼 예정입니다. 😊
