메인 콘텐츠로 건너뛰기
Comfy Router는 fal이 제공하는 xAI의 Grok Voice와 실시간 음성 대 음성 세션을 중계합니다. Comfy API 키를 사용해 Router에 WebSocket 하나를 엽니다. Router는 계정과 크레딧을 확인하고, 업스트림에서 세션을 연 뒤 양방향으로 이벤트를 중계합니다. 세션 시간(초)만큼 Comfy 크레딧에서 비용이 차감됩니다.

엔드포인트

요청은 WebSocket 업그레이드입니다 (GET과 Connection: Upgrade, Upgrade: websocket 포함). 그 외의 요청은 426으로 거부됩니다.

인증

업그레이드 요청의 헤더에 Comfy API 키를 X-API-Key: comfyui-... 또는 Authorization: Bearer comfyui-... 형식으로 전송하세요. Router는 쿼리 문자열이나 WebSocket 서브프로토콜에서 키를 읽지 않습니다.
브라우저는 WebSocket에 헤더를 설정할 수 없으며, Comfy API 키는 절대 브라우저에 도달해서는 안 됩니다. 서버에서 세션을 열고 오디오를 브라우저로 직접 중계하세요.

연결

업그레이드가 성공하면 xAI가 Grok Voice에 대해 문서화한 실시간 이벤트를 주고받습니다. 이 예제는 세션을 구성하고, 텍스트 턴 하나를 전송하며, 수신하는 각 이벤트 유형을 출력합니다.
작업이 끝나면 즉시 소켓을 닫으세요. 과금은 마지막 응답이 아니라 세션이 종료될 때까지 부과됩니다.

이벤트

Router는 자체 이벤트 프로토콜을 정의하지 않습니다. 서버 이벤트는 fal이 보내는 그대로 도착하며, Router가 허용하는 클라이언트 이벤트는 변경 없이 전달됩니다. 이벤트 목록, 세션 필드, 음성, 오디오 형식은 다음 문서를 참고하세요: 예제에서처럼 각 클라이언트 이벤트를 하나의 msgpack 바이너리 메시지로 전송하세요. 이는 fal의 realtime 클라이언트가 사용하는 프레이밍이며, 모델의 이벤트도 session.created로 시작하는 msgpack 바이너리 메시지로 같은 방식으로 돌아옵니다. fal은 x-fal-message 유형의 자체 JSON 텍스트 메시지(타이밍 정보)도 보내는데, 이는 건너뛰어도 됩니다. Router의 검사는 클라이언트 이벤트를 하나의 JSON 텍스트 메시지로도 허용하지만, 클라이언트에서 JSON을 테스트해 보지 않았다면 msgpack을 사용하세요. Router는 전달하기 전에 각 클라이언트 이벤트를 검사합니다:
  • 이벤트 유형: session.update, input_audio_buffer.append, input_audio_buffer.commit, input_audio_buffer.clear, conversation.item.create, conversation.item.delete, conversation.item.truncate, response.create, response.cancel, 그리고 fal의 x-fal-session.configure.
  • 모델: session.update의 model은 grok-voice-latest, grok-voice-3.0, grok-voice-2.0 중 하나여야 합니다.
  • 도구: 클라이언트가 실행하는 함수 도구는 허용됩니다. 서버 측 도구(웹 검색, X 검색, 파일 검색, MCP)는 거부됩니다.
  • 미디어: 이미지 및 비디오 입력은 거부됩니다. 세션은 음성과 텍스트만 지원합니다.
  • 크기: 클라이언트 메시지 하나는 최대 1 MiB입니다.
거부된 이벤트는 전달되지 않으며, Router는 종료 코드 1008로 세션을 닫습니다.

가격

세션 비용은 **초당 $0.0011869**입니다(분당 약 $0.0712, 초당 0.2504 크레딧, 분당 약 15.0 크레딧이며, 211 크레딧 = $1 USD 기준입니다). 세션이 열려 있는 동안 15초 증가분 단위로 청구되며, 마지막 부분 증가분은 초 단위로 올림하여 청구됩니다. 청구는 오디오가 흐르는지 여부와 관계없이 업그레이드 시점부터 소켓이 닫힐 때까지 이루어집니다.

제한

세션이 시간 제한에 도달하거나 크레딧이 소진되면 연결이 종료 프레임 없이 닫힐 수 있습니다(흔히 종료 코드 1006으로 표시됨). 크레딧을 충전한 이후에만 다시 연결하거나, 더 많은 시간이 필요하면 새 세션을 시작하세요.

오류

업그레이드 이전

Router가 연결을 거부하면 프로토콜 전환 대신 HTTP 상태와 JSON 본문으로 응답합니다:
code를 기준으로 분기하세요. detail은 사람이 읽기 위한 정보입니다.

업그레이드 이후

그 외의 종료는 fal 또는 xAI에서 발생합니다. 이벤트에 링크된 해당 문서를 참조하세요.

다음

  • 청구: Router가 요금을 부과하는 방식과 사용량을 대조하는 방법.
  • 오류 및 재시도: 다른 Router 호출이 반환하는 오류 분류.
  • 제한 사항: 요청 속도 및 기타 제한.