본문 바로가기
  1. 인사이트

음성 인식 API 연동: 개발자 가이드

작성자
Jack Limebear

듣기이 기사 오디오로 듣기

음성 인식 API는 개발자가 음성 인식 및 전사 기능을 애플리케이션에 직접 통합할 수 있게 해줍니다. 하지만 STT API를 연결하기 전에 몇 가지 아키텍처 결정을 먼저 해야 합니다.

어떤 전사 모드를 사용할지, 긴 오디오 파일은 어떻게 처리할지, 제품명이나 고유명사가 올바르게 표기되는지 등 여러 가지를 고민해야 합니다. 미리 계획을 세우면 확장성 있는 음성 인식 API 연동을 개발자 앱에 구축할 수 있습니다.

이 가이드에서는 ElevenLabs 음성 인식 API 연동에 필요한 모든 내용을 다룹니다. 바로 복사해 사용할 수 있는 명확한 코드 예시도 포함되어 있습니다. 참고용으로 ElevenLabs의 음성 인식 빠른 시작API 가이드를 다른 창에 띄워두세요.

요약

  • ElevenLabs 음성 인식에는 두 가지 모드가 있습니다: 배치(사전 녹음된 오디오용)와 실시간(웹소켓을 통한 라이브 오디오 스트림용)입니다.
  • Scribe v2는 90개 이상의 언어에서 배치 전사를 지원하며, 화자 분리, 키텀 프롬프트, 엔터티 감지, 단어별 타임스탬프, 멀티채널 지원 기능을 제공합니다.
  • Scribe v2 실시간은 약 150ms의 지연으로 라이브 스트리밍을 처리하며, 사용자가 말하는 동안 부분 전사와 발화가 끝나면 최종 전사를 제공합니다.
  • 8분이 넘는 파일은 Scribe v2가 자동으로 분할하여 병렬로 전사합니다. 장시간 작업에는 동기 응답을 기다리지 말고 웹훅을 사용하세요.
  • 키텀 프롬프트는 모델이 특정 용어에 집중하도록 맥락을 활용합니다. 제품명, 기술 용어, 특이한 고유명사 등에 키워드 리스트보다 더 신뢰할 수 있습니다.

음성 인식 API 연동: 배치 vs. 실시간

모든 ElevenLabs STT API 연동은 아키텍처 선택에서 시작합니다: 배치 또는 실시간. 두 방식 모두 강력한 STT 모델을 개발 환경에 제공하지만, 이 선택이 접근 가능한 기능부터 전체 지연 시간까지 모든 것에 영향을 줍니다.

두 모드의 차이점은 다음과 같습니다:

  • 배치(Scribe v2): 완성된 오디오 또는 비디오 파일을 받아 전사 후, 전체 전사 결과를 한 번에 반환합니다. 최대 1,000개의 키텀, 최대 32명의 화자 분리, 엔터티 감지, 멀티채널 모드, 비동기 전송을 위한 웹훅 등 가장 다양한 기능을 지원합니다. 표준 모드에서 최대 3GB, 10시간까지 파일을 지원합니다.
  • 실시간(Scribe v2 Realtime): 웹소켓을 통해 라이브 오디오 스트림을 받아, 약 150ms 지연으로 부분 및 최종 전사를 반환합니다. 최대 50개의 키텀과 단어별 타임스탬프를 지원하며, 음성 비서, 라이브 자막 등 사용자가 말하고 즉시 응답이 필요한 앱에 적합합니다.

차이점을 좀 더 자세히 살펴보겠습니다.

Feature
Batch (Scribe v2)
Realtime (Scribe v2 Realtime)
Input
Pre-recorded audio or video file
Live audio stream
Latency
File duration + processing time
~150ms
Keyterms
Up to 1,000 (50 chars each)
Up to 50 (20 chars each)
Speaker diarization
Up to 32 speakers
-
Entity detection
Entity detection, up to 56
-
Multichannel
Up to 5 channels
-
Languages
Accurate in 90+ languages
Accurate in 90+ languages
Async delivery
Webhooks
-
Best for
Transcription pipelines, meeting recordings, long-form audio
Voice agents, live captions, real-time assistants

