You are currently viewing Slack Workflow로 일정 등록·업데이트 자동화: 주간 인증 시스템 구축

Slack Workflow로 일정 등록·업데이트 자동화: 주간 인증 시스템 구축

TL DR;

  • 방통대 학습 커뮤니티의 ‘1주5강 챌린지’를 Slack 워크플로우로 자동화하여 주간 목표 등록·일간 인증 과정을 간소화함.
  • 서버나 코드 없이 슬랙 내에서 완결되도록 설계해 운영 부담을 크게 줄였음.
  • 다만 연산·분기처리·데이터 가공 불가능등의 구조적 한계로 자동화 도구보다는 운영 보조도구에 적합

무엇을 자동화하고자 하였나


방통대 컴퓨터과학과 과정 중 참여한 커뮤니티에서 ‘1주5강 챌린지’라는 활동을 진행했다. 매주 수강 목표를 세우고, 매일 강의를 듣고 인증하는 방식으로 학습 습관을 유지하는 프로그램이다.

학기 대부분 과정이 온라인으로 진행되는 방통대 특성상, 다른일에 밀려 강의를 안듣거나/몰아듣게 되는데 매일 평소에 꾸준히 강의를 들어두는것이 학습에도/시험대비에도 유용하였었다.

  • 주간 목표 등록
  • 일간 목표 인증

25년도 2학기부터 운영을 인계받아, week5ver라는 이름으로 해당 활동을 이어가고 있다. week5ver 모집글

기존에는 수강 계획 등록 / 실제 인증 / 인증 확인 모두 수작업으로 이루어졌기에 사용자 입장에서도 다소 번거로운것이 있었고, 운영 측면에서도 부담이 클 것 같아 이를 개선하기 위해 Slack 워크플로우 기반 자동화 시스템을 구축했다.

다음 정도의 기능을 가진 간소한 자동화 파이프를 구축이 목표

  • 주간 목표 등록
    • 매주 토요일 트리거 및 2일 간 유효
    • 5개의 수강 목표를 입력받아서 어딘가에 저장
    • 등록 내역을 채널에 공유
  • 일간 목표 인증
    • 매일 트리거
    • 각 수강목표에 대해 인증자료 및 코멘트를 받아 상태 업데이트
    • 인증 내역을 채널에 공유

왜 슬랙 앱 대신 워크플로우를 사용하였나

Slack App을 직접 구현하면 자유도는 높지만, 서버 실행 환경·토큰 관리·Event API 연결 등 인프라 부담이 따른다.
반면 Slack Workflow는 슬랙 내부에서 작동하는 내장형 자동화 기능으로, 별도 서버나 외부 API 없이 실행된다.

  • 유지보수가 간단하고
  • 워크스페이스 내에서 완결적으로 작동하며
  • 유료 플랜을 사용 중이라 추가비용이 없음

이러한 슬랙 자동화 구성에 있어 일반적인 사례는 Slack Bolt Framework나 SDK를 사용하여 Slack App 을 구성하고 Slack API를 통해 요청을 전달받아 데이터를 조회하고 가공하고 저장하여 쓰는것이다.

Slack App의 장점은 SDK를 사용해 높은 자유도와 원하는 기능을 구성할 수 있지만, 단점은 결국 해당 코드가 프로세스로 동작해야, 다시말해 서버로 가동되어야 작동된다는 점이다. 그 과정에서 앱의 기능(목적)외에 고려해야할게 많아진다.(=복잡해진다)

슬랙봇 만들기 어렵지 않아요, 구름 테크블로그

우리가 자동화 할 대상인 Slack workspace(or server, 우측)에 대해 사용자가 개발한 Slack App(좌측)이 동작하는 방식을 간단히 나타내면 위와 같다. 슬랙 서버에서 /등록 과 같은 슬래시 커맨드나, 기타 다른 방법으로 이벤트를 생성하면 슬랙 앱이 해당 이벤트를 수신하고 결과를 돌려줘야한다. 서버에 대해 슬랙앱은 Event API를 통해 상호작용한다. 앱에 퍼블릭 엔드포인트를 뚫고 서버와 HTTP 방식으로 통신하거나, 앱에 xapp 인증토큰을 설정하고 해당 토큰 기반으로 서버와 socket 기반 방식으로 통신할 수 있다. 어느 방식이든 우리 앱이 슬랙 서버와 어떻게 통신할지 고민 및 설정이 필요하다.

Developing a serverless Slack app using AWS Step Functions and AWS Lambda, AWS Blog

서버 동작 환경 측면에서도.. 결국 앱이 살아서 응답받을 환경이 필요하다. 집 PC를 끄지않고 계속 켜놓거나 아님 AWS등 클라우드 서비스에서 EC2같은 컴퓨팅 환경에 앱을 구동하던지, 또는 Serverless로 요청시마다 서버를 띄우고 응답하고 내려가게 구현 할 수 있다. 일반적인 사례로는 Serverless 구조로 요청시 동작하는걸 권하긴 하는데.. coldstart등 초기 응답 지연 이슈도 걱정되고 (어려운 기능이 아닌데 바로바로 응답해야지) 결국 이 자동화에 대해 돈을 쓸껀가? 질문에 대해서 돈까지 쓰고싶진 않다는 생각이다.

이에 반해 Slack Workflow는 Slack Server에 내장되어있는 자체 자동화 도구이다. 코딩 작업 없이 간단히 UI 버튼으로 자동화를 생성 및 수정할 수 있으며 요청을 받아 처리할 앱 서버가 살아있는지 죽어있는지, 어떤 토큰을 사용 중이고 적절하게 접근할 수 있는지 등을 고려하지 않아도 되어 사용이 간편하다.

또한 워크플로는 무료플랜에서는 안되고 유료플랜에서만 가능하기에.. 구독비 냈으니까 비용 최대한 써먹고 싶은 생각도 있고, 간단한 서비스이기 때문에 굳이 구글 스프레드시트나 외부 도구도 엮지 않고 단순히 슬랙내에서 컨텍스트 전환 없이 완전히 시작되고 종결되는 구조를 원했다.

구성요소 소개

슬랙 워크플로우

4 simple ways to save time with Workflow Builder

워크플로 빌더는 Slack에서 일상 작업과 프로세스를 자동화하는 데 도움이 됩니다. 워크플로는 원하는 만큼 간단하거나 복잡해질 수 있으며, 작업을 수행하는 데 사용하는 다른 앱에 연결할 수도 있습니다.

Slack Workflow Builder Guide
  • 슬랙 워크플로우: 사용자가 입력·응답·업로드 등을 자동화된 단계(폼, 버튼, 메시지 등)로 수행하게 만드는 슬랙 내 자동 실행 시나리오.

슬랙 리스트

Slack Lists: What Are They and How Can They Benefit You?

리스트는 Slack에서 이루어지는 업무를 정리하고 협업하는 데 도움이 되며, 리스트를 사용하여 작업 관리, 프로젝트 작업 추적 등을 할 수 있습니다. 처음부터 리스트를 새로 만들거나 사용자 지정 가능한 템플릿을 선택하여 시작한 다음에 작업을 추가하고 리스트 항목에서 직접 다른 사람들과 협업하세요.

