이 페이지는 Voice File Job을 생성하고, 오디오를 업로드하고, 결과를 가져오는 전체 흐름을 설명해요. 현재 구현은 클라이언트가 직접 호출하는 upload-complete 방식을 사용해요(S3 이벤트 없음).
필요한 것
- API key:
Authorization: Bearer {id}.{secret}
- transcriptLocaleHints: 최대 1개 (선택)
- translationLocales: 최대 5개 (선택)
전체 체크리스트
- Job 생성 →
{ id, uploadUri } 수신
uploadUri에 오디오 업로드
PUT /v1/external/voice-file/jobs/{jobId}/upload-complete 호출
- 완료될 때까지 job 상태 폴링
- transcript 및 (선택적으로) translations 가져오기
- 콘텐츠를 더 잘 이해하기 위해 paragraph summary 가져오기
폴링 전략 (권장)
GET /v1/external/voice-file/jobs/{jobId}를 exponential backoff로 폴링해요
- 1~2s 간격으로 시작해서 4s, 8s, 최대 30s까지 늘려요
- 중단 조건:
- 성공:
status = COMPLETED
- 실패:
status = FAILED
- 성공 후:
- 항상 transcript를 가져와요:
GET /v1/external/voice-file/jobs/{jobId}/transcript
- translations를 요청했다면:
GET /v1/external/voice-file/jobs/{jobId}/translations 또는 locale별 endpoint
- paragraph summary 가져오기:
- transcript의 경우:
GET /v1/external/voice-file/jobs/{jobId}/transcript/paragraph-summary
- translations의 경우:
GET /v1/external/voice-file/jobs/{jobId}/translations/{locale}/paragraph-summary
처리가 성공했을 때의 최종 상태는 COMPLETED예요. 이는 transcript, translation(요청한 경우), 그리고 둘 다에 대한 paragraph summary를 포함한 모든 처리가 완료되었다는 의미예요.
파일 제한 및 요구사항
지원하는 오디오 포맷
업계 표준 STT 역량을 기반으로 Tiro는 다음 포맷을 지원해요:
오디오 포맷:
| Format | MIME Type | Extension |
|---|
| MP3 | audio/mpeg | .mp3 |
| WAV | audio/wav | .wav |
| M4A | audio/mp4 | .m4a |
비디오 포맷 (오디오 추출):
| Format | MIME Type | Extension |
|---|
| MP4 | video/mp4 | .mp4 |
파일 크기 및 길이 제한
| 제한 종류 | 값 | 비고 |
|---|
| 최대 파일 크기 | 500 MB | 대부분의 사용 사례에 적합한 실질적 제한 |
| 최대 길이 | 4시간 | 대부분의 회의와 인터뷰를 커버 |
| 최소 샘플레이트 | 8 kHz | 음성 인식 최소 기준 |
| 권장 샘플레이트 | 16 kHz+ | 정확도에 최적 |
| 최대 샘플레이트 | 48 kHz | 스튜디오 품질 지원 |
| 채널 | Mono 또는 Stereo | 다중 화자 지원 |
처리 시간 예상치
처리 시간은 긴 파일에 대해 병렬 처리로 최적화돼요:
| 파일 길이 | 일반적인 처리 시간 |
|---|
| 5분 미만 | 45-75초 |
| 5-20분 | 1-3분 |
| 20-60분 | 3-6분 |
| 1-4시간 | 6-18분 |
Paragraph Summary 기능
Paragraph Summary 기능은 오디오 콘텐츠를 지능적으로 요약해서, transcript나 translation을 이해하기 쉬운 단락 단위 요약으로 나눠줘요.
동작 방식
- Transcript 처리: 전사가 완료되면 텍스트가 CompositeTextSplitter를 사용해 논리적 단락으로 자동 분할돼요
- Summary 생성: 각 단락이 ParagraphSummarizer를 거쳐 간결한 요약으로 만들어져요
- Translation 통합: translations를 요청하면 각 locale의 번역된 콘텐츠를 기반으로 요약이 다시 생성돼요
- 비동기 처리: 요약 생성은 transcript/translation 완료 후 비동기로 이루어져요
시퀀스
직접 해보고 싶으세요? 단계별 튜토리얼에서 전체 흐름을 따라가 보세요. 업로드, 폴링, 그리고 첫 transcript 가져오기까지 끝까지 안내해요.