폭탄 문자 사태에서 살아남기: 실적 공유 카톡봇 자동화 여정

소개

매일 갱신되는 실적 데이터를 사람들이 깜빡하고 입력하지 않거나, 공유가 제때 안 되는 일이 반복됐습니다. 그래서 저는 Google Sheets 실적 데이터를 기반으로,

  • ✅ 입력된 실적을 요약해서 공유하고

  • ⚠️ 미입력 지점을 환기시키는 메시지를 두 개의 카카오톡 단톡방에 정해진 시간마다 자동 발송하는 시스템을 만들고자 했습니다.

"손으로 하나하나 챙기지 않아도 알아서 굴러가는 시스템"을 만들고 싶었죠!

진행 방법

사용한 도구

  • Google Sheets (CSV로 공개된 실적 데이터)

  • FastAPI + APScheduler (스케줄 관리 및 메시지 생성)

  • GPT-4o-mini (멘트 다양화)

  • 메신저봇R 앱 (카카오톡 메시지 발송)

  • BridgeHub (중앙 메시지 허브, 큐 + 락 + API)

시스템 아키텍처

Python 스크립트의 스크린샷

BridgeHub 상세 구성 및 기능

1. 목적

  • 카카오톡 봇들의 중앙 허브 역할 수행

  • 공지/요약/뉴스/문서 저장·배포·예약·집계까지 가능한 통합 플랫폼

2. 주요 기능

  • 📝 초안 관리 - 공지 초안 생성/수정/확정

  • 📤 공지 발송 - 대기열 기반 폴링 (60초 권장)

  • 🔒 중복 방지 - execution_lock + content_hash (10분 윈도우)

  • 📊 Jobs API - 예약 작업 생성/조회/완료/실패

  • 📋 Summaries API - 요약 저장/조회

  • Schedules API - 예약 발송 (시간 계산은 봇 쪽)

  • 📈 Metrics API - Prometheus 형식 모니터링

  • 🛠️ Admin API - 락 정리, 대기열 조회

3. API 사이클 흐름 (봇 연동 시)

  1. /health → 서버 상태 확인

  2. POST /drafts → 초안 생성 (draft_id 반환)

  3. POST /confirm → 초안 확정 (notice_id 반환)

  4. GET /pending → 봇이 60초마다 폴링

  5. POST /complete → 발송 완료 보고

4. 다른 프로젝트 연동 가이드

  • 새 봇에서 BridgeHub를 사용하려면:

    1. /health 호출로 서버 상태 확인

    2. 60초 폴링으로 /notices/pending 조회

    3. 공지 발송 후 /notices/{id}/complete 호출

    4. 인증이 필요한 경우 관리자에게 API 키 요청

콘텐츠 생성 서비스: ContentScheduler

  • 역할: 스케줄 실행 + 메시지 생성 + BridgeHub 발송 요청

  • 기술 스택: FastAPI + APScheduler + Python 3.x

  • 데이터 소스: Google Sheets 공개 CSV

  • 메시지 생성: GPT-4o-mini 사용, temperature=0.8

메신저봇 구축

  • 플랫폼: 메신저봇R 앱 (Android)

  • 역할: BridgeHub로부터 메시지 폴링 후 카카오톡 발송

  • 기능 요약:

    • 스케줄 알림 (1번방 5회, 2번방 2회)

    • 구글 시트 연동 (공개 CSV, UTF-8, Excel 일련번호 지원)

    • LLM 멘트 다양화 (GPT 기반 멘트 자동 생성)

    • 다층 중복 방지 (BridgeHub + 봇 락 + per-room 쿨다운)

한국어로 된 문자 메시지의 스크린샷
한국어로 된 문자 메시지의 스크린샷

결과와 배운 점

폭탄 문자 대참사 😱

  • 스케줄은 작동 중인데 메신저 봇이 죽은 상태

  • 메시지가 큐에 계속 쌓이고, 나중에 한꺼번에 발송되며 폭탄 문자 발생

  • 앱을 재설치하고 컴파일을 두 번 누르자 좀비 스레드가 또 생김 → 메시지가 반복 중첩 발송

  • 단톡방이 도배되고, 그걸 지우느라 진땀을 흘렸습니다 😵

    ttt라는 단어가 포함된 문자 메시지의 스크린샷

구조 개선 및 해결

  • 현우님이 공유해주신 노틱스브릿지봇 구조를 기반으로

  • 직접 살짝 커스터마이징하여 적용 🔧

  • 안정적인 서버-봇-사용자 흐름 완성

적용한 핵심 해결 포인트

  1. 중복 방지 락 도입 (execution_lock + content_hash)

  2. 서버 연결 안정화 (BridgeHub에서 큐 관리, 봇은 단순 폴링)

  3. GPT로 다양한 메시지 생성 → 매번 같은 메시지 발송 방지

  4. 다층 락 구조로 진짜 중복 방지:

    • BridgeHub 서버 락

    • 메신저봇 자체 인스턴스 락

    • per-room 쿨다운 적용

배운 점

  • 기초부터 공부하려는 것보다, 직접 부딪혀야 진짜 기초가 왜 필요한지 느낀다

  • 메시지 자동화 시스템도 결국 "인프라"다. 안정성, 중복방지, 예외처리가 핵심임을 체감

  • 무조건 해보자! 시행착오에서 진짜 배운다 💪

도움 받은 글

  • 현우님의 노틱스브릿지봇 가이드 및 실행파일 (스터디 공유 자료 기반)

2
1개의 답글

뉴스레터 무료 구독

👉 이 게시글도 읽어보세요