Hướng Dẫn Sử Dụng API ElevenLabs

Herve Kom

29 tháng 1 2026

Hướng Dẫn Sử Dụng API ElevenLabs

ElevenLabs chuyển văn bản thành giọng nói tự nhiên và hỗ trợ nhiều loại giọng, ngôn ngữ và phong cách khác nhau. API giúp dễ dàng nhúng giọng nói vào các ứng dụng, tự động hóa quy trình tường thuật hoặc xây dựng các trải nghiệm thời gian thực như trợ lý giọng nói. Nếu bạn có thể gửi một yêu cầu HTTP, bạn có thể tạo âm thanh trong vài giây.

💡
Bạn muốn thử nghiệm ElevenLabs API mà không cần viết mã trước? Tải xuống Apidog để gửi yêu cầu, kiểm tra phản hồi âm thanh và thử nghiệm cài đặt giọng nói một cách trực quan. Apidog cho phép bạn lưu các bộ sưu tập API, chia sẻ chúng với nhóm của mình và tự động tạo mã client—tiết kiệm hàng giờ thiết lập.

nút

ElevenLabs API là gì?

ElevenLabs API cung cấp quyền truy cập theo chương trình vào các mô hình AI tạo, chuyển đổi và phân tích âm thanh. Nền tảng này ban đầu là một dịch vụ chuyển văn bản thành giọng nói nhưng đã mở rộng thành một bộ công cụ AI âm thanh hoàn chỉnh.

Trang web chính thức của ElevenLabs API

Các khả năng cốt lõi:

API hoạt động qua các giao thức HTTPWebSocket tiêu chuẩn. Bạn có thể gọi nó từ bất kỳ ngôn ngữ nào, nhưng các SDK chính thức tồn tại cho PythonJavaScript/TypeScript với tính an toàn kiểu dữ liệu và hỗ trợ streaming được tích hợp sẵn.

Lấy Khóa API ElevenLabs

Trước khi thực hiện bất kỳ lệnh gọi API nào, bạn cần có khóa API. Dưới đây là cách lấy khóa:

Bước 1: Tạo một tài khoản miễn phí. Ngay cả gói miễn phí cũng bao gồm quyền truy cập API với 10.000 ký tự mỗi tháng.

Bước 2: Đăng nhập và điều hướng đến phần Profile + API Key. Bạn có thể tìm thấy phần này bằng cách nhấp vào biểu tượng hồ sơ của mình ở góc dưới bên trái, hoặc bằng cách đi trực tiếp đến cài đặt nhà phát triển.

Bước 3: Nhấp vào Tạo Khóa API. Sao chép khóa và lưu trữ nó một cách an toàn—bạn sẽ không thể xem lại khóa đầy đủ nữa.

Lưu ý bảo mật quan trọng:

Đặt nó làm biến môi trường cho các ví dụ trong hướng dẫn này:

# Linux/macOS
export ELEVENLABS_API_KEY="your_api_key_here"

# Windows (PowerShell)
$env:ELEVENLABS_API_KEY="your_api_key_here"

Tổng quan về các Endpoint của ElevenLabs API

API được tổ chức xung quanh một số nhóm tài nguyên. Dưới đây là các endpoint được sử dụng phổ biến nhất:

EndpointPhương thứcMô tả
/v1/text-to-speech/{voice_id}POSTChuyển đổi văn bản thành âm thanh giọng nói
/v1/text-to-speech/{voice_id}/streamPOSTTruyền phát âm thanh khi nó được tạo
/v1/speech-to-speech/{voice_id}POSTChuyển đổi giọng nói từ giọng này sang giọng khác
/v1/voicesGETLiệt kê tất cả các giọng nói có sẵn
/v1/voices/{voice_id}GETNhận chi tiết cho một giọng nói cụ thể
/v1/modelsGETLiệt kê tất cả các mô hình có sẵn
/v1/userGETNhận thông tin tài khoản người dùng và mức sử dụng
/v1/voice-generation/generate-voicePOSTTạo một giọng nói ngẫu nhiên mới

URL cơ sở: https://api.elevenlabs.io

Xác thực: Tất cả các yêu cầu đều cần tiêu đề xi-api-key:

xi-api-key: your_api_key_here

Chuyển văn bản thành giọng nói với cURL

Cách nhanh nhất để kiểm tra API là bằng lệnh cURL. Ví dụ này sử dụng giọng Rachel (ID: 21m00Tcm4TlvDq8ikWAM), một trong những giọng mặc định có sẵn trên tất cả các gói:

