J-5 배정 판정을 누가 부르는가 — 호출 주체와 인증
무엇을
POST /hub/routing-decisions(J-5 인입 전 배정 판정, decisions/313)는 만들어져 있고 아무도 부르지 않는다.
시연에서 부를지, 부른다면 누가 어떤 토큰으로 부를지 정한다.
왜 정성윤 몫인가
후보가 콜 미디에이터다 — 통화가 시작되는 순간을 아는 것이 거기뿐이다. 09-15 부터 조서희·장민석 님 로그에 「정성윤 결정 대기」로 남아 있다.
선택지
/dev테스트 콜이 통화 시작 직후 부른다 → 쓰기 경로 서비스 토큰(w5-ingest-auth-fail-closed)을 그대로 쓴다- 시연에서 부르지 않는다 → API 는 있고 「인입 전 배정은 전화 사업자 연동이 있어야 의미가 있다」를 발표에 그대로 적는다
완료 조건
- 결정을
_logs/에 남기고 조서희·장민석 님 대기를 푼다 - 부르기로 하면 — 판정 결과가 상담원 화면 어디에 보이는지까지 조서희 님과 맞춘다
결정 (2026-09-21, 정성윤) — _project/decisions/126
콜 미디에이터가 통화 시작 직후 부른다. 통화 종료는 미디에이터가 부르지 않는다(화면 버튼 그대로). 구현은 열쇠 꽂기(w5-ingest-auth-fail-closed) 뒤다.
구현할 때 정할 것 — 결정 기록에 그대로 적었다.
- 후보 상담사 목록 — API 는 「지금 받을 수 있는 상담사」를 부르는 쪽이 넘기게 돼 있는데 미디에이터는 누가 대기 중인지 모른다. 시연 범위에서는 미디에이터 설정의 후보 목록으로 넘긴다(비면 빈 목록)
- 발신 번호가 없는 테스트 콜은 늘 「블랙리스트 아님」이다. J-5 를 보이려면 블랙리스트에 올린 고객 번호로 통화를 시작한다
- 판정이 실패해도 통화는 막지 않는다 · 서버 쪽 서비스 토큰 문은 장민석 님 · 화면 표시 위치는 조서희 님과
2026-09-22 — 장민석이 넘겨받음
미결 항목 「정성윤 님께 확인 — 백엔드 티켓 둘을 장민석이 넘겨받아도 되는지」(09-22)에 정성윤 님 12번 로그가
「장민석 님께 넘기기로 한 둘」로 답했다. 착수 전(todo)이라 보존할 수행 기록이 없어 담당을 옮긴다. 결정(위 절)은 정성윤 님 것 그대로다.
착수했다 — 결정 126 그대로 구현한다(콜 미디에이터가 통화 시작 성공 직후 부른다 · 실패해도 통화는 막지 않는다).
2026-09-22 — 구현 (장민석)
CallRegistry가POST /hub/calls성공 직후POST /hub/routing-decisions를 부른다 — 통화당 한 번(두 번째 채널은 안 부른다). 통화 시작이 실패하면 부르지 않는다.started에 묶지 않았다 — 전사는 판정을 기다리지 않는다. 판정 실패는배정 판정 실패 call=… status=…로그만 남기고 통화는 그대로다(결정 3번).- 후보:
ROUTING_CANDIDATES(쉼표 목록,.env.example에 키 이름). 비면 빈 목록 → 서버가 기존 배정 규칙으로 떨어뜨린다. 서비스 토큰은 기존CORE_API_TOKEN그대로. - 테스트: call-mediator 140 passed(J-5 4건 · 설정 1건 · 토큰이 이 경로에도 실리는지 1건) ·
tsc --noEmit통과. 태그0.2.4. - 남은 것: ① 운영
call-mediator-tokens/매니페스트에ROUTING_CANDIDATES를 넣을지 — 시연 상담원 ID 가 정해져야 한다(안 넣으면 늘 빈 목록) ② 판정 결과를 화면에 보일지 — 조서희 님과(두 번째 완료 조건, 지금은 로그만) ③ 배포 뒤 테스트 통화 1건으로routing_log에 행이 생기는지 확인
2026-09-22 — 성격 확정 (장민석, decisions/320)
313 과 대조하니 둘이 다투는 것처럼 읽혔다 — 313 은 「통화 시작 때 판정」을 기각했는데 호출자 표기에는 게이트웨이(= 콜 미디에이터)를 적었다.
사용자 선택: 126 유지. 시연을 AI 페르소나로 돌리는데 SYN-006 → SYN-007(같은 번호 재인입, 기대값 routing: veteran)이 J-5 를 전제로 한다.
- 완성본의 호출자는 교환기(연결 전), 콜 미디에이터 호출은 시연용 대리다.
313인증 줄·plan.md7.3절 표기를 그렇게 고쳤다. - 한계 둘을 적었다 — 판정이 연결을 바꾸지 못한다 · 후보가 설정 고정값이다. 발표·화면에서는 「배정 판정」으로 부른다.
- 남은 것:
ROUTING_CANDIDATES에 넣을 운영agent_id— 페르소나 상담원(A01~A06)은 대본 배역일 뿐agent행과 이어져 있지 않다. 운영agent에서 고르고, 그중 한 명 이상이 근속 기준(기본 3년) 이상이어야 SYN-007 이veteran으로 나온다(없으면 「일반 배정으로 떨어짐」이 기록된다 — 그것도 대본이 요구하는 기록이다).CUSTOMER_REF_HMAC_KEY가 있어야 두 통화가 한 고객으로 이어진다(scripts/persona_sim/E2E.md).
2026-09-22 — 배포 (call-mediator 0.2.5)
PR #131 머지 → release 성공. 위 절들의 태그 0.2.4 는 #129 와 겹쳐 머지 때 0.2.5 로 올라갔다. 아직 안 본 것: 테스트 통화 1건으로 routing_log 에 행이 생기는지 · ROUTING_CANDIDATES 운영 값.
2026-09-22 — 시연 준비를 미리 만들었다 (장민석)
scripts/persona_sim/seed_demo_agents.py— 페르소나 A01~A06 → 운영agent행demo-A01~demo-A06+ 입사일(오늘 − 페르소나 근속, 시연용 값). 행을 만드는 길이 토큰 발급뿐이라 발급한 토큰은 찍지 않고 곧바로 폐기- 매니페스트
ROUTING_CANDIDATES= 그 여섯. 근속 기준 3년이면 베테랑 후보는 A03(7년)·A04(4년)·A06(3년) - 남은 것: 배포 뒤 스크립트 한 번(관리자 토큰, 런북 12-2-c) → SYN-006 승인 → SYN-007 재생 →
routing_log에veteran판정
2026-09-22 — 배포
0.1.35운영 배포됨 (PR #132 머지 07:57 → release 성공 ·/healthversion: 0.1.35·read_guard: open확인, 09-22)- 남은 것: 판정 결과 화면 표시(
w6-routing-result-ui, 조서희) · 운영routing_log확인(w6-routing-candidates-prod)
2026-09-22 — 운영에서 베테랑 배정 확인 (정성윤)
w6-routing-candidates-prod 로 끝까지 봤다 — 시연 상담원 시드 뒤 SYN-006 → 요청·승인 → 같은 번호 SYN-007 에서 demo-A03(근속 7.0년) 배정, routing_log 31. 이 티켓에 남은 것은 완료 조건 한 줄(판정 결과를 화면 어디에 — w6-routing-result-ui, 조서희)뿐이다.
2026-09-30 — 닫는다 (정성윤)
남아 있던 완료 조건 한 줄(판정 결과가 화면 어디에 보이는지)은 09-23 에 정해졌다 — decisions/407 · w6-routing-result-ui(상담원 화면 「배정 판정 기록됨」 배너,
announceRouting: true). 호출 주체·인증(126·320)·운영 확인(routing_log 31, demo-A03 배정)까지 전부 있으므로 done. 정성윤이 넘겨받았다(decisions/137 — 마감까지 §4 대로 assignee 를 옮기고 여기 적는다).
운영에서 배너를 눈으로 보는 것은 w6-routing-result-ui 에 남긴다.