메신저알림 — 시즌1알림 메신저 v3 정식 연동
개요
시즌1알림.한선은 기존에 talk.crowny.org:80 MOCK 채널로만 동작했다. 메신저 v3가 talk-api.crowny.org:9766으로 가동 중이므로, 시스템 채널 plain HTTP POST를 127.0.0.1:9766으로 직접 호출하는 분리 모듈을 작성. TLS 미완 회피(loopback 내부), graceful fallback, 영속 이력 기록 모두 포함.
무엇을 했는지
/Users/ef/Downloads/CrownyTVM/std/메신저알림.한선(+.han복사본) 작성
메신저알림_POST(호스트, 포트, 경로, 본문) — TCP HTTP/1.1 POST + X-Crowny-System 헤더
- 메신저알림_시스템(crowny_id, 본문) — POST /api/v1/messages (from=system, channel=system)
- 메신저알림_단가갱신(년차, 새단가, 직전단가) — 본문 조립 + 시스템 발송
- 메신저알림_이력기록(채널, 상태, 페이로드) — /tmp/메신저알림이력.dat append
- 메신저알림_상태판정(응답) — HTTP/1.1 2xx → OK
- 메신저알림_룰등록() — 셀코어 호환 룰 2개
- 메신저알림_자가검증() — MOCK 경로 검증 (메신저 v3 미가동 OK)
- v0.38 함정 회피: 셀코어 import 없음(인라인 룰 헬퍼), TCP읽기 1인자, 분할 자가검증
- 자가검증 결과: MOCK 모드에서 정상 — 이력 1줄 기록, JSON payload 올바름
핵심 산식
페이로드 = {"from":"system","to":"<crowny_id>","channel":"system","text":"<본문>","ts":<unix>}
요청 = POST /api/v1/messages HTTP/1.1 + Host + X-Crowny-System + Content-Length + 본문
상태 = "E*" → ERR_CONNECT|ERR_EMPTY | "HTTP/1.1 2*" → OK | else → ERR
셀코어 룰 (밸런싱 노브)
룰생성("알림_메신저우선", 10)
조건(메신저_가용 == 참) → 변경(채널=messenger, 폴백=MOCK)
룰생성("알림_긴급은전체방송", 20)
조건(우선순위 == "critical") → 변경(채널="messenger,slack")
밸런싱 한 줄: 룰조건추가(룰, "우선순위", "==", "critical") → 룰변경추가(룰, "채널", "messenger,slack,sms")로
긴급 채널에 SMS 추가만 하면 전체 룰엔진 재실행.
관련 파일
/Users/ef/Downloads/CrownyTVM/std/메신저알림.한선— 신규 모듈 (위임 대상)/Users/ef/Downloads/CrownyTVM/std/메신저알림.han— 컴파일러용 사본/Users/ef/Downloads/CrownyTVM/std/시즌1알림.한선— 기존 (위임 호출자, 메인 세션이 한 줄 수정)/tmp/메신저알림이력.dat— 이력 영속/tmp/v_메신저알림.han— 자가검증 진입점
연동 한 줄
시즌1알림.한선의 알림_메신저전송(채널, 본문) 안에서 메신저알림_시스템("kps", 본문)을
호출하도록 한 줄 위임 추가. cron 트리거 bin/시즌1단가cron.sh는 무변경.
잔여 이슈
- 메신저 v3 실제 endpoint:
/api/v1/messages가정. talk-api 운영 세션이 정식 경로/인증 헤더 확정 시
메신저알림_경로(), 메신저알림_시스템토큰() 두 함수만 갱신.
- 시스템 토큰: 현재
SYSTEM_PLACEHOLDER. launchd plist에서CROWNY_SYSTEM_TOKEN주입 후
메신저알림_시스템토큰()을 환경변수읽기()로 교체.
- 환경 토글:
메신저알림_환경()기본 "mock". 실배포 시 "production"으로 변경하면
- Slack: 시즌1알림.한선의
알림_슬랙전송()은 그대로 MOCK 유지 권고(TLS 필요).
- TCP 연결 실패 시:
ERR_CONNECT반환 + 이력 ERR 기록. 시즌1알림 호출자는 이를