SELFISH AAA

결과물

https://github.com/selfishclub-all/selfish-ops2/pull/2

공유회 CRM 자동화 — n8n 알림톡 ①~⑤ 전체 플로우 성공 + 예약발송 구현 + 카카오모먼트 전환 결정

2주차에 “URL 하나 넣으면 전채널 카피/배너가 자동 생성”까지 만들었는데, 3주차는 그걸 실제로 발송까지 연결하는 과정이었다. 알림톡 9종 중 5종까지 테스트 성공하고, 카플친 발송 구조도 바꿔야 한다는 걸 알게 됨.

만든과정 및 삽질 + 인사이트

  • 가장 많이 리소스 투입된 자동화 구축

    • 자동화 실행 구조 구축
      • 현재는 채널별로 개별 검증 되어있던 상태, 전체 자동화 파이프라인 필요한 상황
      • 전체 자동화시 현재 문제점 As-is → To-be
        • 현재 상황
          • 맥북 off시 클로드코드 비활성화 이슈
          • API 연동해서 완료까지 해야하는 것 → 알림톡, 카플친, 인스타(현재X)
          • 수동으로 해야하는 것(API안됨) → 온드미디어 세팅, 오픈챗 발송
        • 시작시 타임라인별로 슬랙에 받고 싶은데 해당 날에 맥북 꺼져있으면?
          • 클로드한테 url + crm 시작해줘가 트리거가 되어 → 각 타임라인별로 들어가야할 것 한번에 전달(그때 수정할건 클로드코드 열면됨)
        • 맥북이 꺼져있어도 해야할 것 두가지(알림톡, 카플친)
          • 하이브리드로 재설계:
            • n8n (서버에서 24시간 돌아감): 알림톡 9종 자동 발송
            • 클로드 코드 (맥북 켜져 있을 때): 카피 생성 + 배너 생성 + Slack 전달
            • 이렇게 나누니까 맥북 꺼져 있어도 알림톡은 알아서 나감
  • 알림톡 n8n 전체 재설계

    • 알림톡 PRD(템플릿 정의 및 타임라인)
      • As-is: 기존 알림톡 PRD만 만들어놨던 상태, 클로드가 그전 템플릿들이랑 현재 바뀐 템플릿들이랑 매칭 자체가 힘들었음
      • To-be: 기존 템플릿 다 버리고 타임라인대로 다시 전달 → 솔라피 템플릿 ID와 매칭시키기
    • n8n 크론 재설계
      • 기존 n8n 워크플로우가 32노드 → 38노드로 확장
      • 핵심: 줌링크 하나만 넣으면 나머지 4개 알림톡에서 자동으로 재사용 (staticData)
    • 알림톡 n8n 모달 구축
      • situation: 알림톡 템플릿에 등록된 변수말고도 추가적인 카피가 필요함
      • problem: 클로드코드로 카피를 보내려면 항상 켜져있어야 함
      • solution: n8n 모달을 사용하여 변수명에 같이 카피를 추가하여 보냄
  • 채널별 PRD/서브 에이전트 분리

    • CLAUDE.md 372줄 → PRD 8개로 분리
    • 에이전트가 자기 채널과 무관한 정보까지 읽는 문제 해결
  • end-to-end 테스트 (iid_999) — ①~⑤ 성공

    • 가짜 공유회 데이터(iid_999) + 안전장치(나한테만 1명 발송)
    • n8n ① 오픈알림 삽질기
      • 발송이 안옴 / url링크 안 들어감 / 수정했는데 원본으로 다시옴
      • 버그 1: Slack 3초 타임아웃 → Respond: 즉시 200 노드 추가
      • 버그 2: 수정 미리보기 case 1 빠져있음 → 추가 + header 150자 제한
      • 버그 3: Switch 타입 불일치 (문자열 “1” vs 숫자 1) → loose 비교로 변경
    • ② 오픈리마인드
      • ①② 같은 SOLAPI 노드 쓰던 문제 → ① 전용 노드 분리
      • templateId + 변수(#{공유회명}→#{프로그램명}) 수정
      • 슬랙 미리보기 카피가 실제 템플릿과 달랐음 → 수정
    • ③ D-1 리마인드
      • SOLAPI에서 잘못된 파라미터 요청 에러 → 문자로 대체 발송됨
      • 원인: SOLAPI 템플릿 버튼 URL이 http://#{url}https://zoom.us/... 넣으면 http://https:// 이중 프로토콜
      • 해결: v_url에서 https:// 자동 제거 + 모달에 “https:// 없이 입력” 안내
    • ④ 당일리마인드 — 자동발송 성공 (staticData 줌링크 재사용)
    • ⑤ 할인쿠폰 — 모달 확인 완료
  • 예약 발송 구현 (Wait 노드)

    • 기존: 승인 → 즉시 발송 (SOLAPI 노드에 scheduledDate 옵션 없음)
    • 변경: 승인 → Wait 노드 대기 → 해당 시간에 SOLAPI 즉시 발송
    • 모달에 발송시간 필드 추가 (기본값 = 해당 알림톡 scheduledTime, 에밀리가 변경 가능)
    • 비우면 즉시발송, 시간 입력하면 예약발송
  • 4/5 미팅 — 카카오모먼트 전환 결정 + v2 로드맵

    • 카플친 발송: SOLAPI = 전화번호 기반, 카카오모먼트 = 채널친구 전체
    • Supabase 조회: 멤버십 6,829명 중 카플친 2,865명 (42%)
    • 카카오모먼트 API: 건당 15원 동일 + 전화번호 불필요 → 전환 결정
    • v2 로드맵: 유저여정 추적, KPI 적응형 CRM, 과거 인사이트 축적
  • Slack 채널 분리

    • 기존 #공유회-crm-승인단계#crm-알림톡-승인단계 (n8n 알림톡 모달)
    • 신규 #crm-카피 (클로드코드 카피 레퍼런스)
    • 카피 찾으려면 알림톡 모달 사이를 뒤져야 했던 문제 해결

현재 상황 (다음 세션에서 이어서)

완료:

  • ✅ ① 오픈알림
  • ✅ ② 오픈리마인드
  • ✅ ③ D-1 리마인드
  • ✅ ④ 당일리마인드
  • ✅ ⑤ 할인쿠폰
  • ✅ 예약 발송 (Wait 노드)
  • ✅ 모달 발송시간 필드

남은 것:

  • 🔲 ⑥ 입장링크 테스트
  • 🔲 ⑦ 시작알림 테스트
  • 🔲 ⑧ 혜택안내 테스트 + 크론 시간 변경
  • 🔲 ⑨ VOD 테스트
  • 🔲 ⑤~⑨ 슬랙 미리보기 실제 템플릿 매칭
  • 🔲 카카오모먼트 API 전환
  • 🔲 CRM 카피를 #crm-카피 채널로 전달
  • 🔲 testMode=false + 안전장치 해제

추가 인사이트

  • SOLAPI n8n 노드의 한계

    • scheduledDate 옵션이 없어서 Wait 노드로 우회함
    • 템플릿 버튼 URL이 http://#{url} 형식이라 https:// 포함하면 이중프로토콜 에러
    • 각 템플릿마다 변수가 달라서 SOLAPI 노드를 분리해야 함 (공유 불가)
  • n8n 디버깅 팁

    • API로 업데이트해도 에디터에서 새로고침 안 하면 이전 버전으로 테스트됨
    • Slack 모달 3초 제한 → 무조건 즉시 200 응답 후 백그라운드 처리
    • SOLAPI 에러 3109 = 잘못된 파라미터 → 대부분 URL 이중프로토콜 문제
  • 데이터 기반 의사결정

    • 카플친 2,865명 vs 멤버십 6,829명 → SOLAPI의 한계를 숫자로 확인
    • 감으로 결정하지 말고 DB 조회부터

도구 사용

도구용도
Claude Code (Opus)전체 프로젝트 진행, n8n JSON 수정, 버그 디버깅
oh-my-claudecode에이전트 팀 오케스트레이션
n8n알림톡 크론 발송, Slack 모달 승인 플로우, Wait 예약발송
SOLAPI알림톡 발송 API (에러 로그 조회)
Supabase멤버십/신청자 데이터 조회, 카플친 도달률 분석
Chrome MCPn8n 콘솔 직접 테스트
Slack MCPCRM 스레드 전달 + 채널 분리

다음 주 할 것

  • n8n ⑥~⑨ 나머지 알림톡 테스트
  • 슬랙 미리보기 실제 템플릿 매칭
  • 카플친 카카오모먼트 API 전환
  • CRM 카피 → #crm-카피 채널 전달