Slack에서 리스트 사용
  • 슬랙 리스트: 워크플로우나 수동 입력을 통해 생성된 항목(예: 목표, 할 일, 인증 내역 등)을 슬랙 내에서 테이블처럼 관리·업데이트할 수 있는 목록 기능.

구축 과정

일반적인 워크플로 등록 및 기능에 대한 설명은 생략, 구체적으로 어떻게 설정되어있는지 보고자 한다.

주간 목표 등록

  • 특정 시점에 채널에 메세지를 보내고, 버튼을 통해 양식 작성을 요청 한 뒤, 입력데이터를 리스트에 개별 레코드로 등록한 뒤, 원본 메세지의 댓글로 결과를 반환한다
    • 1. 메세지보내기 단계에서 버튼의 만료기간을 설정 가능
    • 2. 양식에서 정보 수집 단계에서 입력 양식외에 사용자명 등 수집
    • 3~7. 입력값외에 리스트의 다른 필드값을 사전 지정 가능
    • 8. 변수삽입을 통해 워크플로우 내 일부값 재사용 가능

week5ver-weekly-goals-collector.json

  • workflow는 json으로 내보내기도 가능
{
    "workflow": {
        "id": "Wf09JEN6EPRR",
        "title": "week5ver-weekly-goals-collector",
        "description": "week5ver 주간 목표 수집기",
        "icon": "https://avatars.slack-edge.com/2025-10-04/9638442501604_827151bda5f454d4eae1_192.png",
        "input_parameters": {
            "Ft09JQLRHW6Q__event_timestamp": {
                "type": "slack#/types/timestamp",
                "name": "Ft09JQLRHW6Q__event_timestamp",
                "description": "Time when workflow started",
                "title": "워크플로가 시작된 시간"
            }
        },
        "steps": [
            {
                "id": "020dc9de-fa7e-44d1-a9df-c0313b80905f",
                "function_id": "Fn0102",
                "inputs": {
                    "message": {
                        "hidden": false,
                        "locked": false,
                        "value": [
                            {
                                "type": "rich_text",
                                "elements": [
                                    {
                                        "type": "rich_text_section",
                                        "elements": [
                                            {
                                                "name": "calendar",
                                                "type": "emoji",
                                                "unicode": "1f4c6"
                                            },
                                            {
                                                "text": "  ",
                                                "type": "text"
                                            },
                                            {
                                                "id": "{time.format(seconds={{inputs.Ft09JQLRHW6Q__event_timestamp}}, timezone=Asia/Seoul, format='Y-m-d')}",
                                                "type": "workflowtoken",
                                                "property": "",
                                                "data_type": "string"
                                            },
                                            {
                                                "text": "  에 시작되는 demo2 주간 목표 등록\n---\n",
                                                "type": "text"
                                            },
                                            {
                                                "name": "pushpin",
                                                "type": "emoji",
                                                "style": {
                                                    "bold": true
                                                },
                                                "unicode": "1f4cc"
                                            },
                                            {
                                                "text": " 타임라인",
                                                "type": "text",
                                                "style": {
                                                    "bold": true
                                                }
                                            },
                                            {
                                                "text": "\n",
                                                "type": "text"
                                            }
                                        ]
                                    },
                                    {
                                        "type": "rich_text_list",
                                        "style": "bullet",
                                        "border": 0,
                                        "indent": 0,
                                        "elements": [
                                            {
                                                "type": "rich_text_section",
                                                "elements": [
                                                    {
                                                        "name": "hammer",
                                                        "type": "emoji",
                                                        "unicode": "1f528"
                                                    },
                                                    {
                                                        "text": " 251004 - demo",
                                                        "type": "text"
                                                    }
                                                ]
                                            },
                                            {
                                                "type": "rich_text_section",
                                                "elements": [
                                                    {
                                                        "name": "hammer",
                                                        "type": "emoji",
                                                        "unicode": "1f528"
                                                    },
                                                    {
                                                        "text": " 251011~12 - demo2 > 1013~1019 목표등록",
                                                        "type": "text"
                                                    }
                                                ]
                                            },
                                            {
                                                "type": "rich_text_section",
                                                "elements": [
                                                    {
                                                        "name": "seedling",
                                                        "type": "emoji",
                                                        "unicode": "1f331"
                                                    },
                                                    {
                                                        "text": " 251018~19 - 1주차 > 1020~1026 목표등록",
                                                        "type": "text"
                                                    }
                                                ]
                                            },
                                            {
                                                "type": "rich_text_section",
                                                "elements": [
                                                    {
                                                        "name": "herb",
                                                        "type": "emoji",
                                                        "unicode": "1f33f"
                                                    },
                                                    {
                                                        "text": " 251025~26 - 2주차 > 1027~1102 목표등록",
                                                        "type": "text"
                                                    }
                                                ]
                                            },
                                            {
                                                "type": "rich_text_section",
                                                "elements": [
                                                    {
                                                        "name": "potted_plant",
                                                        "type": "emoji",
                                                        "unicode": "1fab4"
                                                    },
                                                    {
                                                        "text": " 251101~02 - 3주차 > 1103~1109 목표등록",
                                                        "type": "text"
                                                    }
                                                ]
                                            },
                                            {
                                                "type": "rich_text_section",
                                                "elements": [
                                                    {
                                                        "name": "evergreen_tree",
                                                        "type": "emoji",
                                                        "unicode": "1f332"
                                                    },
                                                    {
                                                        "text": " 251108~09 - 4주차 > 1110~1116 목표등록",
                                                        "type": "text"
                                                    }
                                                ]
                                            },
                                            {
                                                "type": "rich_text_section",
                                                "elements": [
                                                    {
                                                        "name": "fire",
                                                        "type": "emoji",
                                                        "unicode": "1f525"
                                                    },
                                                    {
                                                        "text": " 251115~16 - 5주차 > 1117~1123 목표등록",
                                                        "type": "text"
                                                    }
                                                ]
                                            },
                                            {
                                                "type": "rich_text_section",
                                                "elements": [
                                                    {
                                                        "name": "trophy",
                                                        "type": "emoji",
                                                        "unicode": "1f3c6"
                                                    },
                                                    {
                                                        "text": " 251122~23 - 6주차 > 1124~1130 목표등록",
                                                        "type": "text"
                                                    }
                                                ]
                                            }
                                        ]
                                    },
                                    {
                                        "type": "rich_text_section",
                                        "elements": [
                                            {
                                                "text": "---",
                                                "type": "text"
                                            }
                                        ]
                                    }
                                ]
                            }
                        ]
                    },
                    "channel_id": {
                        "hidden": false,
                        "locked": false,
                        "value": "C08NK8YCYDN"
                    },
                    "interactive_blocks": {
                        "hidden": false,
                        "locked": false,
                        "value": [
                            {
                                "type": "actions",
                                "elements": [
                                    {
                                        "text": {
                                            "text": "주간 목표 등록",
                                            "type": "plain_text",
                                            "emoji": true
                                        },
                                        "type": "button",
                                        "style": "primary",
                                        "value": "button",
                                        "action_id": "91e1d5ac-7f6b-4c7d-b593-74350ef7e403"
                                    }
                                ]
                            }
                        ]
                    },
                    "interactivity_configuration": {
                        "hidden": false,
                        "locked": false,
                        "value": {
                            "actions": {
                                "91e1d5ac-7f6b-4c7d-b593-74350ef7e403": {
                                    "is_button_multi_click": true,
                                    "is_mutually_exclusive": false
                                }
                            }
                        }
                    }
                }
            },
            {
                "id": "40d2a231-f0a4-459c-addb-6ae8bcd49d4a",
                "function_id": "Fn010N",
                "inputs": {
                    "title": {
                        "hidden": false,
                        "locked": false,
                        "value": "다음주 수강 목표를 입력해주세요"
                    },
                    "fields": {
                        "hidden": false,
                        "locked": false,
                        "value": {
                            "elements": [
                                {
                                    "name": "e6588714-18e0-4fa8-974b-4d817d4a052a",
                                    "type": "string",
                                    "title": "수강 예정 강의 입력 (1/5)",
                                    "description": "자유롭게 입력해주시면 됩니다"
                                },
                                {
                                    "name": "cd247591-ac4e-41fc-a3e9-449beb8b922b",
                                    "type": "slack#/types/date",
                                    "title": "수강예정일-목표1",
                                    "description": "수강예정일"
                                },
                                {
                                    "name": "66d2b2b8-b64c-40d5-a306-1b0e8cce49dd",
                                    "type": "string",
                                    "title": "수강 예정 강의 입력 (2/5)",
                                    "description": "자유롭게 입력해주시면 됩니다"
                                },
                                {
                                    "name": "d0d4161d-21e8-4688-89e3-255ef7bb0ee6",
                                    "type": "slack#/types/date",
                                    "title": "수강예정일-목표2",
                                    "description": "수강예정일"
                                },
                                {
                                    "name": "d88eeb27-d183-46b3-9455-f20addb96aaa",
                                    "type": "string",
                                    "title": "수강 예정 강의 입력 (3/5)",
                                    "description": "자유롭게 입력해주시면 됩니다"
                                },
                                {
                                    "name": "7379859d-5833-4c92-b99b-53b949613b7c",
                                    "type": "slack#/types/date",
                                    "title": "수강예정일-목표3",
                                    "description": ""
                                },
                                {
                                    "name": "9c1d4135-c98d-4d32-afe9-f4ebdef35f75",
                                    "type": "string",
                                    "title": "수강 예정 강의 입력 (4/5)",
                                    "description": "자유롭게 입력해주시면 됩니다"
                                },
                                {
                                    "name": "ee980644-5f4c-4305-bca5-f6656179948a",
                                    "type": "slack#/types/date",
                                    "title": "수강예정일-목표4",
                                    "description": "수강예정일-목표"
                                },
                                {
                                    "name": "41831359-1216-4b51-8047-69043d990060",
                                    "type": "string",
                                    "title": "수강 예정 강의 입력 (5/5)",
                                    "description": "자유롭게 입력해주시면 됩니다"
                                },
                                {
                                    "name": "1b631168-f84c-4fa2-893b-d4275e5172e7",
                                    "type": "slack#/types/date",
                                    "title": "수강예정일-목표5",
                                    "description": ""
                                }
                            ],
                            "required": []
                        }
                    },
                    "interactivity": {
                        "hidden": false,
                        "locked": false,
                        "value": "{{steps.020dc9de-fa7e-44d1-a9df-c0313b80905f.interactivity}}"
                    }
                }
            },
            {
                "id": "de912e2e-dfe9-408f-b2dc-e6129cca063c",
                "function_id": "Fn0133",
                "inputs": {
                    "columns": {
                        "hidden": false,
                        "locked": false,
                        "value": {
                            "name": "{{steps.40d2a231-f0a4-459c-addb-6ae8bcd49d4a.fields.e6588714-18e0-4fa8-974b-4d817d4a052a}}",
                            "Col09KD64QHLK": [
                                "OptCLC1YAKY"
                            ],
                            "todo_assignee": "{{steps.40d2a231-f0a4-459c-addb-6ae8bcd49d4a.submit_user}}",
                            "todo_due_date": "{{steps.40d2a231-f0a4-459c-addb-6ae8bcd49d4a.fields.cd247591-ac4e-41fc-a3e9-449beb8b922b}}",
                            "todo_completed": false,
                            "assignee_access_key": "edit"
                        }
                    },
                    "list_id": {
                        "hidden": false,
                        "locked": false,
                        "value": "F09JHMP3JLD"
                    }
                }
            },
            {
                "id": "37b6d1ff-3007-4524-b432-3dd1a33ed9a7",
                "function_id": "Fn0133",
                "inputs": {
                    "columns": {
                        "hidden": false,
                        "locked": false,
                        "value": {
                            "name": "{{steps.40d2a231-f0a4-459c-addb-6ae8bcd49d4a.fields.66d2b2b8-b64c-40d5-a306-1b0e8cce49dd}}",
                            "Col09KD64QHLK": [
                                "OptCLC1YAKY"
                            ],
                            "todo_assignee": "{{steps.40d2a231-f0a4-459c-addb-6ae8bcd49d4a.submit_user}}",
                            "todo_due_date": "{{steps.40d2a231-f0a4-459c-addb-6ae8bcd49d4a.fields.d0d4161d-21e8-4688-89e3-255ef7bb0ee6}}",
                            "todo_completed": false,
                            "assignee_access_key": "edit"
                        }
                    },
                    "list_id": {
                        "hidden": false,
                        "locked": false,
                        "value": "F09JHMP3JLD"
                    }
                }
            },
            {
                "id": "efaf4b5c-7d03-4dd9-a468-41a378aebed0",
                "function_id": "Fn0133",
                "inputs": {
                    "columns": {
                        "hidden": false,
                        "locked": false,
                        "value": {
                            "name": "{{steps.40d2a231-f0a4-459c-addb-6ae8bcd49d4a.fields.d88eeb27-d183-46b3-9455-f20addb96aaa}}",
                            "Col09KD64QHLK": [
                                "OptCLC1YAKY"
                            ],
                            "todo_assignee": "{{steps.40d2a231-f0a4-459c-addb-6ae8bcd49d4a.submit_user}}",
                            "todo_due_date": "{{steps.40d2a231-f0a4-459c-addb-6ae8bcd49d4a.fields.7379859d-5833-4c92-b99b-53b949613b7c}}",
                            "todo_completed": false,
                            "assignee_access_key": "edit"
                        }
                    },
                    "list_id": {
                        "hidden": false,
                        "locked": false,
                        "value": "F09JHMP3JLD"
                    }
                }
            },
            {
                "id": "a574bd3d-1d95-4f4d-a59d-356bd0bfe298",
                "function_id": "Fn0133",
                "inputs": {
                    "columns": {
                        "hidden": false,
                        "locked": false,
                        "value": {
                            "name": "{{steps.40d2a231-f0a4-459c-addb-6ae8bcd49d4a.fields.9c1d4135-c98d-4d32-afe9-f4ebdef35f75}}",
                            "Col09KD64QHLK": [
                                "OptCLC1YAKY"
                            ],
                            "todo_assignee": "{{steps.40d2a231-f0a4-459c-addb-6ae8bcd49d4a.submit_user}}",
                            "todo_due_date": "{{steps.40d2a231-f0a4-459c-addb-6ae8bcd49d4a.fields.ee980644-5f4c-4305-bca5-f6656179948a}}",
                            "todo_completed": false,
                            "assignee_access_key": "edit"
                        }
                    },
                    "list_id": {
                        "hidden": false,
                        "locked": false,
                        "value": "F09JHMP3JLD"
                    }
                }
            },
            {
                "id": "ebcbdf74-a34c-41ed-be89-340b937ef256",
                "function_id": "Fn0133",
                "inputs": {
                    "columns": {
                        "hidden": false,
                        "locked": false,
                        "value": {
                            "name": "{{steps.40d2a231-f0a4-459c-addb-6ae8bcd49d4a.fields.41831359-1216-4b51-8047-69043d990060}}",
                            "Col09KD64QHLK": [
                                "OptCLC1YAKY"
                            ],
                            "todo_assignee": "{{steps.40d2a231-f0a4-459c-addb-6ae8bcd49d4a.submit_user}}",
                            "todo_due_date": "{{steps.40d2a231-f0a4-459c-addb-6ae8bcd49d4a.fields.1b631168-f84c-4fa2-893b-d4275e5172e7}}",
                            "todo_completed": false,
                            "assignee_access_key": "edit"
                        }
                    },
                    "list_id": {
                        "hidden": false,
                        "locked": false,
                        "value": "F09JHMP3JLD"
                    }
                }
            },
            {
                "id": "e2c8ac7a-e21d-4bdb-9bcc-6c0f29be2e8e",
                "function_id": "Fn010P",
                "inputs": {
                    "message": {
                        "hidden": false,
                        "locked": false,
                        "value": [
                            {
                                "type": "rich_text",
                                "elements": [
                                    {
                                        "type": "rich_text_section",
                                        "elements": [
                                            {
                                                "name": "rocket",
                                                "type": "emoji",
                                                "unicode": "1f680"
                                            },
                                            {
                                                "text": " ",
                                                "type": "text"
                                            },
                                            {
                                                "id": "{{steps.40d2a231-f0a4-459c-addb-6ae8bcd49d4a.submit_user}}",
                                                "type": "workflowtoken",
                                                "property": "",
                                                "data_type": "slack#/types/user_id"
                                            },
                                            {
                                                "text": "   님이 다음의 주간 목표를 입력했습니다\n---\n",
                                                "type": "text"
                                            },
                                            {
                                                "name": "dart",
                                                "type": "emoji",
                                                "unicode": "1f3af"
                                            },
                                            {
                                                "text": " ",
                                                "type": "text"
                                            },
                                            {
                                                "text": "주간 수강 목표",
                                                "type": "text",
                                                "style": {
                                                    "bold": true
                                                }
                                            },
                                            {
                                                "text": "\n\n",
                                                "type": "text"
                                            },
                                            {
                                                "name": "one",
                                                "type": "emoji",
                                                "style": {
                                                    "bold": true
                                                },
                                                "unicode": "0031-fe0f-20e3"
                                            },
                                            {
                                                "text": "첫번째 수강 목표",
                                                "type": "text",
                                                "style": {
                                                    "bold": true
                                                }
                                            },
                                            {
                                                "text": "\n",
                                                "type": "text"
                                            },
                                            {
                                                "id": "{{steps.40d2a231-f0a4-459c-addb-6ae8bcd49d4a.fields.e6588714-18e0-4fa8-974b-4d817d4a052a}}",
                                                "type": "workflowtoken",
                                                "property": "",
                                                "data_type": "string"
                                            },
                                            {
                                                "text": " / ",
                                                "type": "text"
                                            },
                                            {
                                                "id": "{{steps.40d2a231-f0a4-459c-addb-6ae8bcd49d4a.fields.cd247591-ac4e-41fc-a3e9-449beb8b922b}}",
                                                "type": "workflowtoken",
                                                "property": "",
                                                "data_type": "slack#/types/date"
                                            },
                                            {
                                                "text": "\n\n",
                                                "type": "text"
                                            },
                                            {
                                                "name": "two",
                                                "type": "emoji",
                                                "style": {
                                                    "bold": true
                                                },
                                                "unicode": "0032-fe0f-20e3"
                                            },
                                            {
                                                "text": "두번째 수강 목표",
                                                "type": "text",
                                                "style": {
                                                    "bold": true
                                                }
                                            },
                                            {
                                                "text": "\n",
                                                "type": "text"
                                            },
                                            {
                                                "id": "{{steps.40d2a231-f0a4-459c-addb-6ae8bcd49d4a.fields.66d2b2b8-b64c-40d5-a306-1b0e8cce49dd}}",
                                                "type": "workflowtoken",
                                                "property": "",
                                                "data_type": "string"
                                            },
                                            {
                                                "text": " / ",
                                                "type": "text"
                                            },
                                            {
                                                "id": "{{steps.40d2a231-f0a4-459c-addb-6ae8bcd49d4a.fields.d0d4161d-21e8-4688-89e3-255ef7bb0ee6}}",
                                                "type": "workflowtoken",
                                                "property": "",
                                                "data_type": "slack#/types/date"
                                            },
                                            {
                                                "text": "\n\n",
                                                "type": "text"
                                            },
                                            {
                                                "name": "three",
                                                "type": "emoji",
                                                "style": {
                                                    "bold": true
                                                },
                                                "unicode": "0033-fe0f-20e3"
                                            },
                                            {
                                                "text": "세번째 수강 목표",
                                                "type": "text",
                                                "style": {
                                                    "bold": true
                                                }
                                            },
                                            {
                                                "text": "\n",
                                                "type": "text"
                                            },
                                            {
                                                "id": "{{steps.40d2a231-f0a4-459c-addb-6ae8bcd49d4a.fields.d88eeb27-d183-46b3-9455-f20addb96aaa}}",
                                                "type": "workflowtoken",
                                                "property": "",
                                                "data_type": "string"
                                            },
                                            {
                                                "text": " / ",
                                                "type": "text"
                                            },
                                            {
                                                "id": "{{steps.40d2a231-f0a4-459c-addb-6ae8bcd49d4a.fields.7379859d-5833-4c92-b99b-53b949613b7c}}",
                                                "type": "workflowtoken",
                                                "property": "",
                                                "data_type": "slack#/types/date"
                                            },
                                            {
                                                "text": "\n\n",
                                                "type": "text"
                                            },
                                            {
                                                "name": "four",
                                                "type": "emoji",
                                                "style": {
                                                    "bold": true
                                                },
                                                "unicode": "0034-fe0f-20e3"
                                            },
                                            {
                                                "text": "네번째 수강 목표",
                                                "type": "text",
                                                "style": {
                                                    "bold": true
                                                }
                                            },
                                            {
                                                "text": "\n",
                                                "type": "text"
                                            },
                                            {
                                                "id": "{{steps.40d2a231-f0a4-459c-addb-6ae8bcd49d4a.fields.9c1d4135-c98d-4d32-afe9-f4ebdef35f75}}",
                                                "type": "workflowtoken",
                                                "property": "",
                                                "data_type": "string"
                                            },
                                            {
                                                "text": " / ",
                                                "type": "text"
                                            },
                                            {
                                                "id": "{{steps.40d2a231-f0a4-459c-addb-6ae8bcd49d4a.fields.ee980644-5f4c-4305-bca5-f6656179948a}}",
                                                "type": "workflowtoken",
                                                "property": "",
                                                "data_type": "slack#/types/date"
                                            },
                                            {
                                                "text": "\n\n",
                                                "type": "text"
                                            },
                                            {
                                                "name": "five",
                                                "type": "emoji",
                                                "style": {
                                                    "bold": true
                                                },
                                                "unicode": "0035-fe0f-20e3"
                                            },
                                            {
                                                "text": "다섯번째 수강 목표",
                                                "type": "text",
                                                "style": {
                                                    "bold": true
                                                }
                                            },
                                            {
                                                "text": "\n",
                                                "type": "text"
                                            },
                                            {
                                                "id": "{{steps.40d2a231-f0a4-459c-addb-6ae8bcd49d4a.fields.41831359-1216-4b51-8047-69043d990060}}",
                                                "type": "workflowtoken",
                                                "property": "",
                                                "data_type": "string"
                                            },
                                            {
                                                "text": " / ",
                                                "type": "text"
                                            },
                                            {
                                                "id": "{{steps.40d2a231-f0a4-459c-addb-6ae8bcd49d4a.fields.1b631168-f84c-4fa2-893b-d4275e5172e7}}",
                                                "type": "workflowtoken",
                                                "property": "",
                                                "data_type": "slack#/types/date"
                                            },
                                            {
                                                "text": "\n\n",
                                                "type": "text"
                                            },
                                            {
                                                "name": "jigsaw",
                                                "type": "emoji",
                                                "unicode": "1f9e9"
                                            },
                                            {
                                                "text": " 매일 한 조각씩, 이번 주 그림을 완성합시다.",
                                                "type": "text"
                                            }
                                        ]
                                    }
                                ]
                            }
                        ]
                    },
                    "message_context": {
                        "hidden": false,
                        "locked": false,
                        "value": "{{steps.020dc9de-fa7e-44d1-a9df-c0313b80905f.message_context}}"
                    },
                    "reply_broadcast": {
                        "hidden": false,
                        "locked": false,
                        "value": "false"
                    }
                }
            },
            {
                "id": "1879a93e-918b-46fb-8d97-8eeddc1eafcc",
                "function_id": "Fn013B",
                "inputs": {
                    "list_id": {
                        "hidden": false,
                        "locked": false,
                        "value": "F09JHMP3JLD"
                    },
                    "filter_by": {
                        "hidden": false,
                        "locked": false,
                        "value": "filter_by_list_columns"
                    },
                    "filter_condition": {
                        "hidden": false,
                        "locked": false,
                        "value": {
                            "name": "주간등록체크",
                            "Col09KD64QHLK": [
                                "OptCLC1YAKY"
                            ],
                            "todo_assignee": "{utils.echo(input={{steps.40d2a231-f0a4-459c-addb-6ae8bcd49d4a.submit_user}})}",
                            "todo_completed": false
                        }
                    }
                }
            },
            {
                "id": "6cefaee1-91b3-47ad-8cf7-ec000c535f55",
                "function_id": "Fn013E",
                "inputs": {
                    "list_id": {
                        "hidden": false,
                        "locked": false,
                        "value": "F09JHMP3JLD"
                    },
                    "record_id": {
                        "hidden": false,
                        "locked": false,
                        "value": "{{steps.1879a93e-918b-46fb-8d97-8eeddc1eafcc.record_id}}"
                    },
                    "updated_columns": {
                        "hidden": false,
                        "locked": false,
                        "value": {
                            "todo_completed": true
                        }
                    }
                }
            }
        ]
    },
    "triggers": [
        {
            "name": "week5ver-weekly-goals-collector",
            "type": "scheduled",
            "inputs": {
                "Ft09JQLRHW6Q__event_timestamp": {
                    "value": "{{event_timestamp}}",
                    "locked": false,
                    "hidden": false
                }
            },
            "schedule": {
                "start_time": "2025-10-11T15:00:00+0000",
                "timezone": "Asia/Seoul",
                "frequency": {
                    "type": "weekly",
                    "on_days": [
                        "Saturday"
                    ]
                }
            }
        }
    ]
}

