import WebSocket from 'ws';
const model = process.env.TOKENLAB_REALTIME_MODEL;
const apiKey = process.env.TOKENLAB_API_KEY;
if (!model || !apiKey) {
throw new Error('Set TOKENLAB_REALTIME_MODEL and TOKENLAB_API_KEY');
}
const url = new URL('wss://api.tokenlab.sh/v1/realtime');
url.searchParams.set('model', model);
const socket = new WebSocket(url, {
headers: { Authorization: `Bearer ${apiKey}` }
});
socket.on('open', () => {
console.log('Realtime connection open');
});
socket.on('message', (data) => {
console.log('realtime event', data.toString());
});
socket.on('error', (error) => console.error(error.message));
socket.on('close', (code) => console.log('Realtime connection closed', code));
curl "https://api.tokenlab.sh/v1/realtime" \
-H "Authorization: Bearer sk-your-api-key"
{
"object": "realtime.endpoint",
"websocket_url": "/v1/realtime?model={model}",
"protocol": "tokenlab_realtime_proxy"
}
Audio & temps réel
Realtime WebSocket
Connectez des sessions vocales et multimodales en temps réel via WebSocket
GET
/
v1
/
realtime
import WebSocket from 'ws';
const model = process.env.TOKENLAB_REALTIME_MODEL;
const apiKey = process.env.TOKENLAB_API_KEY;
if (!model || !apiKey) {
throw new Error('Set TOKENLAB_REALTIME_MODEL and TOKENLAB_API_KEY');
}
const url = new URL('wss://api.tokenlab.sh/v1/realtime');
url.searchParams.set('model', model);
const socket = new WebSocket(url, {
headers: { Authorization: `Bearer ${apiKey}` }
});
socket.on('open', () => {
console.log('Realtime connection open');
});
socket.on('message', (data) => {
console.log('realtime event', data.toString());
});
socket.on('error', (error) => console.error(error.message));
socket.on('close', (code) => console.log('Realtime connection closed', code));
curl "https://api.tokenlab.sh/v1/realtime" \
-H "Authorization: Bearer sk-your-api-key"
{
"object": "realtime.endpoint",
"websocket_url": "/v1/realtime?model={model}",
"protocol": "tokenlab_realtime_proxy"
}
Aperçu
Utilisez ce point de terminaison pour les sessions en temps réel telles que la reconnaissance vocale en streaming, la synthèse vocale, la traduction vocale ou les modèles multimodaux en temps réel. Une requêteGET standard renvoie les métadonnées du point de terminaison, tandis qu’une requête de mise à niveau WebSocket ouvre une session en temps réel pour le modèle sélectionné.
Surface prise en charge
TokenLab expose un endpoint WebSocket temps réel surGET /v1/realtime pour les contrôles de métadonnées et les upgrades WebSocket. Considérez-le comme un WebSocket subset : il relaie les événements des modèles realtime pris en charge et ne prend pas en charge les surfaces d’aide REST OpenAI Realtime comme la création de session, client_secrets, les API de contrôle d’appel Calls ou les legacy beta session APIs.
Pour les apps navigateur ou mobile, conservez les clés API longue durée côté serveur. Cet endpoint n’émet pas de Realtime client secrets de courte durée.
Choisissez un modèle temps réel actuel dans
/v1/models, vérifiez /v1/models/{model}, puis définissez TOKENLAB_REALTIME_MODEL. Les événements et la configuration de session dépendent du modèle. L’exemple JSON ci-dessous est une réponse HTTP GET classique, pas un événement de session WebSocket.Connexion
string
requis
ID du modèle temps réel. Utilisez un modèle dont les détails indiquent la prise en charge realtime.
string
requis
Clé API Bearer. Les clients WebSocket doivent envoyer
Authorization: Bearer sk-your-api-key pendant la requête d’upgrade.import WebSocket from 'ws';
const model = process.env.TOKENLAB_REALTIME_MODEL;
const apiKey = process.env.TOKENLAB_API_KEY;
if (!model || !apiKey) {
throw new Error('Set TOKENLAB_REALTIME_MODEL and TOKENLAB_API_KEY');
}
const url = new URL('wss://api.tokenlab.sh/v1/realtime');
url.searchParams.set('model', model);
const socket = new WebSocket(url, {
headers: { Authorization: `Bearer ${apiKey}` }
});
socket.on('open', () => {
console.log('Realtime connection open');
});
socket.on('message', (data) => {
console.log('realtime event', data.toString());
});
socket.on('error', (error) => console.error(error.message));
socket.on('close', (code) => console.log('Realtime connection closed', code));
curl "https://api.tokenlab.sh/v1/realtime" \
-H "Authorization: Bearer sk-your-api-key"
Messages
TokenLab relaie les messages WebSocket entre votre client et le modèle en temps réel sélectionné. Utilisez le format d’événement décrit dans la documentation de ce modèle et incluezmodel dans la chaîne de requête plutôt que dans chaque événement.
Facturation et fermeture
Les sessions sont facturées sur le solde de votre clé API : TokenLab réserve une estimation au début, puis règle l’utilisation réelle à la fin et rembourse la différence. Fermez le socket client lorsque la session est terminée. Si le service ferme la session en premier, TokenLab transmet, dans la mesure du possible, un événement/code de fermeture sécurisé à votre client.Exemple de réponse
{
"object": "realtime.endpoint",
"websocket_url": "/v1/realtime?model={model}",
"protocol": "tokenlab_realtime_proxy"
}
Champs importants
string
Type d’objet de la réponse HTTP GET classique. Sa valeur est toujours
realtime.endpoint.string
Chemin relatif de connexion WebSocket renvoyé par un HTTP GET classique :
/v1/realtime?model={model}. Remplacez {model} par l’identifiant du modèle choisi.string
Identifiant du protocole renvoyé par un HTTP GET classique. Sa valeur est toujours
tokenlab_realtime_proxy.string
Type d’événement ou de message retourné par l’API.
string
Identifiant opaque reçu via la connexion realtime. Incluez-le dans les logs de support pour le diagnostic ; ce n’est pas une URL de session REST.
Autorisations
API Key authentication. Create or manage API keys in Dashboard > API > API Keys.
Paramètres de requête
Realtime model ID to route the WebSocket session. Required for WebSocket upgrade requests; optional for plain HTTP metadata checks.
Réponse
WebSocket connection established