curl -X POST "https://api.elevenlabs.io/v1/text-to-speech/21m00Tcm4TlvDq8ikWAM" \
  -H "xi-api-key: $ELEVENLABS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "text": "Chào mừng bạn đến với ứng dụng của chúng tôi. Âm thanh này được tạo bằng ElevenLabs API.",
    "model_id": "eleven_flash_v2_5",
    "voice_settings": {
      "stability": 0.5,
      "similarity_boost": 0.75,
      "style": 0.0,
      "use_speaker_boost": true
    }
  }' \
  --output speech.mp3

Nếu thành công, bạn sẽ nhận được tệp speech.mp3 với âm thanh đã tạo. Phát nó bằng bất kỳ trình phát media nào.

Phân tích yêu cầu:

Phản hồi trả về dữ liệu âm thanh thô. Định dạng mặc định là MP3, nhưng bạn có thể yêu cầu các định dạng khác bằng cách thêm tham số truy vấn output_format:

# Lấy âm thanh PCM thay vì MP3
curl -X POST "https://api.elevenlabs.io/v1/text-to-speech/21m00Tcm4TlvDq8ikWAM?output_format=pcm_44100" \
  -H "xi-api-key: $ELEVENLABS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"text": "Xin chào thế giới", "model_id": "eleven_flash_v2_5"}' \
  --output speech.pcm

Sử dụng Python SDK

Python SDK chính thức đơn giản hóa việc tích hợp với các gợi ý kiểu, tính năng phát lại âm thanh tích hợp và hỗ trợ streaming.

Cài đặt

pip install elevenlabs

Để phát âm thanh trực tiếp qua loa của bạn, bạn cũng có thể cần mpv hoặc ffmpeg:

# macOS
brew install mpv

# Ubuntu/Debian
sudo apt install mpv

Chuyển văn bản thành giọng nói cơ bản

import os
from elevenlabs.client import ElevenLabs
from elevenlabs import play

client = ElevenLabs(
    api_key=os.getenv("ELEVENLABS_API_KEY")
)

audio = client.text_to_speech.convert(
    text="ElevenLabs API giúp dễ dàng thêm đầu ra giọng nói chân thực vào bất kỳ ứng dụng nào.",
    voice_id="JBFqnCBsd6RMkjVDRZzb",  # Giọng George
    model_id="eleven_multilingual_v2",
    output_format="mp3_44100_128",
)

play(audio)

Lưu âm thanh vào tệp

from elevenlabs.client import ElevenLabs

client = ElevenLabs(api_key="your_api_key")

audio = client.text_to_speech.convert(
    text="Âm thanh này sẽ được lưu vào một tệp.",
    voice_id="21m00Tcm4TlvDq8ikWAM",
    model_id="eleven_flash_v2_5",
)

with open("output.mp3", "wb") as f:
    for chunk in audio:
        f.write(chunk)

print("Đã lưu âm thanh vào output.mp3")

Liệt kê các giọng nói có sẵn

from elevenlabs.client import ElevenLabs

client = ElevenLabs(api_key="your_api_key")

response = client.voices.search()

for voice in response.voices:
    print(f"Tên: {voice.name}, ID: {voice.voice_id}, Danh mục: {voice.category}")

Điều này in ra tất cả các giọng nói có sẵn trong tài khoản của bạn, bao gồm các giọng tạo sẵn, giọng đã sao chép và giọng cộng đồng mà bạn đã thêm.

Hỗ trợ Async

Đối với các ứng dụng sử dụng asyncio, SDK cung cấp AsyncElevenLabs:

import asyncio
from elevenlabs.client import AsyncElevenLabs

client = AsyncElevenLabs(api_key="your_api_key")

async def generate_speech():
    audio = await client.text_to_speech.convert(
        text="Điều này được tạo ra một cách bất đồng bộ.",
        voice_id="21m00Tcm4TlvDq8ikWAM",
        model_id="eleven_flash_v2_5",
    )

    with open("async_output.mp3", "wb") as f:
        async for chunk in audio:
            f.write(chunk)

    print("Đã lưu âm thanh bất đồng bộ.")

asyncio.run(generate_speech())

Sử dụng JavaScript SDK

Node.js SDK chính thức (@elevenlabs/elevenlabs-js) cung cấp hỗ trợ TypeScript đầy đủ và hoạt động trong môi trường Node.js.

Cài đặt

npm install @elevenlabs/elevenlabs-js

Chuyển văn bản thành giọng nói cơ bản

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

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