간단한 기준: 전사 시작 전에 오디오가 완성되어 있으면 배치, 오디오가 생성되는 즉시 전사해야 한다면 실시간을 사용하세요.

Scribe v2와 Scribe v2 Realtime 선택 기준

배치와 실시간은 각각 다른 용도에 맞춰져 있어, 초기에 잘못 선택하면 나중에 다시 작업해야 할 수 있습니다.

더 자세히 알아보려면, 아래처럼 사용 사례에 맞게 모델을 선택하세요:

  • Scribe v2는 오디오가 처리 시작 전에 완성되어 있는 경우에 적합합니다. 예를 들어 회의 녹음, 팟캐스트 전사, 미디어 파일 등 오프라인으로 처리하는 모든 작업에 사용할 수 있습니다. 화자 분리, 엔터티 감지, 최대 1,000개의 키텀 등 모든 기능을 지원합니다.
  • Scribe v2 Realtime은 라이브 오디오에 최적화되어 있습니다. 웹소켓 스트림을 받아 오디오가 도착하는 즉시 전사를 반환하므로, 음성 비서나 사용자가 말하는 동안 앱이 바로 응답해야 하는 상황에 적합합니다.

추가로 고려해야 할 점은 언어별 정확도가 다르다는 것입니다. 언어 조합을 결정하기 전에 전사 단어 오류율(WER)을 확인하는 것이 좋습니다. Scribe v2는 90개 이상의 지원 언어별로 WER 등급을 공개합니다.

탁월한 정확도(≤5% WER)는 주요 유럽 언어, 일본어, 인도네시아어, 베트남어 등에 적용됩니다. 높은 정확도(5-10% WER)는 힌디어, 벵골어, 중국어, 한국어, 조지아어 등에 해당합니다. 자세한 분류는 언어 지원 문서에서 확인하세요.

ElevenLabs 음성 인식 API 설정하기

작동하는 클라이언트 준비는 두 단계면 충분합니다. 먼저 SDK를 설치하고, 두 번째로 인증 정보를 안전하게 저장하세요.

첫 전사 요청을 작성하기 전에 두 가지를 모두 준비하는 방법입니다.

SDK를 설치하고, .env 파일이나 플랫폼의 시크릿 매니저를 사용해 API 키를 안전하게 저장하세요. API 키를 코드에 직접 입력하지 마세요.

Python

pip install elevenlabs
pip install python-dotenv

TypeScript

npm install @elevenlabs/elevenlabs-js

.env 파일 생성:

ELEVENLABS_API_KEY=<your_api_key_here>

클라이언트 초기화:

Python

import os
from dotenv import load_dotenv
from elevenlabs.client import ElevenLabs

load_dotenv()

elevenlabs = ElevenLabs(
    api_key=os.getenv("ELEVENLABS_API_KEY"),
)

TypeScript

import { ElevenLabsClient } from "@elevenlabs/elevenlabs-js";

const elevenlabs = new ElevenLabsClient({
  apiKey: process.env.ELEVENLABS_API_KEY,
});

ElevenLabs STT API로 첫 배치 전사하기

클라이언트 초기화가 끝났다면, 이제 첫 파일을 전송할 준비가 되었습니다.

배치 API는 파일을 받아 전사 후, 전체 결과를 동기적으로 반환합니다. 아래 예시는 화자 분리와 오디오 이벤트 태깅이 활성화된 원격 오디오 파일을 전사합니다.

Python

# example.py
import os
from dotenv import load_dotenv
from io import BytesIO
import requests
from elevenlabs.client import ElevenLabs

load_dotenv()

elevenlabs = ElevenLabs(
    api_key=os.getenv("ELEVENLABS_API_KEY"),
)

