할 수 있는 일
게이트웨이가 보내는 이벤트를 타입별로 구독해요. 핸들러는 동기·비동기 모두 되고 등록 순서대로 처리돼요. 핸들러가 예외를 던져도 수신 루프는 죽지 않아요. 원본 프레임은 언제나raw에서 볼 수 있어요. SDK가 승격하지 않은 필드가 필요할 때 쓰세요.
공통 필드
통화 스트림 이벤트는type·version·sessionId·callId·timestamp를 공통으로 실어요.
call.summary와 error는 스트림 이벤트가 아니라 명령 응답이에요. 게이트웨이가
sessionId·timestamp를 보내지 않으므로 두 필드가 비어 있어요.
필드명 표기는 언어별 관례를 따라요. Python은 snake_case(turn_index), Go는
PascalCase(TurnIndex)예요.
통화 진행
call.created가 초기 상태 queued를 뜻해요. call.statusChanged는 상태가 queued에서
바뀐 뒤부터 와요.
명령 응답
명령이 검증되어 넘어갔다는 접수 확인일 뿐이에요.
answer가 실제로 말해진 것은 뒤따르는
agent.turn으로 확인해요. sendDtmf는 톤이라 애초에 agent.turn이 없어요.종단
종단 이벤트가 오면 통화 스트림이 끝나요. 취소는 종단 이벤트가 아니라
call.statusChanged(status: cancelled)로 와요. waitClosed는 넷 중 아무거나에서 풀려요.
그 밖
auth.ok는 연결 함수가 내부에서 소비하고 다시 내보내지 않아요.
call.summary의 durationSeconds·transcript·summary·creditCharged는 null일 수 있어요.
통화 상태
status와 previousStatus에 들어가는 값이에요.
주의사항
dialing·ringing은 건너뛸 수 있어요. 이미 응답된 통화는inProgress로 바로 가므로 중간 상태에 의존하지 마세요.- 진행 상태는 직전 발행 상태와 중복 제거돼요. 같은 상태가 연속으로 오지 않아요.