일간 목표 인증

  • 매일 채널에 공유된 메세지를 통해 개인메세지로 한번 더 발송, 개인메세지 버튼을 통해 정보 수집 후 해당하는 리스트 항목을 찾고, 사용자 입력값을 받아 업데이트 후 결과 채널 공유
    • 3. 사용자에게 메세지 부분은 없어도 될것같은데 워크플로우상 누락불가
    • 4. 리스트항목 업데이트.. 요부분이 어려운데 결국 하나의 항목ID(item ID)를 찾아와야함
      • 2. 리스트 선택에서 적절한 값으로 필터링, 대상 여러개면 하나만 선택됨
      • 4. 리스트에서 항목을 가져올때 1개만 가져올 수 있음, 이때 2에서 선택한 항목 ID 필요. 이는 항목 URL의 끝에서도 확인할 수 있음

week5ver-daily-goals-updator.json

{
    "workflow": {
        "id": "Wf09K1A8CSNM",
        "title": "week5ver-daily-goal-updater",
        "description": "week5ver 일간목표 업데이트기",
        "icon": "https://avatars.slack-edge.com/2025-10-04/9663144426672_759193706ee0dbcfe206_192.png",
        "input_parameters": {
            "Ft09KGLVDZ6C__event_timestamp": {
                "type": "slack#/types/timestamp",
                "name": "Ft09KGLVDZ6C__event_timestamp",
                "description": "Time when workflow started",
                "title": "워크플로가 시작된 시간"
            }
        },
        "steps": [
            {
                "id": "3a636b5b-50e6-414c-90be-462961a53a15",
                "function_id": "Fn0102",
                "inputs": {
                    "message": {
                        "hidden": false,
                        "locked": false,
                        "value": [
                            {
                                "type": "rich_text",
                                "elements": [
                                    {
                                        "type": "rich_text_section",
                                        "elements": [
                                            {
                                                "name": "runner",
                                                "type": "emoji",
                                                "style": {
                                                    "bold": true
                                                },
                                                "unicode": "1f3c3"
                                            },
                                            {
                                                "id": "{time.format(seconds={{inputs.Ft09KGLVDZ6C__event_timestamp}}, timezone=Asia/Seoul, format='Y-m-d')}",
                                                "type": "workflowtoken",
                                                "style": {
                                                    "bold": true
                                                },
                                                "property": "",
                                                "data_type": "string"
                                            },
                                            {
                                                "text": " ",
                                                "type": "text",
                                                "style": {
                                                    "bold": true
                                                }
                                            },
                                            {
                                                "text": "의 demo1 등록내역의 인증을 시작합니다\n\n",
                                                "type": "text"
                                            },
                                            {
                                                "name": "white_check_mark",
                                                "type": "emoji",
                                                "unicode": "2705"
                                            },
                                            {
                                                "text": " 아래 ",
                                                "type": "text"
                                            },
                                            {
                                                "text": "초록색 버튼",
                                                "type": "text",
                                                "style": {
                                                    "bold": true
                                                }
                                            },
                                            {
                                                "text": "을 눌러주세요\n ",
                                                "type": "text"
                                            },
                                            {
                                                "name": "calling",
                                                "type": "emoji",
                                                "unicode": "1f4f2"
                                            },
                                            {
                                                "text": " 이어서 앱에서 보내는 ",
                                                "type": "text"
                                            },
                                            {
                                                "text": "개인 메시지 안내",
                                                "type": "text",
                                                "style": {
                                                    "bold": true
                                                }
                                            },
                                            {
                                                "text": "를 따라가시면 됩니다",
                                                "type": "text"
                                            }
                                        ]
                                    }
                                ]
                            }
                        ]
                    },
                    "channel_id": {
                        "hidden": false,
                        "locked": false,
                        "value": "C08NK8YCYDN"
                    },
                    "interactive_blocks": {
                        "hidden": false,
                        "locked": false,
                        "value": [
                            {
                                "type": "actions",
                                "elements": [
                                    {
                                        "text": {
                                            "text": "메세지 수신 대기",
                                            "type": "plain_text",
                                            "emoji": true
                                        },
                                        "type": "button",
                                        "style": "primary",
                                        "value": "button",
                                        "action_id": "f50f7080-d69d-4411-a64c-42a43af70976"
                                    }
                                ]
                            }
                        ]
                    },
                    "interactivity_configuration": {
                        "hidden": false,
                        "locked": false,
                        "value": {
                            "actions": {
                                "f50f7080-d69d-4411-a64c-42a43af70976": {
                                    "expiry": {
                                        "type": "RELATIVE",
                                        "timestamp": "{{inputs.Ft09KGLVDZ6C__event_timestamp}}",
                                        "after_days": 1
                                    },
                                    "is_button_multi_click": true,
                                    "is_mutually_exclusive": false
                                }
                            }
                        }
                    }
                }
            },
            {
                "id": "817f5896-e2a5-490a-afb6-b3c1e0a7f06e",
                "function_id": "Fn013B",
                "inputs": {
                    "list_id": {
                        "hidden": false,
                        "locked": false,
                        "value": "F09JHMP3JLD"
                    },
                    "filter_by": {
                        "hidden": false,
                        "locked": false,
                        "value": "filter_by_list_columns"
                    },
                    "filter_condition": {
                        "hidden": false,
                        "locked": false,
                        "value": {
                            "Col09KD64QHLK": [
                                "Opt8WOXZE6K"
                            ],
                            "todo_assignee": "{{steps.3a636b5b-50e6-414c-90be-462961a53a15.interactivity.interactor.id}}",
                            "todo_completed": false
                        }
                    }
                }
            },
            {
                "id": "e720c615-3f45-4886-bae1-9080d55f8e5a",
                "function_id": "Fn010M",
                "inputs": {
                    "message": {
                        "hidden": false,
                        "locked": false,
                        "value": [
                            {
                                "type": "rich_text",
                                "elements": [
                                    {
                                        "type": "rich_text_section",
                                        "elements": [
                                            {
                                                "name": "mortar_board",
                                                "type": "emoji",
                                                "unicode": "1f393"
                                            },
                                            {
                                                "text": " ",
                                                "type": "text"
                                            },
                                            {
                                                "text": "강의 인증 절차를 시작합니다!",
                                                "type": "text",
                                                "style": {
                                                    "bold": true
                                                }
                                            },
                                            {
                                                "text": "\n",
                                                "type": "text"
                                            },
                                            {
                                                "name": "memo",
                                                "type": "emoji",
                                                "unicode": "1f4dd"
                                            },
                                            {
                                                "text": " 아래 내용을 작성해주세요:\n",
                                                "type": "text"
                                            }
                                        ]
                                    },
                                    {
                                        "type": "rich_text_list",
                                        "style": "bullet",
                                        "border": 0,
                                        "indent": 0,
                                        "elements": [
                                            {
                                                "type": "rich_text_section",
                                                "elements": [
                                                    {
                                                        "name": "open_file_folder",
                                                        "type": "emoji",
                                                        "unicode": "1f4c2"
                                                    },
                                                    {
                                                        "text": " ",
                                                        "type": "text"
                                                    },
                                                    {
                                                        "text": "인증 자료 업로드",
                                                        "type": "text",
                                                        "style": {
                                                            "bold": true
                                                        }
                                                    }
                                                ]
                                            },
                                            {
                                                "type": "rich_text_section",
                                                "elements": [
                                                    {
                                                        "name": "writing_hand",
                                                        "type": "emoji",
                                                        "unicode": "270d-fe0f"
                                                    },
                                                    {
                                                        "text": " ",
                                                        "type": "text"
                                                    },
                                                    {
                                                        "text": "한 줄 회고 남기기",
                                                        "type": "text",
                                                        "style": {
                                                            "bold": true
                                                        }
                                                    }
                                                ]
                                            }
                                        ]
                                    },
                                    {
                                        "type": "rich_text_section",
                                        "elements": [
                                            {
                                                "name": "warning",
                                                "type": "emoji",
                                                "unicode": "26a0-fe0f"
                                            },
                                            {
                                                "text": " 혹시 등록하려는 강의가 아니라면 → ",
                                                "type": "text"
                                            },
                                            {
                                                "text": "강의명 필드를 변경",
                                                "type": "text",
                                                "style": {
                                                    "bold": true
                                                }
                                            },
                                            {
                                                "text": " 후 진행해주세요\n---\n인증할 과목을 드랍다운으로 불러와 선택하지 못하는건.. 슬랙 워크플로의 한계ㅠ\n\n",
                                                "type": "text"
                                            },
                                            {
                                                "name": "pushpin",
                                                "type": "emoji",
                                                "unicode": "1f4cc"
                                            },
                                            {
                                                "text": " ",
                                                "type": "text"
                                            },
                                            {
                                                "text": "대상 목표 미리보기",
                                                "type": "text",
                                                "style": {
                                                    "bold": true
                                                }
                                            },
                                            {
                                                "text": "\n",
                                                "type": "text"
                                            },
                                            {
                                                "id": "{{steps.817f5896-e2a5-490a-afb6-b3c1e0a7f06e.record_url}}",
                                                "type": "workflowtoken",
                                                "property": "",
                                                "data_type": "string"
                                            }
                                        ]
                                    }
                                ]
                            }
                        ]
                    },
                    "user_id": {
                        "hidden": false,
                        "locked": false,
                        "value": "{{steps.3a636b5b-50e6-414c-90be-462961a53a15.interactivity.interactor.id}}"
                    },
                    "interactive_blocks": {
                        "hidden": false,
                        "locked": false,
                        "value": [
                            {
                                "type": "actions",
                                "elements": [
                                    {
                                        "text": {
                                            "text": "인증 시작!",
                                            "type": "plain_text",
                                            "emoji": true
                                        },
                                        "type": "button",
                                        "style": "primary",
                                        "value": "button",
                                        "action_id": "38267b78-8162-4a66-8e7f-a6910403da3d"
                                    }
                                ]
                            }
                        ]
                    },
                    "interactivity_configuration": {
                        "hidden": false,
                        "locked": false,
                        "value": {
                            "actions": {
                                "38267b78-8162-4a66-8e7f-a6910403da3d": {
                                    "expiry": {
                                        "type": "RELATIVE",
                                        "timestamp": "{{inputs.Ft09KGLVDZ6C__event_timestamp}}",
                                        "after_days": 1
                                    },
                                    "is_button_multi_click": true
                                }
                            }
                        }
                    }
                }
            },
            {
                "id": "5b463461-4e9f-4409-a452-474bc24fc7df",
                "function_id": "Fn010N",
                "inputs": {
                    "title": {
                        "hidden": false,
                        "locked": false,
                        "value": "미완료 일정 중 하나 업데이트"
                    },
                    "fields": {
                        "hidden": false,
                        "locked": false,
                        "value": {
                            "elements": [
                                {
                                    "name": "name",
                                    "type": "slack#/types/rich_text",
                                    "title": "수강 예정 강의 이름",
                                    "default": [
                                        {
                                            "type": "rich_text",
                                            "elements": [
                                                {
                                                    "id": "{{$this.variables.current_record.field_values.name}}",
                                                    "type": "workflowtoken",
                                                    "property": "",
                                                    "data_type": "slack#/types/rich_text"
                                                }
                                            ]
                                        }
                                    ],
                                    "description": ""
                                },
                                {
                                    "name": "Col09JR37RWE8",
                                    "type": "array",
                                    "items": {
                                        "type": "slack#/types/file_id",
                                        "allowed_filetypes_group": "ALL"
                                    },
                                    "title": "인증자료",
                                    "maxItems": 10,
                                    "description": ""
                                },
                                {
                                    "name": "Col09J69HD70X",
                                    "type": "slack#/types/rich_text",
                                    "title": "한줄회고",
                                    "default": [
                                        {
                                            "type": "rich_text",
                                            "elements": [
                                                {
                                                    "id": "{{$this.variables.current_record.field_values.Col09J69HD70X}}",
                                                    "type": "workflowtoken",
                                                    "property": "",
                                                    "data_type": "slack#/types/rich_text"
                                                }
                                            ]
                                        }
                                    ],
                                    "description": ""
                                }
                            ],
                            "required": [
                                "Col09JR37RWE8"
                            ]
                        }
                    },
                    "interactivity": {
                        "hidden": false,
                        "locked": false,
                        "value": "{{steps.e720c615-3f45-4886-bae1-9080d55f8e5a.interactivity}}"
                    },
                    "on_submit_function_config": {
                        "hidden": false,
                        "locked": false,
                        "value": {
                            "inputs": {
                                "list_id": {
                                    "hidden": false,
                                    "locked": false,
                                    "value": "F09JHMP3JLD"
                                },
                                "record_id": {
                                    "hidden": false,
                                    "locked": false,
                                    "value": "{{steps.817f5896-e2a5-490a-afb6-b3c1e0a7f06e.record_id}}"
                                },
                                "updated_columns": {
                                    "hidden": false,
                                    "locked": false,
                                    "value": {
                                        "name": "{{$this.form.fields.name}}",
                                        "Col09J69HD70X": "{{$this.form.fields.Col09J69HD70X}}",
                                        "Col09JR37RWE8": "{{$this.form.fields.Col09JR37RWE8}}",
                                        "todo_assignee": null,
                                        "todo_due_date": null,
                                        "todo_completed": true,
                                        "assignee_access_key": null
                                    }
                                }
                            },
                            "id": "5b463461-4e9f-4409-a452-474bc24fc7df",
                            "function_id": "Fn013E"
                        }
                    }
                }
            },
            {
                "id": "07672a77-0c79-48d7-8826-add37ebfbd39",
                "function_id": "Fn0102",
                "inputs": {
                    "files": {
                        "hidden": false,
                        "locked": false,
                        "value": "{{steps.5b463461-4e9f-4409-a452-474bc24fc7df.fields.Col09JR37RWE8}}"
                    },
                    "message": {
                        "hidden": false,
                        "locked": false,
                        "value": [
                            {
                                "type": "rich_text",
                                "elements": [
                                    {
                                        "type": "rich_text_section",
                                        "elements": [
                                            {
                                                "name": "tada",
                                                "type": "emoji",
                                                "unicode": "1f389"
                                            },
                                            {
                                                "text": " ",
                                                "type": "text"
                                            },
                                            {
                                                "id": "{{steps.3a636b5b-50e6-414c-90be-462961a53a15.interactivity.interactor.id}}",
                                                "type": "workflowtoken",
                                                "property": "",
                                                "data_type": "slack#/types/user_id"
                                            },
                                            {
                                                "text": " ",
                                                "type": "text"
                                            },
                                            {
                                                "text": "님이 ",
                                                "type": "text",
                                                "style": {
                                                    "bold": true
                                                }
                                            },
                                            {
                                                "text": "\n",
                                                "type": "text"
                                            }
                                        ]
                                    },
                                    {
                                        "id": "{{steps.5b463461-4e9f-4409-a452-474bc24fc7df.fields.name}}",
                                        "type": "workflowtoken",
                                        "property": "",
                                        "data_type": "slack#/types/rich_text"
                                    },
                                    {
                                        "type": "rich_text_section",
                                        "elements": [
                                            {
                                                "text": "\n",
                                                "type": "text"
                                            },
                                            {
                                                "text": "강의 인증을 완료했습니다! ",
                                                "type": "text",
                                                "style": {
                                                    "bold": true
                                                }
                                            },
                                            {
                                                "name": "mortar_board",
                                                "type": "emoji",
                                                "style": {
                                                    "bold": true
                                                },
                                                "unicode": "1f393"
                                            },
                                            {
                                                "name": "sparkles",
                                                "type": "emoji",
                                                "style": {
                                                    "bold": true
                                                },
                                                "unicode": "2728"
                                            },
                                            {
                                                "text": "\n",
                                                "type": "text"
                                            },
                                            {
                                                "text": " ",
                                                "type": "text",
                                                "style": {
                                                    "bold": true
                                                }
                                            },
                                            {
                                                "text": "\n",
                                                "type": "text"
                                            },
                                            {
                                                "name": "memo",
                                                "type": "emoji",
                                                "unicode": "1f4dd"
                                            },
                                            {
                                                "text": " ",
                                                "type": "text"
                                            },
                                            {
                                                "text": "한 줄 회고",
                                                "type": "text",
                                                "style": {
                                                    "bold": true
                                                }
                                            },
                                            {
                                                "text": "\n",
                                                "type": "text"
                                            }
                                        ]
                                    },
                                    {
                                        "id": "{{steps.5b463461-4e9f-4409-a452-474bc24fc7df.fields.Col09J69HD70X}}",
                                        "type": "workflowtoken",
                                        "property": "",
                                        "data_type": "slack#/types/rich_text"
                                    },
                                    {
                                        "type": "rich_text_section",
                                        "elements": [
                                            {
                                                "text": "\n\n",
                                                "type": "text"
                                            },
                                            {
                                                "name": "clap",
                                                "type": "emoji",
                                                "unicode": "1f44f"
                                            },
                                            {
                                                "text": " 수고 많으셨습니다! 오늘도 꾸준한 학습이 쌓여가고 있네요 ",
                                                "type": "text"
                                            },
                                            {
                                                "name": "rocket",
                                                "type": "emoji",
                                                "unicode": "1f680"
                                            }
                                        ]
                                    }
                                ]
                            }
                        ]
                    },
                    "channel_id": {
                        "hidden": false,
                        "locked": false,
                        "value": "C08NK8YCYDN"
                    }
                }
            }
        ]
    },
    "triggers": [
        {
            "name": "week5ver-daily-goal-updater",
            "type": "scheduled",
            "inputs": {
                "Ft09KGLVDZ6C__event_timestamp": {
                    "value": "{{event_timestamp}}",
                    "locked": false,
                    "hidden": false
                }
            },
            "schedule": {
                "start_time": "2025-10-04T15:00:00.000Z",
                "timezone": "Asia/Seoul",
                "frequency": {
                    "type": "daily"
                }
            }
        }
    ]
}