audio_url = (
    "https://storage.googleapis.com/eleven-public-cdn/audio/marketing/nicole.mp3"
)
response = requests.get(audio_url)
audio_data = BytesIO(response.content)

transcription = elevenlabs.speech_to_text.convert(
    file=audio_data,
    model_id="scribe_v2",          # Model to use
    tag_audio_events=True,          # Tag audio events like laughter, applause, etc.
    language_code="eng",            # Language of the audio file. If set to None, the model will detect the language automatically.
    diarize=True,                   # Whether to annotate who is speaking
)

print(transcription)

실행:

python example.py

응답 객체에는 전체 전사 텍스트, 타임스탬프와 화자 ID가 포함된 단어별 항목, 감지된 오디오 이벤트가 포함됩니다.

각 단어 항목에는 세 가지 값 중 하나를 가지는 type 필드가 있습니다:

  • 단어: 오디오에서 전사된 단어입니다.
  • 간격: 띄어쓰기를 사용하는 언어에서 단어 사이의 공백입니다. 일본어, 광둥어, 버마어 등 일부 언어에는 적용되지 않습니다.
  • 오디오 이벤트: 웃음, 기침 등 비음성 소리에 대한 태그입니다.

응답 구조는 다음과 같습니다:

{
  "language_code": "en",
  "language_probability": 1,
  "text": "With a soft and whispery American accent, I'm the ideal choice for creating ASMR content, meditative guides, or adding an intimate feel to your narrative projects.",
  "words": [
    {
      "text": "With",
      "start": 0.119,
      "end": 0.259,
      "type": "word",
      "speaker_id": "speaker_0"
    },
    {
      "text": " ",
      "start": 0.239,
      "end": 0.299,
      "type": "spacing",
      "speaker_id": "speaker_0"
    },
    {
      "text": "a",
      "start": 0.279,
      "end": 0.359,
      "type": "word",
      "speaker_id": "speaker_0"
    }
  ]
}

language_probability 필드는 모델이 언어를 얼마나 자신 있게 감지했는지 0.00~1.00 범위로 표시합니다.

STT API 실시간 연동

실시간 STT API 연동은 약간 다른 패턴을 따릅니다. 하나의 요청과 응답 대신, 웹소켓 연결을 열고 전사가 도착할 때마다 읽어옵니다.

실시간 API는 웹소켓을 통해 라이브 오디오 스트림을 받아 오디오가 도착하는 즉시 전사를 반환합니다. 두 가지 전사 유형을 제공합니다:

  • 부분 전사: 모델이 들어오는 오디오를 처리하면서 업데이트되는 중간 결과입니다. 변경될 수 있습니다.
  • 최종 전사: 완료된 발화 구간에 대한 최종 결과입니다. 더 이상 변경되지 않습니다. "타임스탬프 포함" 옵션을 true로 설정하면 단어별 타임스탬프도 포함될 수 있습니다.

클라이언트 측 구현에서는 API 키 대신 일회용 토큰을 사용합니다. 이 토큰은 서버에서 생성되어 15분 후 만료되며, API 키가 브라우저에 노출되지 않습니다.

1단계: 일회용 토큰 생성(서버 측)

// Node.js server
import { ElevenLabsClient } from "@elevenlabs/elevenlabs-js";

const elevenlabs = new ElevenLabsClient({
  apiKey: process.env.ELEVENLABS_API_KEY,
});

app.get("/scribe-token", yourAuthMiddleware, async (req, res) => {
  const token = await elevenlabs.tokens.singleUse.create("realtime_scribe");

  res.json(token);
});

2단계: 연결 및 전사(클라이언트 측, React)

import { useScribe } from "@elevenlabs/react";