const audio = await elevenlabs.textToSpeech.convert(
  "21m00Tcm4TlvDq8ikWAM",  // ID giọng Rachel
  {
    text: "Xin chào từ ElevenLabs JavaScript SDK!",
    modelId: "eleven_multilingual_v2",
  }
);

await play(audio);

Lưu vào tệp (Node.js)

import { ElevenLabsClient } from "@elevenlabs/elevenlabs-js";
import { createWriteStream } from "fs";
import { Readable } from "stream";
import { pipeline } from "stream/promises";

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

const audio = await elevenlabs.textToSpeech.convert(
  "21m00Tcm4TlvDq8ikWAM",
  {
    text: "Âm thanh này sẽ được ghi vào một tệp bằng cách sử dụng luồng Node.js.",
    modelId: "eleven_flash_v2_5",
  }
);

const readable = Readable.from(audio);
const writeStream = createWriteStream("output.mp3");
await pipeline(readable, writeStream);

console.log("Đã lưu âm thanh vào output.mp3");

Xử lý lỗi

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

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

try {
  const audio = await elevenlabs.textToSpeech.convert(
    "21m00Tcm4TlvDq8ikWAM",
    {
      text: "Đang kiểm tra xử lý lỗi.",
      modelId: "eleven_flash_v2_5",
    }
  );
  await play(audio);
} catch (error) {
  if (error instanceof ElevenLabsError) {
    console.error(`Lỗi API: ${error.message}, Trạng thái: ${error.statusCode}`);
  } else {
    console.error("Lỗi không mong muốn:", error);
  }
}

SDK thử lại các yêu cầu thất bại tối đa 2 lần theo mặc định, với thời gian chờ 60 giây. Cả hai giá trị này đều có thể cấu hình được.

Truyền phát âm thanh theo thời gian thực

Đối với chatbot, trợ lý giọng nói hoặc bất kỳ ứng dụng nào mà độ trễ là yếu tố quan trọng, truyền phát cho phép bạn bắt đầu phát âm thanh trước khi toàn bộ phản hồi được tạo. Điều này rất quan trọng đối với AI đàm thoại, nơi người dùng mong đợi phản hồi gần như ngay lập tức.

Truyền phát Python

from elevenlabs import stream
from elevenlabs.client import ElevenLabs

client = ElevenLabs(api_key="your_api_key")

audio_stream = client.text_to_speech.stream(
    text="Truyền phát cho phép bạn bắt đầu nghe âm thanh gần như ngay lập tức, mà không cần chờ đợi toàn bộ quá trình tạo hoàn tất.",
    voice_id="JBFqnCBsd6RMkjVDRZzb",
    model_id="eleven_flash_v2_5",
)

# Phát âm thanh đã truyền qua loa trong thời gian thực
stream(audio_stream)

Truyền phát JavaScript

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

const elevenlabs = new ElevenLabsClient();

const audioStream = await elevenlabs.textToSpeech.stream(
  "JBFqnCBsd6RMkjVDRZzb",
  {
    text: "Âm thanh này được truyền phát theo thời gian thực với độ trễ tối thiểu.",
    modelId: "eleven_flash_v2_5",
  }
);

stream(audioStream);

Truyền phát WebSocket

Để có độ trễ thấp nhất, hãy sử dụng kết nối WebSocket. Điều này lý tưởng cho các tác nhân giọng nói thời gian thực, nơi văn bản đến theo từng đoạn (ví dụ: từ một LLM):

import asyncio
import websockets
import json
import base64

async def stream_tts_websocket():
    voice_id = "21m00Tcm4TlvDq8ikWAM"
    model_id = "eleven_flash_v2_5"
    uri = f"wss://api.elevenlabs.io/v1/text-to-speech/{voice_id}/stream-input?model_id={model_id}"

    async with websockets.connect(uri) as ws:
        # Gửi cấu hình ban đầu
        await ws.send(json.dumps({
            "text": " ",
            "voice_settings": {"stability": 0.5, "similarity_boost": 0.75},
            "xi_api_key": "your_api_key",
        }))

        # Gửi các đoạn văn bản khi chúng đến (ví dụ: từ một LLM)
        text_chunks = [
            "Xin chào! ",
            "Đây là truyền phát ",
            "qua WebSockets. ",
            "Mỗi đoạn được gửi riêng biệt."
        ]

        for chunk in text_chunks:
            await ws.send(json.dumps({"text": chunk}))

        # Báo hiệu kết thúc đầu vào
        await ws.send(json.dumps({"text": ""}))

        # Nhận các đoạn âm thanh
        audio_data = b""
        async for message in ws:
            data = json.loads(message)
            if data.get("audio"):
                audio_data += base64.b64decode(data["audio"])
            if data.get("isFinal"):
                break

        with open("websocket_output.mp3", "wb") as f:
            f.write(audio_data)
        print("Đã lưu âm thanh WebSocket.")

