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

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

소개

"지금 너가 하는 기능을 Activepieces를 통해 자동화를 하려고 해"라는 생각에서 이 프로젝트가 시작됐습니다. 😊

평소에는 GPT를 직접 열어서 아침 스케줄을 함께 짰지만,

  • GPT 앱을 켜지 않아도

  • 슬랙이나 카카오톡 같은 메신저에서

  • TickTick과 연동된 나만의 아침 일정 비서
    를 만들고 싶어졌어요.

그런데 막상 자동화를 만들려고 보니, 제가 스스로도

"정확히 어떤 기능을, 어떤 흐름으로 구현하고 싶은지"
가 명확하지 않다는 걸 깨달았습니다.

그래서 먼저 GPT와 긴 대화를 나누면서,

  1. 어떤 시나리오부터 만들지

  2. 어떤 메신저 채널을 쓸지 (텔레그램 vs 슬랙 vs 카카오톡)

  3. 각 단계에서 봇이 어떤 질문을 하고, 내가 무엇을 입력할지

  4. TickTick, GPT, Activepieces가 각각 어떤 역할을 할지
    텍스트로 하나씩 정리해 나간 과정이 바로 이 사례입니다.


진행 방법

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 플로우를 만들면서 겪는 시행착오도 이어서 정리해볼 예정입니다. 😊

1
1개의 답글

뉴스레터 무료 구독

👉 이 게시글도 읽어보세요