일간 상태 알림

  • 마감기한이 현재 날짜와 동일한 미완료 리스트 항목에 대해 매일 오후9시에 담당자에게 노티
  • 간단하므로 export 생략

결과

  • 주간 목표 등록
주간 목표 등록 과정

주간 목표 등록 결과
  • 일간 목표 인증
일간 목표 인증 메세지
일간 목표 인증 값 입력
일간 목표 인증 결과
  • 슬랙 리스트 인증 상황
진행상태 주차별 조회
진행상태 일간 조회

한계 및 문제점

워크플로우의 구조적 한계

버튼 딸깍으로 간단히 구성할 수 있는것은 워크플로우의 장점이나, 쓸수록 지원되지 않는 기능을 보면서 아.. 이거 아쉬운데.. 그냥 앱으로 짤까.. 라는 생각이 많이 들었다.

연산 불가

워크플로우 빌더에 있는 각 블록단위에서 제공하는 기능만 처리가 가능하며, 그외 다른 라이브러리나 연산등 커스텀한 기능을 추가할 수 없다. 예를 들어 블록에서 이 워크플로우/블록이 시작된 시간은 가져올 수 있지만 그 날짜가 해당 달의 몇번째 주에 해당하는지는 제공하지 않으니 쓸 수 없다.

만약 Bolt for Python 등의 framework로 짰으면 Bolt로 날짜를 가져온뒤 calendar등의 모듈을 쓰거나.. 정안되면 날짜/7 사칙연산이라도 할 수 있을텐데 빌더 블록에서는 할 수 없다.