asyncio.run(stream_tts_websocket())

Lựa chọn và quản lý giọng nói

ElevenLabs cung cấp hàng trăm giọng nói. Việc chọn đúng giọng rất quan trọng đối với trải nghiệm người dùng của ứng dụng của bạn.

Giọng nói mặc định

Những giọng nói này có sẵn trên tất cả các gói, bao gồm cả gói miễn phí:

Tên giọng nóiID giọng nóiMô tả
Rachel21m00Tcm4TlvDq8ikWAMBình tĩnh, nữ trẻ
Drew29vD33N1CtxCmqQRPOHJNam tròn trịa
Clyde2EiwWnXFnvU5JabPnv8nNhân vật cựu chiến binh
Paul5Q0t7uMcjvnagumLfvZiPhóng viên thực địa
DomiAZnzlk1XvdvUeBnXmlldNữ mạnh mẽ, quyết đoán
DaveCYw3kZ02Hs0563khs1FjNam người Anh đàm thoại
FinD38z5RcWu1voky8WS1jaNam người Ireland
SarahEXAVITQu4vr4xnSDxMaLNữ trẻ, dịu dàng

Tìm ID giọng nói

Sử dụng API để tìm kiếm tất cả các giọng nói có sẵn:

curl -X GET "https://api.elevenlabs.io/v1/voices" \
  -H "xi-api-key: $ELEVENLABS_API_KEY" | python3 -m json.tool

Hoặc lọc theo danh mục (có sẵn, đã sao chép, đã tạo):

from elevenlabs.client import ElevenLabs

client = ElevenLabs(api_key="your_api_key")

# Liệt kê chỉ các giọng nói tạo sẵn
response = client.voices.search(category="premade")

for voice in response.voices:
    print(f"{voice.name}: {voice.voice_id}")

Bạn cũng có thể sao chép trực tiếp ID giọng nói từ trang web ElevenLabs: chọn một giọng nói, nhấp vào menu ba chấm và chọn Sao chép ID giọng nói.

Chọn mô hình phù hợp

ElevenLabs cung cấp nhiều mô hình, mỗi mô hình được tối ưu hóa cho các trường hợp sử dụng khác nhau:

Danh sách các mô hình của ElevenLabs
# Liệt kê tất cả các mô hình có sẵn với chi tiết
from elevenlabs.client import ElevenLabs

client = ElevenLabs(api_key="your_api_key")
models = client.models.list()

for model in models:
    print(f"Mô hình: {model.name}")
    print(f"  ID: {model.model_id}")
    print(f"  Ngôn ngữ: {len(model.languages)}")
    print(f"  Tối đa ký tự: {model.max_characters_request_free_user}")
    print()

Kiểm tra ElevenLabs API với Apidog

Trước khi viết mã tích hợp, việc kiểm tra các endpoint API một cách tương tác sẽ rất hữu ích. Apidog giúp việc này trở nên đơn giản—bạn có thể cấu hình các yêu cầu trực quan, kiểm tra phản hồi (bao gồm cả âm thanh) và tạo mã client sau khi bạn hài lòng.

nút

Bước 1: Thiết lập một dự án mới

Mở Apidog và tạo một dự án mới. Đặt tên là "ElevenLabs API" hoặc thêm các endpoint vào một dự án hiện có.

Bước 2: Cấu hình xác thực

Đi tới Project Settings > Auth và thiết lập một tiêu đề chung:

Điều này tự động đính kèm xác thực vào mọi yêu cầu trong dự án.

Bước 3: Tạo yêu cầu chuyển văn bản thành giọng nói

Tạo một yêu cầu POST mới:

{
  "text": "Đang kiểm tra ElevenLabs API thông qua Apidog. Điều này giúp dễ dàng thử nghiệm với các giọng nói và cài đặt khác nhau.",
  "model_id": "eleven_flash_v2_5",
  "voice_settings": {
    "stability": 0.5,
    "similarity_boost": 0.75
  }
}

Nhấp vào Gửi. Apidog hiển thị các tiêu đề phản hồi và cho phép bạn tải xuống hoặc phát âm thanh trực tiếp.

Bước 4: Thử nghiệm với các tham số

