소개
시도하고자 했던 것과 그 이유를 알려주세요.
매일 일상/업무 내용과 감정 변화를 기록하고자
구글 캘린더를 기반으로 한 자동 데일리 로그 시스템을 만들고자 했습니다!
(Hero님의 가이드북 왕창 참고✨)
< 기본적인 구조 > - Activepieces / Google(forms, Calendar) / Discord 활용
워크플로우 1 : 시간별 알림 발송
워크플로우 2 : 응답 처리 및 저장
< 추가 사항(개인화) >
1) 🌡️날씨/의상 추천 알림 : 하루 2번은 날씨와 의상 추천을 하도록 추가했습니다!
첫 기록이 시작되는 아침 8시에는 오늘의 날씨를, 마지막 기록을 안내하는 알림에는
내일의 날씨를 알려주는 내용을 추가하고자 했습니다. (좀 더 알림을 찾아보도록 하기 위해!)
2) 📝기록 알림 : 시간마다 기록을 할 수 있도록 디스코드로 알림을 보내고,
이 내용을 요약해서 다시 안내해주도록 설계하고자 했습니다. (매일 8시 - 22시, 1시간에 1번씩!)
>> 요약 시에는 어제 대비 오늘 총 몇번 작성을 했는지 추가하고자 했습니다.
진행 방법
어떤 도구를 사용했고, 어떻게 활용하셨나요?
Tip: 사용한 프롬프트 전문을 꼭 포함하고, 내용을 짧게 소개해 주세요.
Tip: 활용 이미지나 캡처 화면을 꼭 남겨주세요.
Tip: 코드 전문은 코드블록에 감싸서 작성해주세요. ( / 을 눌러 '코드 블록'을 선택)
Activepieces (자동화 툴)
1) 시간별 활동 로깅 알림 flow (빨간 네모가 개인화 영역)
2) (응답 완료 시) 기록 요약 안내 Flow 지렁이 주의🪱
날씨 안내 : wttr.in 날씨 API (용산구 기반 날씨 정보) - (경도, 위도 값 필요)
>> https://api.weatherapi.com/v1/forecast.json(요약)
1. Cron (08:00 / 22:00)↓
2. Code (현재 시간 구하기)
↓
3. Router (시간이 8시냐? 22시냐?)
↓
Branch A → 아침용 메시지
Branch B → 밤용 메시지
Otherwise → 일상 메시지
1) 오전 8시, 밤 22시에만 안내하기 위해 먼저 시간 확인(한국) + Router로 시간분류export const code = async () => const nowUtc = new Date(); const koreaTime = new Date(nowUtc.getTime() + 9 60 60 * 1000); return { hour: koreaTime.getHours(), date: koreaTime.toISOString().split("T")[0] }; };
2) weather[1,2]와 hourly(1~24) 구조 기반, 아침은 오늘 날씨 / 밤은 내일 날씨 정보 추출
3) 추출한 날씨정보와 매핑되는 Code 생성 (기온 안내 / 의상추천)export const code = async (inputs) => { const body = inputs.weather; // HTTP(weather) 스텝의 body 전체 const forecast = body.forecast.forecastday; const targetHour = 8; // 08시 기준 const findHour = (day) => { const byTime = day.hour.find( (h) => new Date(h.time).getHours() === targetHour ); return byTime || day.hour[8]; // 없으면 8번째 인덱스(보통 08시 근처) }; const buildTodaySection = (day, hour) => { const max = day.day.maxtemp_c; const min = day.day.mintemp_c; const nowTemp = hour.temp_c; const feels = hour.feelslike_c ?? nowTemp; const desc = hour.condition.text; const willRain = hour.will_it_rain === 1 || day.day.daily_will_it_rain === 1; const chanceRain = Number(hour.chance_of_rain ?? day.day.daily_chance_of_rain ?? 0); const willSnow = hour.will_it_snow === 1 || day.day.daily_will_it_snow === 1; const chanceSnow = Number(hour.chance_of_snow ?? 0); const wind = hour.wind_kph; // 👗 의상 추천 let outfitEmoji = "☀️"; let outfitText = "간단한 니트나 가벼운 아우터 정도면 괜찮아요."; if (feels <= -5) { outfitEmoji = "🥶"; outfitText = "한파 경보급! 두꺼운 패딩 + 방한모 + 목도리 + 장갑 필수!"; } else if (feels <= 3) { outfitEmoji = "🧊"; outfitText = "몹시 추워요. 패딩이나 두꺼운 코트 + 히트텍 꼭 입으세요."; } else if (feels <= 8) { outfitEmoji = "🧣"; outfitText = "쌀쌀한 날씨! 코트/패딩 + 목도리 있으면 딱 좋아요."; } else if (feels <= 15) { outfitEmoji = "🧥"; outfitText = "조금 선선해요. 가벼운 코트나 니트에 얇은 이너 추천!"; } else if (feels <= 22) { outfitEmoji = "👕"; outfitText = "활동하기 좋은 날씨! 가벼운 상의나 셔츠면 충분해요."; } else if (feels <= 27) { outfitEmoji = "🌞"; outfitText = "약간 더워요. 반팔이나 얇은 셔츠로 시원하게 입어주세요."; } else if (feels > 27) { outfitEmoji = "🥵"; outfitText = "폭염 주의! 최대한 얇게, 통풍 잘되는 옷 + 수분 섭취 필수!"; } // ☔ 우산 let rainLine = "비 예보 없음! 우산은 괜찮아요."; if (willRain || chanceRain >= 80) { rainLine = "** 비 예보 있음! 우산 꼭 챙기세요.**"; } // ❄ 눈 let snowLine = ""; if (willSnow || chanceSnow >= 80) { snowLine = "**\n ☃️ 눈이 와요! 🥾 길이 미끄러울 수 있어요!**"; } // 💨 바람 let windLine = "바람은 약한 편이에요."; if (wind >= 30) { windLine = "**강한 바람! 모자나 목도리 단단히 챙겨요.**"; } else if (wind >= 15) { windLine = "바람 약간 있음! 바람막이나 아우터가 있으면 좋아요."; } return `**< 출근 전 참고하세요! >** 👚 의상 추천 : ${outfitEmoji} ${outfitText} 🌡 현재 기온 : ${nowTemp.toFixed(1)}℃ (체감 기온 ${feels.toFixed(1)}℃) 🔺 최고 기온 : ${max.toFixed(1)}℃ 🔻 최저 기온 : ${min.toFixed(1)}℃ ☁️ 날씨 현황 : ${desc} ☔ ${rainLine} 🍃 ${windLine}${snowLine}`; }; const today = forecast[0]; const todayHour = findHour(today); const message = buildTodaySection(today, todayHour); return { text: message, }; };
4) 디스코드 안내 메일
- 아침 (당일 아침 기준 날씨알림 + 의상 추천)
- 저녁 22시 (다음날 아침 기준 날씨알림 + 의상 추천)
- 일상
Discord Webhook (알림 발송)
다음으로는 오늘/어제 작성한 캘린더 횟수를 불러옵니다!
1) Get all Events으로 값 불러오고 Code 작성으로 구체화!export const code = async (inputs) => { const items = inputs.inputs || []; const count = items.length; return { count }; };2) Discord로 안내! (어제 대비 오늘 총 몇번 작성하였는지 포함)
결과와 배운 점
배운 점과 나만의 꿀팁을 알려주세요.
과정 중에 어떤 시행착오를 겪었나요?
도움이 필요한 부분이 있나요?
앞으로의 계획이 있다면 들려주세요.
Flow를 제작하면서 앱과 API 기반 연동을 통해 자동화를 진행하는 방법을 알게되었습니다!
1) API 연동은 처음이라 날씨 API의 특정 시간을 추출하는 부분에서 시행착오를 겪었습니다.
"url": "https://wttr.in/용산구?format=j1",
2) 초반에 트리거의 시간을 추출하여 조건을 구성하려 했는데, 트리거 시간 기반 조건 추출이 되지 않는다는 것을 깨닫고 좌절했습니다.. 대신 어제 작성된 횟수와 오늘 작성 횟수를 추출하여 안내하고 어제보다 오늘 더 많이 작성하도록 독려하는 방식으로 방향을 틀어 잘해결하였습니다. 다만, 시간을 지정할 때 양식( T.. +09:00 .. 등등) 조건이 까다로워서 어려웠습니다.
3) 이번에는 어떻게 하면 좀 더 알림을 들여다보고, 자주 기록할 수 있을지에 대한 고민을 했던 한주였습니다. (좀 더 마케팅 적인 관점 이었다면) 다가오는 주에는 해당 기록 결과를 활용하여 분석 등 다양한 시도를 해볼 수 있었으면 좋겠씁니다.
도움 받은 글 (옵션)
참고한 지피터스 글이나 외부 사례를 알려주세요.
Hero님의 가이드북 : 자동화 하는 가이드북 뿐만 아니라, 다양한 앱들의 활용방법이 담긴 가이드북까지 정말 너무 잘 활용하고 참고하였습니다! (매번 글로만 남기지만 ㅜㅜ) 정말 감사합니다 ㅎㅎ
GPT에게 무료 API 주소나 오류가 생기는 부분등 짜잘한 내용을 많이 물어보고 참고했습니다!