결과값 저장 및 가공 불가

리스트 항목을 불러올때, 빌더는 한개의 대상 레코드의 값(항목ID,item ID)를 제공한다. 필터링으로 대상을 조절할 수 있지만 대상이 여러개면 그중의 하나의 값만 돌려준다.

만약 앱이였다면 필터링된값을 리스트로 저장해서 원하는 인증항목을 선택할 수 있게 제공할 수 있겠지만 현재는 그냥 선택된 하나의 레코드를 항목명까지 변경하여 작동하도록 수정

또한 사용자 이름등을 가져올때 @멘션 형태로 가져온다. 너무 많은 알람이 발생하는건 원치않는데.. 불러온 값을 가공할 수 없으니 어쩔 수 없다.

메시지 템플릿 불가

block kit builder 사용해서 메세지 템플릿을 가공하고 만들고 싶은데 일반 댓글 형식의 메세지만 사용 가능

업데이트 갱신/반영

지금처럼 메세지 기반으로 동작하는 워크플로의 경우, 한번 배포(채널에 메시지 발송)되면 워크플로를 수정하여 재게시하여도 반영되지않는다. 한번 채널메세지로 게시한 워크플로를 수정하여 게시하여도 기존에 게시된 메세지는 구버전으로 작동하며, 갱신된 워크플로를 사용하려면 다시 메세지를 채널에 보내야 한다.

