88API88API
User GuideAI ApplicationsAPI ReferenceHelp & Support
Realtime

API thời gian thực OpenAI

?? Tổng quan

Giới thiệu

API thời gian thực OpenAI cung cấp hai phương thức kết nối:

  1. WebRTC - Để tương tác âm thanh/video theo thời gian thực trên trình duyệt và ứng dụng khách trên thiết bị di động

  2. WebSocket - Để tích hợp ứng dụng server-to-server

Trường hợp sử dụng

  • Cuộc trò chuyện bằng giọng nói thời gian thực
  • Hội nghị âm thanh/video
  • Dịch thuật thời gian thực
  • Phiên âm lời nói
  • Tạo mã thời gian thực
  • Tích hợp thời gian thực phía máy chủ

Các tính năng chính

  • Truyền phát âm thanh hai chiều
  • Cuộc hội thoại văn bản và âm thanh hỗn hợp
  • Hỗ trợ gọi hàm
  • Tự động phát hiện hoạt động giọng nói (VAD)
  • Khả năng phiên âm âm thanh
  • Tích hợp phía máy chủ WebSocket

?? Xác thực & Bảo mật

Phương thức xác thực

  1. Khóa API tiêu chuẩn (chỉ phía máy chủ)
  2. Mã thông báo tạm thời (sử dụng phía khách hàng)

Mã thông báo tạm thời

  • Hiệu lực: 1 phút
  • Giới hạn sử dụng: Kết nối đơn
  • Thế hệ: Được tạo thông qua API phía máy chủ
POST https://88api.ai/v1/realtime/sessions
Content-Type: application/json
Authorization: Bearer $NEW_API_KEY

{
  "model": "gpt-4o-realtime-preview-2024-12-17",
  "voice": "verse"
}

Khuyến nghị bảo mật

  • Không bao giờ để lộ các khóa API tiêu chuẩn ở phía máy khách
  • Sử dụng HTTPS/WSS để liên lạc
  • Triển khai các biện pháp kiểm soát truy cập thích hợp
  • Theo dõi hoạt động bất thường

?? Thiết lập kết nối

Kết nối WebRTC

-Địa chỉ: https://88api.ai/v1/realtime

  • Tham số truy vấn: model
  • Tiêu đề:
  • Authorization: Bearer EPHEMERAL_KEY
  • Content-Type: application/sdp

Kết nối WebSocket

-Địa chỉ: wss://88api.ai/v1/realtime

  • Tham số truy vấn: model
  • Tiêu đề:
  • Authorization: Bearer YOUR_API_KEY
  • OpenAI-Beta: realtime=v1

Luồng kết nối

sequenceDiagram
    participant Client
    participant Server
    participant OpenAI

    alt WebRTC Connection
        Client->>Server: Request ephemeral token
        Server->>OpenAI: Create session
        OpenAI-->>Server: Return ephemeral token
        Server-->>Client: Return ephemeral token

        Client->>OpenAI: Create WebRTC offer
        OpenAI-->>Client: Return answer

        Note over Client,OpenAI: Establish WebRTC connection

        Client->>OpenAI: Create data channel
        OpenAI-->>Client: Confirm data channel
    else WebSocket Connection
        Server->>OpenAI: Establish WebSocket connection
        OpenAI-->>Server: Confirm connection

        Note over Server,OpenAI: Begin real-time conversation
    end

Kênh dữ liệu

  • Tên: oai-events
  • Mục đích: Truyền sự kiện
  • Định dạng: JSON

Luồng âm thanh

  • Đầu vào: addTrack()
  • Đầu ra: ontrack sự kiện

?? Tương tác hội thoại

Chế độ hội thoại

  1. Cuộc trò chuyện chỉ có văn bản
  2. Cuộc trò chuyện bằng giọng nói
  3. Cuộc trò chuyện hỗn hợp

Quản lý phiên

  • Tạo phiên
  • Phiên cập nhật
  • Kết thúc phiên
  • Cấu hình phiên

Loại sự kiện

  • Sự kiện văn bản
  • Sự kiện âm thanh
  • Lời gọi hàm
  • Cập nhật trạng thái
  • Sự kiện lỗi

?? Tùy chọn cấu hình

Cấu hình âm thanh

  • Định dạng đầu vào
  • pcm16
  • g711_ulaw
  • g711_alaw
  • Định dạng đầu ra
  • pcm16
  • g711_ulaw
  • g711_alaw
  • Các loại giọng nói
  • alloy
  • echo
  • shimmer

Cấu hình mô hình

  • Nhiệt độ
  • Chiều dài đầu ra tối đa
  • Hệ thống nhắc nhở
  • Cấu hình công cụ

Cấu hình VAD

  • Ngưỡng
  • Thời gian im lặng
  • Đệm tiền tố

?? Yêu cầu ví dụ

Kết nối WebRTC?

Triển khai ứng dụng khách (Trình duyệt)

async function init() {
  // Get ephemeral key from server - see server code below
  const tokenResponse = await fetch('/session');
  const data = await tokenResponse.json();
  const EPHEMERAL_KEY = data.client_secret.value;

  // Create peer connection
  const pc = new RTCPeerConnection();

  // Set up remote audio from model playback
  const audioEl = document.createElement('audio');
  audioEl.autoplay = true;
  pc.ontrack = (e) => (audioEl.srcObject = e.streams[0]);

  // Add local audio track from browser microphone input
  const ms = await navigator.mediaDevices.getUserMedia({
    audio: true,
  });
  pc.addTrack(ms.getTracks()[0]);

  // Set up data channel for sending and receiving events
  const dc = pc.createDataChannel('oai-events');
  dc.addEventListener('message', (e) => {
    // Receive real-time server events here!
    console.log(e);
  });

  // Start session using Session Description Protocol (SDP)
  const offer = await pc.createOffer();
  await pc.setLocalDescription(offer);

  const baseUrl = 'https://88api.ai/v1/realtime';
  const model = 'gpt-4o-realtime-preview-2024-12-17';
  const sdpResponse = await fetch(`${baseUrl}?model=${model}`, {
    method: 'POST',
    body: offer.sdp,
    headers: {
      Authorization: `Bearer ${EPHEMERAL_KEY}`,
      'Content-Type': 'application/sdp',
    },
  });

  const answer = {
    type: 'answer',
    sdp: await sdpResponse.text(),
  };
  await pc.setRemoteDescription(answer);
}