function MyComponent() {
  const scribe = useScribe({
    modelId: "scribe_v2_realtime",
    onPartialTranscript: (data) => {
      console.log("Partial:", data.text);
    },
    onCommittedTranscript: (data) => {
      console.log("Committed:", data.text);
    },
    onCommittedTranscriptWithTimestamps: (data) => {
      console.log("Committed with timestamps:", data.text);
      console.log("Timestamps:", data.words);
    },
  });

  const handleStart = async () => {
    // Fetch a single use token from the server
    const token = await fetchTokenFromServer();

    await scribe.connect({
      token,
      microphone: {
        echoCancellation: true,
        noiseSuppression: true,
      },
    });
  };

  return (
    <div>
      <button onClick={handleStart} disabled={scribe.isConnected}>
        Start Recording
      </button>
      <button onClick={scribe.disconnect} disabled={!scribe.isConnected}>
        Stop
      </button>

      {scribe.partialTranscript && <p>Live: {scribe.partialTranscript}</p>}

      <div>
        {scribe.committedTranscripts.map((t) => (
          <p key={t.id}>{t.text}</p>
        ))}
      </div>
    </div>
  );
}

useScribe 훅은 웹소켓 연결, 마이크 접근, 전사 상태 관리를 담당합니다. partialTranscript는 진행 중인 텍스트, committedTranscripts는 누적된 최종 구간 배열입니다.

서버 측 스트리밍(마이크 대신 URL 또는 파일 스트림에서 오디오 전사)에 대해서는 서버 측 스트리밍 가이드.

동시 처리 및 긴 파일 확장

긴 파일은 대부분의 API와는 다른 확장 모델이 필요합니다. 구축 전에 이해해두면 좋습니다.

배치 전사의 동시 처리는 일반 API와 다르게 동작합니다. 동시에 보낼 수 있는 요청 수를 제한하는 대신, Scribe v2가 내부적으로 긴 파일을 자동 병렬 처리합니다.

8분이 넘는 파일은 여러 구간으로 분할되어 동시에 전사됩니다. 동시 처리 구간 수는 다음과 같이 계산됩니다:

Concurrency = min(4, round_up(audio_duration_secs / 480))

예시:

  • 15분 파일은 동시 처리 2개 사용
  • 120분 파일은 동시 처리 4개 사용(최대치)

표준 모드에서는 최대 10시간, 3GB까지 지원합니다. 참고: 멀티채널 모드는 최대 길이가 더 짧으니 아래 멀티채널 전사 섹션을 참고하세요.

지원 포맷 측면에서 STT API는 가장 일반적인 오디오 및 비디오 포맷을 지원합니다:

  • 오디오: AAC, AIFF, OGG, MP3, OPUS, WAV, FLAC, M4A, WebM.
  • 비디오: MP4, AVI, MKV, MOV, WMV, FLV, WebM, MPEG, 3GPP.

비디오 파일을 바로 전달하면 오디오 트랙이 전사되어 별도의 전처리 없이 결과를 받을 수 있습니다.

키텀 프롬프트

일반 모델은 브랜드명이나 기술 용어를 잘못 전사하는 경우가 많습니다. 키텀 프롬프트는 이를 해결하기 위한 기능입니다.

키텀 프롬프트는 전사 시 모델이 특정 단어나 구에 집중하도록 유도합니다. 오디오에 제품명, 기술 용어, 특이한 고유명사가 포함되어 있다면 꼭 사용해야 할 기능입니다.

키텀 프롬프트의 장점은 맥락을 활용한다는 점입니다. 예를 들어 "ElevenLabs"를 키텀으로 지정하면, 화자가 회사명을 말할 때 올바르게 전사됩니다. 이 기능이 없으면 "I've worked at eleven labs for a year" 같은 문장이 잘못 전사될 수 있습니다.

키텀 프롬프트 없이:

I work at eleven labs.

keyterms=["ElevenLabs"] 사용 시:

I work at ElevenLabs.

배치는 최대 1,000개(각 50자), 실시간은 최대 50개(각 20자)까지 키텀을 지원합니다.

키텀을 활용한 배치 전사

Python

import os
from dotenv import load_dotenv
from io import BytesIO
import requests
from elevenlabs.client import ElevenLabs

load_dotenv()