branch 기능 불가(business+)

현재 pro 단계에서의 workflow는 branch 같은 분기처리는 못하고 선형적인 처리만 가능하다. 뭐랄까.. 1부터 7까지의 블록이 있으면 순차적으로 실행되어야하고 중간을 뛰어넘거나 if문 같은 스킵처리를 할 수 없다. 이는 Branch 기능이며 더 높은 구독단계에서만 사용가능하다.

해당 기능으로 개선하고자 하는것은 목표 인증 단계에서, if 미완료 상태인 인증목표가 있으면 완료하고 else 없다면 새로 리스트에 목표를 추가하고 완료하는 기능(추가목표달성). 현재로서는 등록부터 전체기능을 반복하여야한다.

입력값 검증 불가

양식으로 응답받는 데이터에 대해서 별도 validation 적용이 불가능하다.

251011(토)에 등록하는 주간목표는 차주인 251013(월)~251019(일)에 해당하는 날짜값만을 받아야한다. 하지만 모든값을 입력받을 수 있어 추가정리 필요

디버깅의 어려움

구성이 완료되고 동작할때는 문제가 없다. 그러나 구축 과정에서 에러가 발생하면 회색느낌표 아이콘만 보여주고 어디가 어떻게 에러가 났는지/에러 메세지는 뭔지 알 수 없다.