init();

Triển khai máy chủ (Node.js)

import express from 'express';

const app = express();

// Create an endpoint for generating ephemeral tokens
// This endpoint works with the client code above
app.get('/session', async (req, res) => {
  const r = await fetch(
    'https://88api.ai/v1/realtime/sessions',
    {
      method: 'POST',
      headers: {
        Authorization: `Bearer ${process.env.NEW_API_KEY}`,
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({
        model: 'gpt-4o-realtime-preview-2024-12-17',
        voice: 'verse',
      }),
    }
  );
  const data = await r.json();

  // Send the JSON received from OpenAI REST API back to client
  res.send(data);
});

app.listen(3000);

Ví dụ về gửi/nhận sự kiện WebRTC

// Create data channel from peer connection
const dc = pc.createDataChannel('oai-events');

// Listen for server events on data channel
// Event data needs to be parsed from JSON string
dc.addEventListener('message', (e) => {
  const realtimeEvent = JSON.parse(e.data);
  console.log(realtimeEvent);
});

// Send client event: serialize valid client events to
// JSON and send via data channel
const responseCreate = {
  type: 'response.create',
  response: {
    modalities: ['text'],
    instructions: 'Write a haiku about code',
  },
};
dc.send(JSON.stringify(responseCreate));

Kết nối WebSocket?

Node.js (mô-đun ws)

import WebSocket from 'ws';

const url =
  'wss://88api.ai/v1/realtime?model=gpt-4o-realtime-preview-2024-12-17';
const ws = new WebSocket(url, {
  headers: {
    Authorization: 'Bearer ' + process.env.NEW_API_KEY,
    'OpenAI-Beta': 'realtime=v1',
  },
});

ws.on('open', function open() {
  console.log('Connected to server.');
});

ws.on('message', function incoming(message) {
  console.log(JSON.parse(message.toString()));
});

Python (websocket-client)

# Requires websocket-client library:
# pip install websocket-client

import os
import json
import websocket

NEW_API_KEY = os.environ.get("NEW_API_KEY")

url = "wss://88api.ai/v1/realtime?model=gpt-4o-realtime-preview-2024-12-17"
headers = [
    "Authorization: Bearer " + NEW_API_KEY,
    "OpenAI-Beta: realtime=v1"
]

def on_open(ws):
    print("Connected to server.");

def on_message(ws, message):
    data = json.loads(message)
    print("Received event:", json.dumps(data, indent=2))

ws = websocket.WebSocketApp(
    url,
    header=headers,
    on_open=on_open,
    on_message=on_message,
)

ws.run_forever()

Trình duyệt (WebSocket tiêu chuẩn)

/*
Note: In browser and other client environments, we recommend using WebRTC.
But in Deno and Cloudflare Workers and other browser-like environments,
you can also use the standard WebSocket interface.
*/

const ws = new WebSocket(
  'wss://88api.ai/v1/realtime?model=gpt-4o-realtime-preview-2024-12-17',
  [
    'realtime',
    // Authentication
    'openai-insecure-api-key.' + NEW_API_KEY,
    // Optional
    'openai-organization.' + OPENAI_ORG_ID,
    'openai-project.' + OPENAI_PROJECT_ID,
    // Beta protocol, required
    'openai-beta.realtime-v1',
  ]
);

ws.on('open', function open() {
  console.log('Connected to server.');
});

ws.on('message', function incoming(message) {
  console.log(message.data);
});

Ví dụ gửi/nhận tin nhắn

Node.js/Trình duyệt
// Receive server events
ws.on('message', function incoming(message) {
  // Need to parse message data from JSON
  const serverEvent = JSON.parse(message.data);
  console.log(serverEvent);
});

// Send events, create JSON data structure conforming to client event format
const event = {
  type: 'response.create',
  response: {
    modalities: ['audio', 'text'],
    instructions: 'Give me a haiku about code.',
  },
};
ws.send(JSON.stringify(event));
Python
# Send client events, serialize dictionary to JSON
def on_open(ws):
    print("Connected to server.");

    event = {
        "type": "response.create",
        "response": {
            "modalities": ["text"],
            "instructions": "Please assist the user."
        }
    }
    ws.send(json.dumps(event))

# Receive messages need to parse message payload from JSON
def on_message(ws, message):
    data = json.loads(message)
    print("Received event:", json.dumps(data, indent=2))

?? Xử lý lỗi

Các lỗi thường gặp

  1. Lỗi kết nối
  • Sự cố mạng
  • Lỗi xác thực
  • Lỗi cấu hình
  1. Lỗi âm thanh
  • Quyền thiết bị
  • Các định dạng không được hỗ trợ
  • Vấn đề về mã hóa
  1. Lỗi phiên
  • Mã thông báo hết hạn
  • Thời gian chờ của phiên
  • Giới hạn đồng thời

Khôi phục lỗi

  1. Tự động kết nối lại
  2. Khôi phục phiên
  3. Lỗi thử lại
  4. Suy thoái duyên dáng

?? Tham khảo sự kiện

Tiêu đề yêu cầu chung

Tất cả sự kiện cần bao gồm các tiêu đề yêu cầu sau:

Tiêu đềLoạiMô tảGiá trị mẫu
Ủy quyềnChuỗiMã thông báo xác thựcNgười mang $NEW_API_KEY
OpenAI-BetaChuỗiPhiên bản APIthời gian thực=v1

Sự kiện khách hàng

session.update

Cập nhật cấu hình mặc định cho phiên.

Tham sốLoạiBắt buộcMô tảGiá trị mẫu/Giá trị tùy chọn
sự kiện_idChuỗiKhôngMã định danh sự kiện do khách hàng tạosự kiện_123
ChuỗiKhôngLoại sự kiệnphiên.update
phương thứcMảng chuỗiKhôngCác loại phương thức mà mô hình có thể phản hồi với["văn bản", "âm thanh"]
hướng dẫnChuỗiKhôngHướng dẫn hệ thống được thêm vào trước các cuộc gọi mô hình"Mức kiến ​​thức của bạn là 2023-10..."
giọng nóiChuỗiKhôngLoại giọng nói được người mẫu sử dụnghợp kim, tiếng vang, ánh sáng lung linh
đầu vào_audio_formatChuỗiKhôngĐịnh dạng âm thanh đầu vàopcm16, g711_ulaw, g711_alaw
đầu ra_audio_formatChuỗiKhôngĐịnh dạng âm thanh đầu rapcm16, g711_ulaw, g711_alaw
input_audio_transcription.modelChuỗiKhôngMô hình được sử dụng để phiên mãthì thầm-1
Turn_Detection.typeChuỗiKhôngLoại phát hiện giọng nóimáy chủ_vad
Turn_Detection.thresholdSốKhôngNgưỡng kích hoạt VAD (0,0-1,0)0,8
Turn_Detection.prefix_padding_msSố nguyênKhôngThời lượng âm thanh được bao gồm trước khi bắt đầu bài phát biểu500
Turn_Detection.silence_duration_msSố nguyênKhôngKhoảng thời gian im lặng để phát hiện điểm dừng giọng nói1000
công cụMảngKhôngDanh sách các công cụ có sẵn cho mô hình[]
tool_choiceChuỗiKhôngCách người mẫu chọn công cụtự động/không có/bắt buộc
nhiệt độSốKhôngNhiệt độ lấy mẫu mô hình0,8
max_output_tokensChuỗi/Số nguyênKhôngMã thông báo tối đa cho mỗi phản hồi"inf"/4096

input_audio_buffer.append

Nối dữ liệu âm thanh vào bộ đệm âm thanh đầu vào.

Tham sốLoạiBắt buộcMô tảGiá trị mẫu
sự kiện_idChuỗiKhôngMã định danh sự kiện do khách hàng tạosự kiện_456
ChuỗiKhôngLoại sự kiệninput_audio_buffer.append
âm thanhChuỗiKhôngDữ liệu âm thanh được mã hóa Base64Base64EncodedAudioData

input_audio_buffer.commit

Cam kết dữ liệu âm thanh trong bộ đệm dưới dạng tin nhắn của người dùng.

Tham sốLoạiBắt buộcMô tảGiá trị mẫu
sự kiện_idChuỗiKhôngMã định danh sự kiện do khách hàng tạosự kiện_789
ChuỗiKhôngLoại sự kiệninput_audio_buffer.commit

input_audio_buffer.clear

Xóa tất cả dữ liệu âm thanh khỏi bộ đệm âm thanh đầu vào.

Tham sốLoạiBắt buộcMô tảGiá trị mẫu
sự kiện_idChuỗiKhôngMã định danh sự kiện do khách hàng tạosự kiện_012
ChuỗiKhôngLoại sự kiệninput_audio_buffer.clear

hội thoại.item.create

Thêm một mục hội thoại mới vào cuộc trò chuyện.

Tham sốLoạiBắt buộcMô tảGiá trị mẫu
sự kiện_idChuỗiKhôngMã định danh sự kiện do khách hàng tạosự kiện_345
ChuỗiKhôngLoại sự kiệncuộc trò chuyện.item.create
trước_item_idChuỗiKhôngMục mới sẽ được chèn sau ID nàyvô giá trị
item.idChuỗiKhôngMã định danh duy nhất cho mục hội thoạitin nhắn_001
item.typeChuỗiKhôngLoại mục hội thoạitin nhắn/function_call/function_call_output
mục.statusChuỗiKhôngTrạng thái của mục hội thoạiđã hoàn thành/in_progress/chưa hoàn thành
mục.roleChuỗiKhôngVai trò của người gửi tin nhắnngười dùng/trợ lý/hệ thống
item.contentMảngKhôngNội dung tin nhắn[text/audio/transcript]
item.call_idChuỗiKhôngID của lệnh gọi hàmgọi_001
mục.nameChuỗiKhôngTên hàm được gọitên_hàm
item.argumentsChuỗiKhôngĐối số cho lệnh gọi hàm{"param": "value"}
item.outputChuỗiKhôngKết quả đầu ra của lệnh gọi hàm{"result": "value"}

hội thoại.item.truncate

Cắt bớt nội dung âm thanh trong tin nhắn trợ lý.

Tham sốLoạiBắt buộcMô tảGiá trị mẫu
sự kiện_idChuỗiKhôngMã định danh sự kiện do khách hàng tạosự kiện_678
ChuỗiKhôngLoại sự kiệncuộc trò chuyện.item.truncate
item_idChuỗiKhôngID của mục tin nhắn trợ lý cần cắt bớttin nhắn_002
nội dung_indexSố nguyênKhôngMục lục phần nội dung cần cắt bớt0
âm thanh_end_msSố nguyênKhôngĐiểm kết thúc việc cắt âm thanh1500

hội thoại.item.delete

Xóa mục hội thoại đã chỉ định khỏi lịch sử hội thoại.

Tham sốLoạiBắt buộcMô tảGiá trị mẫu
sự kiện_idChuỗiKhôngMã định danh sự kiện do khách hàng tạosự kiện_901
ChuỗiKhôngLoại sự kiệncuộc trò chuyện.item.delete
item_idChuỗiKhôngID của mục hội thoại cần xóatin nhắn_003

phản hồi.create

Tạo phản ứng kích hoạt.

Tham sốLoạiBắt buộcMô tảGiá trị mẫu
sự kiện_idChuỗiKhôngMã định danh sự kiện do khách hàng tạosự kiện_234
ChuỗiKhôngLoại sự kiệnphản hồi.create
phản hồi.modalitiesMảng chuỗiKhôngCác loại phương thức phản hồi["văn bản", "âm thanh"]
phản hồi.hướng dẫnChuỗiKhôngHướng dẫn làm mô hình"Xin hãy hỗ trợ người dùng."
phản hồi.voiceChuỗiKhôngLoại giọng nói được người mẫu sử dụnghợp kim/tiếng vang/ánh sáng lung linh
phản hồi.output_audio_formatChuỗiKhôngĐịnh dạng âm thanh đầu rapcm16
phản hồi.toolsMảngKhôngDanh sách các công cụ có sẵn cho mô hình["loại", "tên", "mô tả"]
phản hồi.tool_choiceChuỗiKhôngCách người mẫu chọn công cụtự động
phản ứng.nhiệt độSốKhôngNhiệt độ lấy mẫu0,7
phản hồi.max_output_tokensSố nguyên/ChuỗiKhôngMã thông báo đầu ra tối đa150/"thông tin"

phản hồi.hủy

Hủy việc tạo phản hồi đang diễn ra.

Tham sốLoạiBắt buộcMô tảGiá trị mẫu
sự kiện_idChuỗiKhôngMã định danh sự kiện do khách hàng tạosự kiện_567
ChuỗiKhôngLoại sự kiệnphản hồi.hủy

Sự kiện máy chủ

lỗi

Sự kiện được trả về khi xảy ra lỗi.

Tham sốLoạiBắt buộcMô tảGiá trị mẫu
sự kiện_idMảng chuỗiKhôngMã định danh duy nhất cho sự kiện máy chủ["sự kiện_890"]
ChuỗiKhôngLoại sự kiệnlỗi
lỗi.typeChuỗiKhôngLoại lỗikhông hợp lệ_request_error/server_error
lỗi.codeChuỗiKhôngMã lỗisự kiện_không hợp lệ
lỗi.tin nhắnChuỗiKhôngThông báo lỗi con người có thể đọc được"Trường 'loại' bị thiếu."
lỗi.paramChuỗiKhôngThông số liên quan đến lỗivô giá trị
lỗi.event_idChuỗiKhôngID của sự kiện liên quansự kiện_567

cuộc hội thoại.item.input_audio_transcription.completed

Được trả về khi tính năng sao chép âm thanh đầu vào được bật và quá trình sao chép thành công.

Tham sốLoạiBắt buộcMô tảGiá trị mẫu
sự kiện_idChuỗiKhôngMã định danh duy nhất cho sự kiện máy chủsự kiện_2122
ChuỗiKhôngLoại sự kiệnđàm thoại.item.input_audio_transcription.completed
item_idChuỗiKhôngID của mục tin nhắn của người dùngtin nhắn_003
nội dung_indexSố nguyênKhôngMục lục phần nội dung chứa âm thanh0
bảng điểmChuỗiKhôngNội dung văn bản được phiên âm"Xin chào bạn khoẻ không?"

cuộc hội thoại.item.input_audio_transcription.failed

Được trả về khi phiên âm âm thanh đầu vào được định cấu hình nhưng yêu cầu phiên âm cho tin nhắn của người dùng không thành công.

Tham sốLoạiBắt buộcMô tảGiá trị mẫu
sự kiện_idChuỗiKhôngMã định danh duy nhất cho sự kiện máy chủsự kiện_2324
Mảng chuỗiKhôngLoại sự kiện["conversation.item.input_audio_transcription.failed"]
item_idChuỗiKhôngID của mục tin nhắn của người dùngtin nhắn_003
nội dung_indexSố nguyênKhôngMục lục phần nội dung chứa âm thanh0
lỗi.typeChuỗiKhôngLoại lỗiphiên âm_error
lỗi.codeChuỗiKhôngMã lỗiaudio_unintelligible
lỗi.tin nhắnChuỗiKhôngThông báo lỗi con người có thể đọc được"Âm thanh không thể được phiên âm."
lỗi.paramChuỗiKhôngThông số liên quan đến lỗivô giá trị

cuộc hội thoại.item.truncated

Trả về khi khách hàng cắt bớt mục tin nhắn âm thanh trợ lý trước đó.

Tham sốLoạiBắt buộcMô tảGiá trị mẫu
sự kiện_idChuỗiKhôngMã định danh duy nhất cho sự kiện máy chủsự kiện_2526
ChuỗiKhôngLoại sự kiệncuộc trò chuyện.item.truncated
item_idChuỗiKhôngID của mục tin nhắn trợ lý bị cắt ngắntin nhắn_004
nội dung_indexSố nguyênKhôngMục lục phần nội dung bị cắt bớt0
âm thanh_end_msSố nguyênKhôngThời điểm âm thanh bị cắt ngắn (mili giây)1500

cuộc trò chuyện.item.đã xóa

Trả về khi một mục trong cuộc trò chuyện bị xóa.

Tham sốLoạiBắt buộcMô tảGiá trị mẫu
sự kiện_idChuỗiKhôngMã định danh duy nhất cho sự kiện máy chủsự kiện_2728
ChuỗiKhôngLoại sự kiệncuộc trò chuyện.item.deleted
item_idChuỗiKhôngID của mục hội thoại đã xóatin nhắn_005

input_audio_buffer.combbed

Được trả về khi dữ liệu bộ đệm âm thanh được cam kết.

Tham sốLoạiBắt buộcMô tảGiá trị mẫu
sự kiện_idChuỗiKhôngMã định danh duy nhất cho sự kiện máy chủsự kiện_1121
ChuỗiKhôngLoại sự kiệninput_audio_buffer.commit
trước_item_idChuỗiKhôngMục hội thoại mới sẽ được chèn sau ID nàytin nhắn_001
item_idChuỗiKhôngID của mục tin nhắn người dùng sẽ được tạotin nhắn_002

input_audio_buffer.cleared

Trả về khi máy khách xóa bộ đệm âm thanh đầu vào.

Tham sốLoạiBắt buộcMô tảGiá trị mẫu
sự kiện_idChuỗiKhôngMã định danh duy nhất cho sự kiện máy chủsự kiện_1314
ChuỗiKhôngLoại sự kiệninput_audio_buffer.cleared

input_audio_buffer.speech_started

Trong chế độ phát hiện giọng nói của máy chủ, được trả về khi phát hiện thấy đầu vào bằng giọng nói.

Tham sốLoạiBắt buộcMô tảGiá trị mẫu
sự kiện_idChuỗiKhôngMã định danh duy nhất cho sự kiện máy chủsự kiện_1516
ChuỗiKhôngLoại sự kiệninput_audio_buffer.speech_started
âm thanh_start_msSố nguyênKhôngMột phần nghìn giây từ khi bắt đầu phiên đến khi phát hiện giọng nói1000
item_idChuỗiKhôngID của mục tin nhắn người dùng sẽ được tạo khi giọng nói dừngtin nhắn_003

input_audio_buffer.speech_stopped

Ở chế độ phát hiện giọng nói của máy chủ, được trả về khi ngừng nhập giọng nói.

Tham sốLoạiBắt buộcMô tảGiá trị mẫu
sự kiện_idChuỗiKhôngMã định danh duy nhất cho sự kiện máy chủsự kiện_1718
ChuỗiKhôngLoại sự kiệninput_audio_buffer.speech_stopped
âm thanh_start_msSố nguyênKhôngMột phần nghìn giây từ khi bắt đầu phiên đến khi phát hiện dừng giọng nói2000
item_idChuỗiKhôngID của mục tin nhắn người dùng sẽ được tạotin nhắn_003

phản hồi.được tạo

Trả về khi một phản hồi mới được tạo.

Tham sốLoạiBắt buộcMô tảGiá trị mẫu
sự kiện_idChuỗiKhôngMã định danh duy nhất cho sự kiện máy chủsự kiện_2930
ChuỗiKhôngLoại sự kiệnphản hồi.created
phản hồi.idChuỗiKhôngMã định danh duy nhất cho phản hồiphản hồi_001
phản hồi.objectChuỗiKhôngLoại đối tượngthời gian thực.response
phản hồi.statusChuỗiKhôngTrạng thái phản hồiin_progress
phản hồi.status_detailsĐối tượngKhôngChi tiết bổ sung về trạng tháivô giá trị
phản hồi.outputMảng chuỗiKhôngDanh sách các mục đầu ra được tạo bởi phản hồi["[]"]
phản hồi.sử dụngĐối tượngKhôngThống kê sử dụng để phản hồivô giá trị

phản hồi.xong

Được trả về khi quá trình truyền phản hồi hoàn tất.

Tham sốLoạiBắt buộcMô tảGiá trị mẫu
sự kiện_idChuỗiKhôngMã định danh duy nhất cho sự kiện máy chủsự kiện_3132
ChuỗiKhôngLoại sự kiệnphản hồi.done
phản hồi.idChuỗiKhôngMã định danh duy nhất cho phản hồiphản hồi_001
phản hồi.objectChuỗiKhôngLoại đối tượngthời gian thực.response
phản hồi.statusChuỗiKhôngTrạng thái phản hồi cuối cùngđã hoàn thành/hủy/thất bại/chưa hoàn thành
phản hồi.status_detailsĐối tượngKhôngChi tiết bổ sung về trạng tháivô giá trị
phản hồi.outputMảng chuỗiKhôngDanh sách các mục đầu ra được tạo bởi phản hồi["[...]"]
phản hồi.usage.total_tokensSố nguyênKhôngTổng số token50
phản hồi.usage.input_tokensSố nguyênKhôngMã thông báo đầu vào20
phản hồi.usage.output_tokensSố nguyênKhôngMã thông báo đầu ra30

phản hồi.output_item.thêm

Được trả về khi một mục đầu ra mới được tạo trong quá trình tạo phản hồi.

Tham sốLoạiBắt buộcMô tảGiá trị mẫu
sự kiện_idChuỗiKhôngMã định danh duy nhất cho sự kiện máy chủsự kiện_3334
ChuỗiKhôngLoại sự kiệnphản hồi.output_item.thêm
phản hồi_idChuỗiKhôngID của phản hồi mà mục đầu ra thuộc vềphản hồi_001
đầu ra_indexChuỗiKhôngChỉ mục mục đầu ra phản hồi0
item.idChuỗiKhôngMã định danh duy nhất cho mục đầu ratin nhắn_007
item.objectChuỗiKhôngLoại đối tượngthời gian thực.item
item.typeChuỗiKhôngLoại hạng mục đầu ratin nhắn/function_call/function_call_output
mục.statusChuỗiKhôngTrạng thái của mục đầu rain_progress/đã hoàn thành
mục.roleChuỗiKhôngVai trò liên quan đến mục đầu ratrợ lý
item.contentMảngKhôngNội dung mục đầu ra["loại", "văn bản", "âm thanh", "bản ghi"]

phản hồi.output_item.done

Được trả về khi quá trình truyền mục đầu ra hoàn tất.

Tham sốLoạiBắt buộcMô tảGiá trị mẫu
sự kiện_idChuỗiKhôngMã định danh duy nhất cho sự kiện máy chủsự kiện_3536
ChuỗiKhôngLoại sự kiệnphản hồi.output_item.done
phản hồi_idChuỗiKhôngID của phản hồi mà mục đầu ra thuộc vềphản hồi_001
đầu ra_indexChuỗiKhôngChỉ mục mục đầu ra phản hồi0
item.idChuỗiKhôngMã định danh duy nhất cho mục đầu ratin nhắn_007
item.objectChuỗiKhôngLoại đối tượngthời gian thực.item
item.typeChuỗiKhôngLoại hạng mục đầu ratin nhắn/function_call/function_call_output
mục.statusChuỗiKhôngTrạng thái cuối cùng của mục đầu rađã hoàn thành/chưa hoàn thành
mục.roleChuỗiKhôngVai trò liên quan đến mục đầu ratrợ lý
item.contentMảngKhôngNội dung mục đầu ra["loại", "văn bản", "âm thanh", "bản ghi"]

phản hồi.content_part.thêm

Được trả về khi một phần nội dung mới được thêm vào mục tin nhắn trợ lý trong quá trình tạo phản hồi.

Tham sốLoạiBắt buộcMô tảGiá trị mẫu
sự kiện_idChuỗiKhôngMã định danh duy nhất cho sự kiện máy chủsự kiện_3738
ChuỗiKhôngLoại sự kiệnphản hồi.content_part.add
phản hồi_idChuỗiKhôngID phản hồiphản hồi_001
item_idChuỗiKhôngID của mục tin cần thêm phần nội dung vàotin nhắn_007
đầu ra_indexSố nguyênKhôngChỉ mục mục đầu ra phản hồi0
nội dung_indexSố nguyênKhôngChỉ mục phần nội dung trong mảng nội dung mục tin nhắn0
phần.typeChuỗiKhôngLoại nội dungvăn bản/âm thanh
phần.textChuỗiKhôngNội dung văn bản"Xin chào"
phần.audioChuỗiKhôngDữ liệu âm thanh được mã hóa Base64"base64_encoded_audio_data"
phần.transcriptChuỗiKhôngVăn bản được phiên âm của âm thanh"Xin chào"

phản hồi.content_part.done

Được trả về khi phần nội dung trong quá trình phát trực tuyến mục tin nhắn trợ lý hoàn tất.

Tham sốLoạiBắt buộcMô tảGiá trị mẫu
sự kiện_idChuỗiKhôngMã định danh duy nhất cho sự kiện máy chủsự kiện_3940
ChuỗiKhôngLoại sự kiệnphản hồi.content_part.done
phản hồi_idChuỗiKhôngID phản hồiphản hồi_001
item_idChuỗiKhôngID của mục tin cần thêm phần nội dung vàotin nhắn_007
đầu ra_indexSố nguyênKhôngChỉ mục mục đầu ra phản hồi0
nội dung_indexSố nguyênKhôngChỉ mục phần nội dung trong mảng nội dung mục tin nhắn0
phần.typeChuỗiKhôngLoại nội dungvăn bản/âm thanh
phần.textChuỗiKhôngNội dung văn bản"Xin chào"
phần.audioChuỗiKhôngDữ liệu âm thanh được mã hóa Base64"base64_encoded_audio_data"
phần.transcriptChuỗiKhôngVăn bản được phiên âm của âm thanh"Xin chào"

phản hồi.text.delta

Được trả về khi giá trị văn bản của phần nội dung loại "văn bản" được cập nhật.

Tham sốLoạiBắt buộcMô tảGiá trị mẫu
sự kiện_idChuỗiKhôngMã định danh duy nhất cho sự kiện máy chủsự kiện_4142
ChuỗiKhôngLoại sự kiệnphản hồi.text.delta
phản hồi_idChuỗiKhôngID phản hồiphản hồi_001
item_idChuỗiKhôngID của mục tin nhắntin nhắn_007
đầu ra_indexSố nguyênKhôngChỉ mục mục đầu ra phản hồi0
nội dung_indexSố nguyênKhôngChỉ mục phần nội dung trong mảng nội dung mục tin nhắn0
đồng bằngChuỗiKhôngNội dung cập nhật văn bản delta"Chắc chắn rồi, tôi có thể h"

phản hồi.text.done

Được trả về khi quá trình truyền phát văn bản phần nội dung loại "văn bản" hoàn tất.

Tham sốLoạiBắt buộcMô tảGiá trị mẫu
sự kiện_idChuỗiKhôngMã định danh duy nhất cho sự kiện máy chủsự kiện_4344
ChuỗiKhôngLoại sự kiệnphản hồi.text.done
phản hồi_idChuỗiKhôngID phản hồiphản hồi_001
item_idChuỗiKhôngID của mục tin nhắntin nhắn_007
đầu ra_indexSố nguyênKhôngChỉ mục mục đầu ra phản hồi0
nội dung_indexSố nguyênKhôngChỉ mục phần nội dung trong mảng nội dung mục tin nhắn0
đồng bằngChuỗiKhôngNội dung văn bản hoàn chỉnh cuối cùng"Chắc chắn rồi, tôi có thể giúp việc đó."

phản hồi.audio_transcript.delta

Trả về khi cập nhật nội dung phiên âm của đầu ra âm thanh do mô hình tạo.

Tham sốLoạiBắt buộcMô tảGiá trị mẫu
sự kiện_idChuỗiKhôngMã định danh duy nhất cho sự kiện máy chủsự kiện_4546
ChuỗiKhôngLoại sự kiệnphản hồi.audio_transcript.delta
phản hồi_idChuỗiKhôngID phản hồiphản hồi_001
item_idChuỗiKhôngID của mục tin nhắntin nhắn_008
đầu ra_indexSố nguyênKhôngChỉ mục mục đầu ra phản hồi0
nội dung_indexSố nguyênKhôngChỉ mục phần nội dung trong mảng nội dung mục tin nhắn0
đồng bằngChuỗiKhôngNội dung cập nhật delta văn bản phiên âm"Xin chào, làm sao tôi có thể"

phản hồi.audio_transcript.done

Được trả về khi quá trình sao chép quá trình truyền phát âm thanh do mô hình tạo hoàn tất.

Tham sốLoạiBắt buộcMô tảGiá trị mẫu
sự kiện_idChuỗiKhôngMã định danh duy nhất cho sự kiện máy chủsự kiện_4748
ChuỗiKhôngLoại sự kiệnphản hồi.audio_transcript.done
phản hồi_idChuỗiKhôngID phản hồiphản hồi_001
item_idChuỗiKhôngID của mục tin nhắntin nhắn_008
đầu ra_indexSố nguyênKhôngChỉ mục mục đầu ra phản hồi0
nội dung_indexSố nguyênKhôngChỉ mục phần nội dung trong mảng nội dung mục tin nhắn0
bảng điểmChuỗiKhôngVăn bản ghi âm hoàn chỉnh cuối cùng"Xin chào, hôm nay tôi có thể giúp gì cho bạn?"

phản hồi.audio.delta

Trả về khi cập nhật nội dung âm thanh do mô hình tạo.

Tham sốLoạiBắt buộcMô tảGiá trị mẫu
sự kiện_idChuỗiKhôngMã định danh duy nhất cho sự kiện máy chủsự kiện_4950
ChuỗiKhôngLoại sự kiệnphản hồi.audio.delta
phản hồi_idChuỗiKhôngID phản hồiphản hồi_001
item_idChuỗiKhôngID của mục tin nhắntin nhắn_008
đầu ra_indexSố nguyênKhôngChỉ mục mục đầu ra phản hồi0
nội dung_indexSố nguyênKhôngChỉ mục phần nội dung trong mảng nội dung mục tin nhắn0
đồng bằngChuỗiKhôngDelta dữ liệu âm thanh được mã hóa Base64"Base64EncodedAudioDelta"

phản hồi.audio.done

Được trả về khi âm thanh do mô hình tạo hoàn tất.

Tham sốLoạiBắt buộcMô tảGiá trị mẫu
sự kiện_idChuỗiKhôngMã định danh duy nhất cho sự kiện máy chủsự kiện_5152
ChuỗiKhôngLoại sự kiệnphản hồi.audio.done
phản hồi_idChuỗiKhôngID phản hồiphản hồi_001
item_idChuỗiKhôngID của mục tin nhắntin nhắn_008
đầu ra_indexSố nguyênKhôngChỉ mục mục đầu ra phản hồi0
nội dung_indexSố nguyênKhôngChỉ mục phần nội dung trong mảng nội dung mục tin nhắn0

Gọi hàm

phản hồi.function_call_arguments.delta

Trả về khi cập nhật các đối số lệnh gọi hàm do mô hình tạo.

Tham sốLoạiBắt buộcMô tảGiá trị mẫu
sự kiện_idChuỗiKhôngMã định danh duy nhất cho sự kiện máy chủsự kiện_5354
ChuỗiKhôngLoại sự kiệnphản hồi.function_call_arguments.delta
phản hồi_idChuỗiKhôngID phản hồiphản hồi_002
item_idChuỗiKhôngID của mục tin nhắnfc_001
đầu ra_indexSố nguyênKhôngChỉ mục mục đầu ra phản hồi0
gọi_idChuỗiKhôngID của lệnh gọi hàmgọi_001
đồng bằngChuỗiKhôngĐối số gọi hàm định dạng JSON delta{"location": "San"}

reply.function_call_arguments.done

Được trả về khi quá trình truyền đối số lệnh gọi hàm do mô hình tạo hoàn tất.

Tham sốLoạiBắt buộcMô tảGiá trị mẫu
sự kiện_idChuỗiKhôngMã định danh duy nhất cho sự kiện máy chủsự kiện_5556
ChuỗiKhôngLoại sự kiệnphản hồi.function_call_arguments.done
phản hồi_idChuỗiKhôngID phản hồiphản hồi_002
item_idChuỗiKhôngID của mục tin nhắnfc_001
đầu ra_indexSố nguyênKhôngChỉ mục mục đầu ra phản hồi0
gọi_idChuỗiKhôngID của lệnh gọi hàmgọi_001
lập luậnChuỗiKhôngĐối số lệnh gọi hàm hoàn chỉnh cuối cùng (định dạng JSON){"vị trí": "San Francisco"}

Cập nhật trạng thái khác

rate_limits.updated

Được kích hoạt sau mỗi sự kiện "response.done" để cho biết giới hạn tốc độ được cập nhật.

Tham sốLoạiBắt buộcMô tảGiá trị mẫu
sự kiện_idChuỗiKhôngMã định danh duy nhất cho sự kiện máy chủsự kiện_5758
ChuỗiKhôngLoại sự kiệnrate_limits.updated
tỷ lệ_limitsMảng đối tượngKhôngDanh sách thông tin giới hạn tỷ lệ[{"name": "requests_per_min", "limit": 60, "remaining": 45, "reset_seconds": 35}]

cuộc trò chuyện đã được tạo

Trả về khi cuộc trò chuyện được tạo.

Tham sốLoạiBắt buộcMô tảGiá trị mẫu
sự kiện_idChuỗiKhôngMã định danh duy nhất cho sự kiện máy chủsự kiện_9101
ChuỗiKhôngLoại sự kiệncuộc trò chuyện.created
cuộc trò chuyệnĐối tượngKhôngĐối tượng tài nguyên hội thoại{"id": "conv_001", "object": "realtime.conversation"}

cuộc hội thoại.item.created

Được trả về khi mục hội thoại được tạo.

Tham sốLoạiBắt buộcMô tảGiá trị mẫu
sự kiện_idChuỗiKhôngMã định danh duy nhất cho sự kiện máy chủsự kiện_1920
ChuỗiKhôngLoại sự kiệncuộc trò chuyện.item.created
trước_item_idChuỗiKhôngID của mục hội thoại trước đótin nhắn_002
mụcĐối tượngKhôngĐối tượng mục hội thoại{"id": "msg_003", "object": "realtime.item", "type": "message", "status": "completed", "role": "user", "content": [{"type": "text", "text": "Hello"}]}

session.created

Trả về khi phiên được tạo.

Tham sốLoạiBắt buộcMô tảGiá trị mẫu
sự kiện_idChuỗiKhôngMã định danh duy nhất cho sự kiện máy chủsự kiện_1234
ChuỗiKhôngLoại sự kiệnphiên.created
phiênĐối tượngKhôngĐối tượng phiên{"id": "sess_001", "object": "realtime.session", "model": "gpt-4", "modalities": ["text", "audio"]}

phiên.đã cập nhật

Trả về khi phiên được cập nhật.

Tham sốLoạiBắt buộcMô tảGiá trị mẫu
sự kiện_idChuỗiKhôngMã định danh duy nhất cho sự kiện máy chủsự kiện_5678
ChuỗiKhôngLoại sự kiệnphiên.updated
phiênĐối tượngKhôngĐối tượng phiên cập nhật{"id": "sess_001", "object": "realtime.session", "model": "gpt-4", "modalities": ["text", "audio"]}

Bảng tham số sự kiện giới hạn tỷ lệ

Tham sốLoạiBắt buộcMô tảGiá trị mẫu
tênChuỗiTên giới hạnyêu cầu_per_min
giới hạnSố nguyênGiá trị giới hạn60
còn lạiSố nguyênSố tiền còn lại45
reset_secondsSố nguyênĐặt lại thời gian (giây)35

Bảng tham số lệnh gọi hàm

Tham sốLoạiBắt buộcMô tảGiá trị mẫu
ChuỗiLoại chức năngchức năng
tênChuỗiTên chức năngget_weather
mô tảChuỗiKhôngMô tả chức năngNhận thời tiết hiện tại
thông sốĐối tượngĐịnh nghĩa tham số hàm{"type": "object", "properties": {...}}

Bảng thông số định dạng âm thanh

Tham sốLoạiMô tảGiá trị tùy chọn
mẫu_rateSố nguyênTỷ lệ mẫu8000, 16000, 24000, 44100, 48000
kênhSố nguyênSố lượng kênh1 (đơn âm), 2 (âm thanh nổi)
bit_per_sampleSố nguyênBit trên mỗi mẫu16 (pcm16), 8 (g711)
mã hóaChuỗiPhương pháp mã hóapcm16, g711_ulaw, g711_alaw

Bảng thông số phát hiện giọng nói

Tham sốLoạiMô tảGiá trị mặc địnhPhạm vi
ngưỡngPhaoNgưỡng kích hoạt VAD0,50,0-1,0
tiền tố_padding_msSố nguyênPhần đệm tiền tố giọng nói (mili giây)5000-5000
im lặng_duration_msSố nguyênThời lượng phát hiện im lặng (mili giây)1000100-10000

Bảng thông số lựa chọn dao

Tham sốLoạiMô tảGiá trị tùy chọn
tool_choiceChuỗiPhương pháp lựa chọn công cụtự động, không có, bắt buộc
công cụMảngDanh sách công cụ có sẵn[{type, name, description, parameters}]

Bảng thông số cấu hình model

Tham sốLoạiMô tảPhạm vi/Giá trị tùy chọnGiá trị mặc định
nhiệt độPhaoNhiệt độ lấy mẫu0,0-2,01.0
max_output_tokensSố nguyên/ChuỗiĐộ dài đầu ra tối đa1-4096/"thông tin""thông tin"
phương thứcMảng chuỗiPhương thức phản hồi["văn bản", "âm thanh"]["văn bản"]
giọng nóiChuỗiLoại giọng nóihợp kim, tiếng vang, ánh sáng lung linhhợp kim

Bảng thông số chung của sự kiện

Tham sốLoạiBắt buộcMô tảGiá trị mẫu
sự kiện_idChuỗiMã định danh duy nhất cho sự kiệnsự kiện_123
ChuỗiLoại sự kiệnphiên.update
dấu thời gianSố nguyênKhôngDấu thời gian sự kiện (mili giây)1677649363000

Bảng thông số trạng thái phiên

Tham sốLoạiMô tảGiá trị tùy chọn
trạng tháiChuỗiTrạng thái phiênđang hoạt động, đã kết thúc, lỗi
lỗiĐối tượngThông tin lỗi{"type": "error_type", "message": "error message"}
siêu dữ liệuĐối tượngSiêu dữ liệu phiên{"client_id": "web", "session_type": "chat"}

Bảng tham số trạng thái mục hội thoại

Tham sốLoạiMô tảGiá trị tùy chọn
trạng tháiChuỗiTrạng thái mục hội thoạiđã hoàn thành, đang_tiến hành, chưa hoàn thành
vai tròChuỗiVai trò người gửingười dùng, trợ lý, hệ thống
ChuỗiLoại mục hội thoạitin nhắn, function_call, function_call_output

Bảng tham số loại nội dung

Tham sốLoạiMô tảGiá trị tùy chọn
ChuỗiLoại nội dungvăn bản, âm thanh, bản ghi
định dạngChuỗiĐịnh dạng nội dungđơn giản, đánh dấu, html
mã hóaChuỗiPhương pháp mã hóautf-8, base64

Bảng tham số trạng thái phản hồi

Tham sốLoạiMô tảGiá trị tùy chọn
trạng tháiChuỗiTrạng thái phản hồiđã hoàn thành, bị hủy bỏ, thất bại, chưa hoàn thành
trạng thái_chi tiếtĐối tượngChi tiết trạng thái{"reason": "user_cancelled"}
sử dụngĐối tượngThống kê sử dụng{"total_tokens": 50, "input_tokens": 20, "output_tokens": 30}

Bảng thông số phiên âm âm thanh

Tham sốLoạiMô tảGiá trị mẫu
đã bậtBooleanLiệu phiên âm có được bật hay khôngđúng
người mẫuChuỗiMô hình phiên mãthì thầm-1
ngôn ngữChuỗiNgôn ngữ phiên âmvi, zh, ô tô
nhắcChuỗiLời nhắc phiên âm"Bản ghi cuộc trò chuyện"

Bảng thông số luồng âm thanh

Tham sốLoạiMô tảGiá trị tùy chọn
chunk_sizeSố nguyênKích thước đoạn âm thanh (byte)1024, 2048, 4096
độ trễChuỗiChế độ trễthấp, cân bằng, cao
nénChuỗiPhương pháp nénkhông có, opus, mp3

Bảng tham số cấu hình WebRTC

Tham sốLoạiMô tảGiá trị mặc định
máy chủ băngMảngDanh sách máy chủ ICE[{"urls": "stun:stun.l.google.com:19302"}]
audio_constraintĐối tượngHạn chế về âm thanh{"echoCancellation": true}
kết nối_timeoutSố nguyênHết thời gian kết nối (mili giây)30000

Mục lục

?? Tổng quan
Giới thiệu
Trường hợp sử dụng
Các tính năng chính
?? Xác thực & Bảo mật
Phương thức xác thực
Mã thông báo tạm thời
Khuyến nghị bảo mật
?? Thiết lập kết nối
Kết nối WebRTC
Kết nối WebSocket
Luồng kết nối
Kênh dữ liệu
Luồng âm thanh
?? Tương tác hội thoại
Chế độ hội thoại
Quản lý phiên
Loại sự kiện
?? Tùy chọn cấu hình
Cấu hình âm thanh
Cấu hình mô hình
Cấu hình VAD
?? Yêu cầu ví dụ
Kết nối WebRTC?
Triển khai ứng dụng khách (Trình duyệt)
Triển khai máy chủ (Node.js)
Ví dụ về gửi/nhận sự kiện WebRTC
Kết nối WebSocket?
Node.js (mô-đun ws)
Python (websocket-client)
Trình duyệt (WebSocket tiêu chuẩn)
Ví dụ gửi/nhận tin nhắn
Node.js/Trình duyệt
Python
?? Xử lý lỗi
Các lỗi thường gặp
Khôi phục lỗi
?? Tham khảo sự kiện
Tiêu đề yêu cầu chung
Sự kiện khách hàng
session.update
input_audio_buffer.append
input_audio_buffer.commit
input_audio_buffer.clear
hội thoại.item.create
hội thoại.item.truncate
hội thoại.item.delete
phản hồi.create
phản hồi.hủy
Sự kiện máy chủ
lỗi
cuộc hội thoại.item.input_audio_transcription.completed
cuộc hội thoại.item.input_audio_transcription.failed
cuộc hội thoại.item.truncated
cuộc trò chuyện.item.đã xóa
input_audio_buffer.combbed
input_audio_buffer.cleared
input_audio_buffer.speech_started
input_audio_buffer.speech_stopped
phản hồi.được tạo
phản hồi.xong
phản hồi.output_item.thêm
phản hồi.output_item.done
phản hồi.content_part.thêm
phản hồi.content_part.done
phản hồi.text.delta
phản hồi.text.done
phản hồi.audio_transcript.delta
phản hồi.audio_transcript.done
phản hồi.audio.delta
phản hồi.audio.done
Gọi hàm
phản hồi.function_call_arguments.delta
reply.function_call_arguments.done
Cập nhật trạng thái khác
rate_limits.updated
cuộc trò chuyện đã được tạo
cuộc hội thoại.item.created
session.created
phiên.đã cập nhật
Bảng tham số sự kiện giới hạn tỷ lệ
Bảng tham số lệnh gọi hàm
Bảng thông số định dạng âm thanh
Bảng thông số phát hiện giọng nói
Bảng thông số lựa chọn dao
Bảng thông số cấu hình model
Bảng thông số chung của sự kiện
Bảng thông số trạng thái phiên
Bảng tham số trạng thái mục hội thoại
Bảng tham số loại nội dung
Bảng tham số trạng thái phản hồi
Bảng thông số phiên âm âm thanh
Bảng thông số luồng âm thanh
Bảng tham số cấu hình WebRTC