o2o-site-AEO/docs
hbyang d32df10cf7 [feat] solution/backend: 카카오 채널 웹훅 — 에이전트 4단계
런타임은 한 줄도 안 바뀌었다. 채널을 모르게 만들어 둔 것이 여기서 값을 했다 —
새로 생긴 것은 형식 변환(kakao_bot)과 대화 상태(channel)뿐이다.

★★ 오픈빌더는 서명을 주지 않는다. URL 만 알면 누구나 때릴 수 있고
userRequest.user.id 를 위조하면 그 사장님 행세를 한다 — 1단계의 신원 연결이
통째로 무의미해지는 자리다. 공유 시크릿(헤더 X-Agent-Secret, compare_digest)
+ 선택적 KAKAO_BOT_ID 대조로 막고, 시크릿이 없으면 엔드포인트가 404 다
(401 은 "여기 뭔가 있다" 를 알려 준다).

- router/v1/agent/kakao_bot: 카카오 형식을 아는 유일한 파일. 헤더·경로 두 경로
- services/agent/channel: 신원(★ 토큰을 발급하지 않는다) · 가게 고르기 · 확인
- 0022: owner_kakao_links 에 current_place_id · pending_*

빌더 화면과 다른 것 셋:
- 로그인 토큰이 없다 → 발화자 키로 사장님을 찾는다
- place_id 가 URL 에 없다 → 여럿이면 추측하지 않고 되묻는다. 임의로 첫 가게를
  고르면 사장님은 엉뚱한 가게를 고쳐 놓고도 모른다
- 확인을 되돌려 줄 프론트가 없다 → 서버가 pending 을 든다. ★ 3분 만료가 없으면
  한참 뒤의 "네" 한 마디에 묵은 발행이 돈다

5초 벽은 DEADLINE_SEC=4.0 으로 끊고, 어떤 실패도 200+안내다 —
메신저에서는 500 도 침묵으로 보인다.

밟은 것: execute_lambda 는 람다 반환값을 그대로 준다(CRUD 관례가 (ErrorType,값)).
우리 람다가 객체만 돌려주자 언패킹 TypeError 가 났고, 라우터가 예외를 삼켜
화면에는 안내 한 줄만 보였다 — 원인이 안 보이는 종류다.

test_kakao_webhook.py 17 passed. 전체 841 passed / 53 failed(이전과 동일).
npm run lint 통과

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 15:13:33 +09:00
..
AGENT.md [feat] solution/backend: 카카오 채널 웹훅 — 에이전트 4단계 2026-09-22 15:13:33 +09:00
ALERTS.md [fix] solution: 온보딩 생성·크롤링 진단·장애 알림 묶음 2026-09-16 16:25:02 +09:00
API_USAGE.md [feat] solution,postgres-init,docs: SNS 게재 — 사장님이 누르면 쓰고, 승인받아, 사장님 계정으로 올린다 2026-09-14 15:46:44 +09:00
ARCHITECTURE.md feat(solution): 발행 워커·버전 관리와 예약·미리보기 정리 2026-09-15 16:12:16 +09:00
COLLECTION_SEO_AEO_FLOW.md [docs] docs: 값이 DB 에서 페이지까지 가는 길을 한 장으로 — 옛 표 이름 잔재도 정리 2026-09-10 11:02:45 +09:00
DATA_MODEL.md Merge branch 'feature/social-post' 2026-09-18 09:00:07 +09:00
DATA_SOURCE_RESEARCH.md 문서: 앱을 가른 뒤 낡아진 서술을 고치고, 개발과 무관해진 기록을 지운다 2026-08-31 16:58:09 +09:00
DECISIONS.md [feat] solution/backend,docs: 미니블로그 승인 → 쓰레드 자동 게재, 쓰레드 초안 생성 OpenAI 전환 2026-09-22 08:33:40 +09:00
DEPLOY.md feat(solution): 발행 워커·버전 관리와 예약·미리보기 정리 2026-09-15 16:12:16 +09:00
DEVELOPMENT_DIRECTION.md [docs] docs: 값이 DB 에서 페이지까지 가는 길을 한 장으로 — 옛 표 이름 잔재도 정리 2026-09-10 11:02:45 +09:00
DEVLOG.md [feat] solution/backend: 카카오 채널 웹훅 — 에이전트 4단계 2026-09-22 15:13:33 +09:00
GENERATION_FLOW.md [feat] solution,postgres-init,docs: 생성 진행 상태 · 새로 만들기 존중 · 발행본 색인·파비콘 2026-09-15 17:29:27 +09:00
MINI_BLOG.md [feat] solution/backend: 이메일 승인 확인 화면에서 발행 사이트로 5초 뒤 자동 이동 2026-09-22 14:10:52 +09:00
PRODUCT.md [feat] solution,postgres-init,docs: SNS 게재 — 사장님이 누르면 쓰고, 승인받아, 사장님 계정으로 올린다 2026-09-14 15:46:44 +09:00
PUBLISH_VERSION.md feat(solution): 발행 워커·버전 관리와 예약·미리보기 정리 2026-09-15 16:12:16 +09:00
SEARCH_CONSOLE_CLIENT.md [feat] solution/backend: 서치콘솔 자동 제출·색인 상태 추적 추가 2026-09-15 14:50:30 +09:00
SEARCH_CONSOLE.md [feat] solution/backend: 서치콘솔 자동 제출·색인 상태 추적 추가 2026-09-15 14:50:30 +09:00
SERVERS.md [docs] SERVERS: 킹서버 접속이 경유 없이 14445 직행으로 바뀌었다 2026-09-21 10:15:01 +09:00
SOCIAL.md [feat] solution/backend,docs: 미니블로그 승인 → 쓰레드 자동 게재, 쓰레드 초안 생성 OpenAI 전환 2026-09-22 08:33:40 +09:00
TEAMS_WEBHOOK.md [fix] solution/backend: Teams 카드 필수 필드 보완 2026-09-15 15:55:59 +09:00
WEATHER.md [fix] site,solution/backend: 날씨 상태 라벨을 코드별 고유값으로 — 구간 뭉치기 제거 2026-09-22 08:36:09 +09:00