Sử dụng giao diện của Apidog để nhanh chóng thay đổi ID giọng nói, thay đổi mô hình hoặc điều chỉnh cài đặt giọng nói mà không cần chỉnh sửa JSON thô. Lưu các cấu hình khác nhau dưới dạng các endpoint riêng biệt trong bộ sưu tập của bạn để dễ dàng so sánh.

Bước 5: Tạo mã client

Sau khi bạn đã xác nhận yêu cầu hoạt động, nhấp vào Tạo mã trong Apidog để nhận mã client sẵn sàng sử dụng bằng Python, JavaScript, cURL, Go, Java và nhiều ngôn ngữ khác. Điều này loại bỏ việc chuyển đổi thủ công từ tài liệu API sang mã hoạt động.

Hãy thử ngay bây giờ:Tải xuống Apidog miễn phí

Cài đặt giọng nói và tinh chỉnh

Cài đặt giọng nói cho phép bạn điều chỉnh cách giọng nói nghe. Các tham số này được gửi trong đối tượng voice_settings:

Tham sốPhạm viMặc địnhHiệu ứng
stability0.0 - 1.00.5Cao hơn = nhất quán hơn, ít biểu cảm hơn. Thấp hơn = biến đổi hơn, nhiều cảm xúc hơn.
similarity_boost0.0 - 1.00.75Cao hơn = gần với giọng nói gốc hơn. Thấp hơn = biến đổi hơn.
style0.0 - 1.00.0Cao hơn = phong cách phóng đại hơn. Tăng độ trễ. Chỉ dành cho Multilingual v2.
use_speaker_boostbooleantrueTăng cường sự tương đồng với người nói gốc. Tăng độ trễ nhỏ.

Ví dụ thực tế:

from elevenlabs.client import ElevenLabs

client = ElevenLabs(api_key="your_api_key")

# Giọng kể chuyện: nhất quán, ổn định
narration = client.text_to_speech.convert(
    text="Chương một. Đó là một ngày tháng Tư lạnh lẽo và sáng sủa.",
    voice_id="21m00Tcm4TlvDq8ikWAM",
    model_id="eleven_multilingual_v2",
    voice_settings={
        "stability": 0.8,
        "similarity_boost": 0.8,
        "style": 0.2,
        "use_speaker_boost": True,
    },
)

# Giọng đàm thoại: biểu cảm, tự nhiên
conversational = client.text_to_speech.convert(
    text="Ồ, wow, đó thực sự là một ý tưởng tuyệt vời! Để tôi nghĩ xem làm thế nào chúng ta có thể thực hiện nó.",
    voice_id="JBFqnCBsd6RMkjVDRZzb",
    model_id="eleven_multilingual_v2",
    voice_settings={
        "stability": 0.3,
        "similarity_boost": 0.6,
        "style": 0.5,
        "use_speaker_boost": True,
    },
)

Hướng dẫn:

Giá và giới hạn tốc độ của ElevenLabs API

ElevenLabs sử dụng hệ thống định giá dựa trên tín dụng. Dưới đây là bảng phân tích:

Giá của ElevenLabs

Khắc phục sự cố

LỗiNguyên nhânKhắc phục
401 UnauthorizedKhóa API không hợp lệ hoặc thiếuKiểm tra giá trị tiêu đề xi-api-key của bạn
422 Unprocessable EntityNội dung yêu cầu không hợp lệXác minh voice_id tồn tại và văn bản không trống
429 Too Many RequestsVượt quá giới hạn tốc độThêm thời gian chờ lũy thừa (exponential backoff) hoặc nâng cấp gói của bạn
Âm thanh nghe như robotMô hình hoặc cài đặt saiThử Multilingual v2 với độ ổn định ở 0.5
Lỗi phát âmVấn đề chuẩn hóa văn bảnViết đầy đủ các số/từ viết tắt, hoặc sử dụng định dạng giống SSML

Kết luận

ElevenLabs API cung cấp cho các nhà phát triển quyền truy cập vào một số công nghệ tổng hợp giọng nói chân thực nhất hiện nay. Cho dù bạn cần một vài dòng tường thuật hay một quy trình giọng nói thời gian thực đầy đủ, API đều có thể mở rộng từ các lệnh gọi cURL đơn giản đến các luồng WebSocket sản xuất.

Sẵn sàng thêm giọng nói chân thực vào ứng dụng của bạn chưa? Tải xuống Apidog để kiểm tra các endpoint của ElevenLabs API, thử nghiệm với cài đặt giọng nói và tạo mã client—tất cả đều miễn phí, không yêu cầu thẻ tín dụng.

nút

Thực hành thiết kế API trong Apidog

Khám phá cách dễ dàng hơn để xây dựng và sử dụng API