elevenlabs = ElevenLabs(
    api_key=os.getenv("ELEVENLABS_API_KEY"),
)

audio_url = (
    "https://storage.googleapis.com/eleven-public-cdn/documentation_assets/audio/stt-keyterm-prompting.mp3"
)
response = requests.get(audio_url)
audio_data = BytesIO(response.content)

transcription = elevenlabs.speech_to_text.convert(
    file=audio_data,
    model_id="scribe_v2",
    # Keyterms to prompt the model with.
    # Up to 1,000 keyterms can be provided, with a maximum length of 50 characters each
    keyterms=["ElevenLabs"],
)

print(transcription)

키텀을 활용한 실시간 스트리밍

실시간 웹소켓 연결 시 키텀을 전달하세요:

Python

connection = await elevenlabs.speech_to_text.realtime.connect(RealtimeUrlOptions(
    model_id="scribe_v2_realtime",
    keyterms=["ElevenLabs"],
))

또는 웹소켓 URL에 쿼리 파라미터로 직접 전달할 수도 있습니다:

wss://api.elevenlabs.io/v1/speech-to-text/realtime?model_id=scribe_v2_realtime&keyterms=ElevenLabs&keyterms=AnotherTerm

키텀 프롬프트는 추가 비용이 발생합니다. 자세한 내용은 API 요금 페이지를 참고하세요.

고급 기능

위 단계들은 STT API의 기본 전사 흐름을 안내하지만, 최종 결과를 더욱 풍부하게 만드는 다양한 기능이 있습니다. 음성 인식 API에서 활용할 수 있는 고급 기능은 다음과 같습니다:

  • 화자 분리로 누가 말하는지 식별
  • 노-버베이팀 모드로 전사 결과 정리
  • 엔터티 감지로 민감 정보 표시
  • 멀티채널 전사로 오디오 채널 분리

각 기능을 더 자세히 살펴보겠습니다.

화자 분리

배치 요청에서 diarize=True로 설정하면 누가 말하는지 주석이 추가됩니다. Scribe v2는 최대 32명의 화자를 지원하며, 응답의 각 단어에는 speaker_id 필드(예: speaker_0, speaker_1)가 포함되어 화자별로 전사 구간을 분리할 수 있습니다.

화자 분리는 회의 전사, 인터뷰 처리, 여러 명이 말하는 녹음에서 각 화자의 발화를 구분해야 할 때 유용합니다.

노-버베이팀 모드

no_verbatim=True로 설정하면, 모델이 전사 결과에서 군더더기 단어, 머뭇거림, 불필요한 반복을 제거합니다. 예를 들어 "음, 음-아마도, 어, 옵션 A로 가야 할 것 같아"가 "옵션 A로 가야 할 것 같아"로 정리됩니다.

이 기능은 자막, 요약, 가독성이 중요한 모든 용도에 더 깔끔한 결과를 제공합니다. 배치(scribe_v2)와 실시간(scribe_v2_realtime) 모두에서 사용할 수 있습니다.

엔터티 감지 및 마스킹

Scribe v2는 전사 결과에서 엔터티를 감지하고, 각 엔터티의 정확한 타임스탬프를 제공합니다. 지원 카테고리에는 PII(이름, 신용카드 번호, 주민등록번호), PHI(의료 정보), PCI(결제 정보) 등이 있습니다. 전체 엔터티 유형은 엔터티 감지 문서.

에서 확인하세요.

이 기능은 컴플라이언스가 필요한 경우에 특히 유용하며, 저장 또는 표시 전에 민감 정보를 자동으로 마스킹할 수 있습니다.엔터티 감지는 기본 전사 비용에 시간당 $0.070의 추가 비용이 발생합니다. 자세한 내용은 API 요금 페이지

를 참고하세요.

멀티채널 전사

use_multi_channel=True로 설정하면 각 오디오 채널이 독립적으로 전사되고, 채널 번호에 따라 화자 ID가 할당됩니다. 최대 5채널까지 지원하며, 멀티채널 모드의 최대 파일 길이는 1시간입니다.

