Skip to content

에러 처리

SDK 에러는 3가지 경로로 전달됩니다:

  1. init 에러init()Error를 throw
  2. 런타임 에러onError 콜백으로 전달
  3. 처리 에러onSignal에서 ERROR/REJECTED 시그널로 전달 (세션 유지)

에러 코드

에러 코드분류설명
SOCKET_FAILEDinitWebSocket 연결 실패 또는 SDK 키 검증 실패
STREAMING_FAILEDinitAgora 스트리밍 연결 실패
SOCKET_DISCONNECTED_UNEXPECTEDLY런타임WebSocket 비정상 종료
STREAMING_DISCONNECTED_UNEXPECTEDLY런타임네트워크 끊김 등으로 Agora 연결 끊김
SERVER_ERROR런타임서버에서 SERVER_ERROR 시그널 수신
WORKER_DISCONNECTED런타임서버 연결 종료 시그널 수신

init 에러

init()은 실패 시 Error를 throw합니다. SDK는 자동으로 cleanup 후 IDLE 상태로 돌아갑니다.

js
try {
  await SDK.init(options);
} catch (error) {
  console.error(error.message);
}
jsx
SDK.init({ sdk_key: 'YOUR_SDK_KEY', avatar_id: 'YOUR_AVATAR_ID' })
  .then(() => { initialized.current = true; })
  .catch((error) => console.error(error.message));

init 실패 시 onError는 호출되지 않습니다. init()Error를 throw하므로 try/catch로 처리하세요.

message원인
"Failed to connect: ..."SDK 키 검증 또는 WebSocket 연결 실패
"Failed to connect streaming: ..."스트리밍 연결 실패

런타임 에러

init 이후 연결 중 발생하는 에러입니다. onError 콜백으로 전달됩니다.

런타임 에러 발생 시 SDK는 자동으로 연결을 정리하고 IDLE 상태로 복귀합니다. 클라이언트는 onError + onStatus(IDLE)를 수신한 후 init()으로 재연결할 수 있습니다.

에러별 상태 흐름

에러 코드발생 시점상태 전이
(init throw)init 중CONNECTING 또는 SOCKET_CONNECTEDIDLE
SOCKET_DISCONNECTED_UNEXPECTEDLY런타임CONNECTED_FINISH → cleanup → IDLE
STREAMING_DISCONNECTED_UNEXPECTEDLY런타임CONNECTED_FINISH → cleanup → IDLE
SERVER_ERROR런타임CONNECTED_FINISH → cleanup → IDLE
WORKER_DISCONNECTED런타임CONNECTED_FINISH → cleanup → IDLE

init 에러는 init()이 throw하고, 런타임 에러는 onError 콜백 + onStatus(IDLE)로 전달됩니다.

에러 처리 예시

js
SDK.onError((error) => {
  console.error('SDK Error:', error.code, error.message);
});
에러 코드message원인
SOCKET_DISCONNECTED_UNEXPECTEDLY"WebSocket disconnected unexpectedly: {code}"WebSocket 비정상 종료
STREAMING_DISCONNECTED_UNEXPECTEDLY"Streaming disconnected: {reason}"네트워크 끊김 등 Agora 연결 끊김
SERVER_ERROR서버가 보낸 메시지 또는 "SERVER_ERROR"서버에서 SERVER_ERROR 시그널 수신
WORKER_DISCONNECTED서버가 보낸 메시지 또는 "WORKER_DISCONNECTED"서버 연결 종료 시그널 수신

처리 에러 시그널

ERROR, REJECTED 시그널은 세션을 종료하지 않습니다. 개별 요청에 대한 실패를 나타냅니다. onSignal에서 수신합니다 (onError가 아님).

js
SDK.onSignal((data) => {
  if (data.signal === 'ERROR') {
    // 서버 처리 중 오류
    console.warn('에러:', data.payload?.type);
  }
  if (data.signal === 'REJECTED') {
    // 입력이 비정상적
    console.warn('거절:', data.payload?.type);
  }
});
시그널payload.type 예시설명
ERRORSTT_ERROR, LLM_ERROR, TTS_ERROR서버 내부 처리 오류
REJECTEDSTT_EMPTY, MODERATION입력 검증 실패 또는 정책 위반