문서화 부족

조건, 필요값, 응답 예시등이 상세하게 작성된 API 문서와 다르게 워크플로 빌더의 블록은 이 블록이 어떤 역할을 하는지, 어떤값을 필요로하고 어떤 값을 응답하는지 알 수 없다. 워크플로는 특성상 GUI 화면과 함께 어디에있는 어떤 버튼을 눌러야하는지 그림 설명도 있어야할텐데.. 도구 연결 및 작업 자동화 정도만 연관 문서고 기능을 설명하지만 텍스트로만 되어있어 찾기 힘들다.

위의 리스트 항목 업데이트시 항목ID변수로 어떤값이 필요하며 어떻게 찾아오는지도 관련 레딧글 과 같은 커뮤니티글을 통해 찾아야만했다.

결론

워크플로는 슬랙에 내장되어있어 개발자/비개발자 가리지 않고 간단히 구축하여 호딱 사용하기엔 유용하다. 그러나 쓸수록 아쉬운점이 느껴지고 아쉬운대로 쓰던가 or 수동오퍼레이션이 들어가야한다.

지금처럼 간단한 등록/인증 업무 정도에 자동화 할 수 있지만, 기능적 제약이 많아 ‘자동화 도구’라기 보다는 ‘운영 보조도구’에 가깝지 않나? 싶다. 사용시나리오에 맞춘 완전한 자동화는 힘들고 수동 작업을 추가하던가 (매주 메시지/목표 갱신 후 재배포) 또는 조금 불편하더라도 없는것보다는 나으니 감수하면서 사용해야하는 정도? 사용해보면서 부족한 기능등을 정리하고, 추가로 필요한 기능(잔여 보증금 정산)등을 포함해 다음 차수에는 App 형태로 확장해도 좋을듯 하다.

그외에도.. 자동화로 편해진건 좋은데 사람느낌이 나지 않고 삭막해진 느낌이 들어서 그런 부분은 고민 중..

Leave a Reply