멀티채널 모드는 화자별로 오디오 트랙이 분리된 경우(예: 통화 녹음에서 각 참가자가 별도 채널) 유용합니다. 혼합된 모노 파일에서 화자 분리보다 더 정확한 화자 구분이 가능합니다.

웹훅을 활용한 비동기 결과 수신

결과를 폴링하는 방식은 소량일 때는 괜찮지만, 긴 파일이나 대량 처리 파이프라인에서는 확장에 한계가 있습니다. 웹훅은 결과를 직접 받아볼 수 있게 해줍니다.

긴 파일이나 대량 전사 파이프라인에서는 동기 응답을 기다리는 것이 비효율적일 수 있습니다. 웹훅을 사용하면 전사 요청을 제출하고, 처리 완료 시 결과를 엔드포인트로 받아볼 수 있습니다.

웹훅 설정하기ElevenLabs 대시보드에서 개발자 > 웹훅을 클릭하고 웹훅 생성

  • 을 선택한 뒤, 다음을 설정하세요:이름
  • : 웹훅을 설명하고 기억하기 쉬운 이름을 입력하세요.콜백 URL
  • : 웹훅에 공개적으로 접근 가능한 HTTPS 엔드포인트를 추가하세요.웹훅 인증 방식
  • : HMAC 또는 OAuth 중 하나를 선택하세요(보안을 위해 권장).이벤트:

옵션에서 전사 완료를 선택하세요.

웹훅 전송으로 전사 요청 제출하기

from dotenv import load_dotenv
from elevenlabs.client import ElevenLabs

load_dotenv()

elevenlabs = ElevenLabs(
    api_key=os.getenv("ELEVENLABS_API_KEY"),
)

def transcribe_with_webhook(audio_file):
    try:
        result = elevenlabs.speech_to_text.convert(
            file=audio_file,
            model_id="scribe_v2",
            webhook=True,
        )
        print(f"Transcription started: {result.request_id}")
        return result
    except Exception as e:
        print(f"Error starting transcription: {e}")
        raise e

webhook=True로 설정하면, 요청이 전사 결과 없이 바로 반환됩니다. 전사 완료 시 결과가 POST 요청으로 엔드포인트에 전달됩니다.

웹훅 엔드포인트 구현하기

import { ElevenLabsClient } from '@elevenlabs/elevenlabs-js';
import 'dotenv/config';
import express from 'express';

const elevenlabs = new ElevenLabsClient();
const app = express();
app.use(express.json());

const WEBHOOK_SECRET = process.env.WEBHOOK_SECRET;

app.post('/webhook/speech-to-text', (req, res) => {
  try {
    const signature = req.headers['elevenlabs-signature'];
    const payload = JSON.stringify(req.body);
    let event;

    try {
      // Verify the webhook signature.
      event = await elevenlabs.webhooks.constructEvent(payload, signature, WEBHOOK_SECRET);
    } catch (error) {
      return res.status(401).json({ error: 'Invalid signature' });
    }

    if (event.type === 'speech_to_text.completed') {
      const { requestId, status, text, language_code } = event.data;

      console.log(`Transcription ${requestId} completed`);
      console.log(`Language: ${language_code}`);
      console.log(`Text: ${text}`);

      processTranscription(requestId, text, language_code);
    } else if (status === 'failed') {
      console.error(`Transcription ${requestId} failed`);
      handleTranscriptionError(requestId);
    }

    res.status(200).json({ received: true });
  } catch (error) {
    console.error('Webhook error:', error);
    res.status(500).json({ error: 'Internal server error' });
  }
});

app.listen(3000, () => {
  console.log('Webhook server listening on port 3000');
});

웹훅 페이로드 구조

엔드포인트는 다음과 같은 형태의 POST를 받습니다:

{
  "type": "speech_to_text_transcription",
  "data": {
    "request_id": "some-request-id-123",
    "webhook_metadata": {},
    "transcription": {
      "language_code": "en",
      "language_probability": 0.98,
      "text": "Hello world!",
      "words": [
        {
          "text": "Hello",
          "start": 0.0,
          "end": 0.5,
          "type": "word",
          "speaker_id": "speaker_1"
        }
      ]
    }
  }
}

웹훅 보안 모범 사례

웹훅을 사용할 때는 이벤트가 올바르게 전달되고 처리되도록 몇 가지 보안 조치를 취해야 합니다.

  • 웹훅 서명 검증: 항상 elevenlabs.webhooks.constructEvent()로 웹훅 서명을 검증해 ElevenLabs에서 온 요청인지 확인하세요.
  • HTTPS 엔드포인트 사용: 웹훅 URL은 데이터 변조 방지를 위해 반드시 HTTPS를 사용해야 합니다.
  • 적절한 HTTP 상태 코드 반환: 처리 성공 시 200~299, 클라이언트 오류(재시도 없음)는 400~499, 서버 오류(재시도됨)는 500~599를 반환하세요.
  • 로컬 개발 시 터널링 툴 사용: 로컬 개발 환경에서는 ngrok 등 터널링 툴로 로컬 서버를 공개 HTTPS URL로 노출하세요.

이 전략을 활용하면 웹훅을 더욱 안전하게 사용할 수 있습니다.

음성 인식 API 연동 핵심 요약

실제 서비스용 음성 인식 API 연동은 몇 가지 주요 결정에 달려 있습니다.

이 부분만 잘 선택하면 나머지는 자연스럽게 따라옵니다:

  • 사용 사례에 따라 모드 선택: 오디오가 처리 전에 완성되어 있으면 배치(scribe_v2), 오디오가 생성되는 즉시 전사가 필요하면 실시간(scribe_v2_realtime)을 사용하세요. 예를 들어 에이전트, 음성 비서, 라이브 자막 등에 적합합니다.
  • 특정 용어 정확도 향상을 위해 키텀 사용: 제품명, 기술 용어, 특이한 고유명사는 키텀으로 전달하세요. 모델이 맥락을 활용해 과도하게 적용하지 않고 정확히 반영합니다.
  • 긴 파일은 API에 맡기세요: 8분이 넘는 파일은 자동으로 병렬 처리되므로 직접 분할할 필요가 없습니다. 표준 모드에서 최대 10시간, 3GB까지 지원합니다.
  • 비동기 파이프라인에는 웹훅 사용: 장시간 작업이나 대량 처리에는 webhook=True로 요청을 제출하고 바로 다음 작업을 진행하세요. 모든 웹훅 페이로드의 서명을 반드시 검증하세요.
  • 깔끔한 결과를 원하면 노-버베이팀 모드 활성화: 자막, 요약, NLP 후처리 등에서는 no_verbatim=True로 군더더기 단어와 머뭇거림을 자동으로 제거할 수 있습니다.
  • 분리된 오디오 트랙에는 멀티채널 모드 사용: 녹음에 화자별 채널이 있는 경우(콜센터 녹음, 인터뷰 등), 멀티채널 전사가 혼합 파일에서의 화자 분리보다 더 정확한 화자 구분을 제공합니다. 단, 이 모드는 최대 1시간까지 지원됩니다.

더 많은 정보가 필요하다면 전체 API 레퍼런스를 참고하세요.

ElevenAPI로 음성 인식 연동 시작하기

이 가이드를 모두 읽었다면, 실제 서비스용 음성 인식 API 연동에 필요한 모든 패턴을 익힌 것입니다. 배치와 실시간 전사, 키텀 프롬프트, 비동기 전송 등 고급 기능까지 포함해 STT 연동 앱을 바로 출시할 수 있습니다.

더 자세한 내용은 음성 인식 API를 확인하거나 회원가입ElevenAPI로 첫 호출을 시작해보세요.

STT API 연동 관련 자주 묻는 질문

최고 품질의 AI 오디오로 창작하세요