AGTCloud API Docs
GuidesRéférence APIIntégrations et ressourcesMises à jour et aide
Interaction en temps réel

Interaction en temps réel

Traitez le texte, l’audio et les appels de fonctions en temps réel via Realtime WebSocket.

OpenAI Realtime utilise une connexion persistante et des événements bidirectionnels pour traiter le texte, l’audio et les appels de fonctions en temps réel. Le client envoie des événements de session, de tampon audio, d’éléments de conversation et de contrôle des réponses ; le serveur renvoie continuellement l’état de session, les transcriptions, le texte, l’audio, les arguments de fonction et les erreurs.

Cette page utilise principalement WebSocket. Lors de la connexion, remplacez MODEL_ID par l’ID d’un modèle visible pour le compte actuel et compatible avec Realtime.

Les usages courants comprennent les conversations vocales en temps réel, la transcription de réunions et les assistants vocaux, la traduction en temps réel, la transcription vocale, les interactions de code en temps réel et les intégrations serveur en temps réel. Une connexion peut transporter du texte et de l’audio, et gérer la VAD, les appels de fonctions et les mises à jour d’état par événements.

WSS
wss://api.agtcloud.cn/v1/realtime?model=MODEL_ID

Authentification et connexion

Authentification WebSocket

Les applications serveur établissent une connexion WSS avec une clé API Bearer et transmettent le Header Realtime Beta dans la requête de handshake.

ÉlémentValeur
Adresse de connexionwss://api.agtcloud.cn/v1/realtime?model=MODEL_ID
AuthorizationBearer your-api-key
OpenAI-Betarealtime=v1

Utilisez les clés API de longue durée uniquement sur des serveurs de confiance ; ne les intégrez pas dans un navigateur, un paquet mobile ou un dépôt public. Toutes les connexions doivent utiliser HTTPS/WSS.

Jetons temporaires

Pour connecter un client, un serveur de confiance peut d’abord créer un jeton temporaire valable une minute et destiné à une seule connexion.

POST https://api.agtcloud.cn/v1/realtime/sessions
Content-Type: application/json
Authorization: Bearer your-api-key

{
  "model": "MODEL_ID",
  "voice": "verse"
}

Déroulement de la connexion

Dans le flux WebSocket principal, le serveur établit directement la connexion avec une clé API ; une fois le handshake réussi, il envoie les événements client et reçoit les événements serveur sur cette même connexion.

Dans le flux WebRTC, le client demande d’abord un jeton temporaire à son propre serveur applicatif, qui appelle l’interface de session pour le créer. Le client génère ensuite une SDP Offer, l’envoie à l’endpoint Realtime et reçoit une SDP Answer, puis échange des événements JSON via le canal de données oai-events.

Exemples de connexion WebSocket

Les exemples suivants présentent Node.js, Python, l’envoi et la réception d’événements. Après connexion, le client envoie des événements JSON et le serveur renvoie continuellement les résultats sous la même forme.

WSSConnexion WebSocket et échange d’événements
import WebSocket from 'ws';

const ws = new WebSocket('wss://api.agtcloud.cn/v1/realtime?model=MODEL_ID', {
  headers: {
    Authorization: 'Bearer your-api-key',
    'OpenAI-Beta': 'realtime=v1',
  },
});

ws.on('open', () => {
  console.log('Connexion au serveur établie.');
});

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

Intégration WebRTC

WebSocket est actuellement recommandé. Avant d’utiliser WebRTC, vérifiez que le modèle cible le prend en charge ; les exemples suivants illustrent la structure de connexion avec jeton temporaire, SDP, pistes audio et canal de données.

Session, audio et conversation

Realtime prend en charge les conversations textuelles, vocales et combinant texte et audio. La configuration de session peut inclure les formats audio d’entrée et de sortie, la voix, la température, la longueur maximale de sortie, les outils et les paramètres VAD.

  • Formats audio d’entrée et de sortie : pcm16, g711_ulaw, g711_alaw.
  • Exemples de voix : alloy, echo, shimmer.
  • La configuration VAD comprend le seuil, le préfixe audio avant la parole et la durée de silence.
  • La conversation progresse via la session, les éléments de conversation, les parties de contenu et les événements de réponse.

Consultez les champs précis dans le navigateur d’événements ci-dessous ; les paramètres et domaines de valeurs partagés sont regroupés dans « Types communs ».

Référence des événements

Sélectionnez un événement pour consulter ses champs et son exemple JSON. Vous pouvez changer de direction, filtrer par catégorie ou rechercher un nom d’événement.

Événements du client · Session

session.update

Met à jour la configuration par défaut de la session.

ChampTypeObligatoireDescriptionExemple
event_idstringNonIdentifiant d’événement généré par le clientevent_123
typestringNonType d’événementsession.update
modalitiesstring[]NonModalités auxquelles le modèle peut répondre["text", "audio"]
instructionsstringNonInstructions système insérées avant l’appel du modèle"Répondez de manière concise et précise."
voicestringNonVoix utilisée par le modèlealloy, echo, shimmer
input_audio_formatstringNonFormat audio d’entréepcm16, g711_ulaw, g711_alaw
output_audio_formatstringNonFormat audio de sortiepcm16, g711_ulaw, g711_alaw
input_audio_transcription.modelstringNonModèle utilisé pour la transcriptionwhisper-1
turn_detection.typestringNonType de détection vocaleserver_vad
turn_detection.thresholdnumberNonSeuil d’activation de la VAD (0.0–1.0)0.8
turn_detection.prefix_padding_msintegerNonDurée audio incluse avant le début de la parole500
turn_detection.silence_duration_msintegerNonDurée de silence utilisée pour détecter la fin de la parole1000
toolsarrayNonListe des outils disponibles pour le modèle[]
tool_choicestringNonMode de sélection des outils par le modèleauto/none/required
temperaturenumberNonTempérature d’échantillonnage du modèle0.8
max_output_tokensstring or integerNonNombre maximal de tokens par réponse"inf"/4096
Exemple JSON
{
  "event_id": "event_123",
  "type": "session.update",
  "modalities": [
    "text",
    "audio"
  ],
  "instructions": "Répondez de manière concise et précise.",
  "voice": "alloy, echo, shimmer",
  "input_audio_format": "pcm16, g711_ulaw, g711_alaw",
  "output_audio_format": "pcm16, g711_ulaw, g711_alaw",
  "input_audio_transcription": {
    "model": "whisper-1"
  },
  "turn_detection": {
    "type": "server_vad",
    "threshold": 0.8,
    "prefix_padding_ms": 500,
    "silence_duration_ms": 1000
  },
  "tools": [],
  "tool_choice": "auto",
  "temperature": 0.8,
  "max_output_tokens": "inf"
}

Types communs

Les sections repliables suivantes regroupent les paramètres des limites de débit, appels de fonctions, audio, VAD, outils, modèles, événements, sessions, éléments de conversation, contenu, réponses, transcription, flux audio et WebRTC.

Paramètres des événements de limite de débit4 champs
ChampTypeObligatoireDescriptionValeurs possibles ou exemple
namestringOuiNom de la limiteExemple : requests_per_min
limitintegerOuiValeur de la limiteExemple : 60
remainingintegerOuiQuota disponible restantExemple : 45
reset_secondsintegerOuiDélai de réinitialisation (secondes)Exemple : 35
Paramètres d’appel de fonction4 champs
ChampTypeObligatoireDescriptionValeurs possibles ou exemple
typestringOuiType de fonctionExemple : function
namestringOuiNom de la fonctionExemple : get_weather
descriptionstringNonDescription de la fonctionExemple : Obtenir la météo actuelle
parametersobjectOuiDéfinition des paramètres de la fonctionExemple : {"type": "object", "properties": {...}}
Paramètres du format audio4 champs
ChampTypeObligatoireDescriptionValeurs possibles ou exemple
sample_rateinteger—Fréquence d’échantillonnageValeurs possibles : 8000, 16000, 24000, 44100, 48000
channelsinteger—Nombre de canauxValeurs possibles : 1 (mono), 2 (stéréo)
bits_per_sampleinteger—Profondeur d’échantillonnageValeurs possibles : 16 (pcm16), 8 (g711)
encodingstring—EncodageValeurs possibles : pcm16, g711_ulaw, g711_alaw
Paramètres de détection vocale3 champs
ChampTypeObligatoireDescriptionValeurs possibles ou exemple
thresholdnumber—Seuil d’activation de la VADValeur par défaut : 0.5 ; plage : 0.0–1.0
prefix_padding_msinteger—Préfixe audio avant la parole (millisecondes)Valeur par défaut : 500 ; plage : 0–5000
silence_duration_msinteger—Durée de détection du silence (millisecondes)Valeur par défaut : 1000 ; plage : 100–10000
Paramètres de sélection des outils2 champs
ChampTypeObligatoireDescriptionValeurs possibles ou exemple
tool_choicestring—Mode de sélection des outilsValeurs possibles : auto, none, required
toolsarray—Liste des outils disponiblesValeurs possibles : [{type, name, description, parameters}]
Paramètres de configuration du modèle4 champs
ChampTypeObligatoireDescriptionValeurs possibles ou exemple
temperaturenumber—Température d’échantillonnagePlage/valeurs possibles : 0.0–2.0 ; valeur par défaut : 1.0
max_output_tokensinteger or string—Longueur maximale de sortiePlage/valeurs possibles : 1–4096/"inf" ; valeur par défaut : "inf"
modalitiesstring[]—Modalités de réponsePlage/valeurs possibles : ["text", "audio"] ; valeur par défaut : ["text"]
voicestring—VoixPlage/valeurs possibles : alloy, echo, shimmer ; valeur par défaut : alloy
Paramètres communs des événements3 champs
ChampTypeObligatoireDescriptionValeurs possibles ou exemple
event_idstringOuiIdentifiant unique de l’événementExemple : event_123
typestringOuiType d’événementExemple : session.update
timestampintegerNonHorodatage de l’événement (millisecondes)Exemple : 1677649363000
Paramètres d’état de session3 champs
ChampTypeObligatoireDescriptionValeurs possibles ou exemple
statusstring—État de la sessionValeurs possibles : active, ended, error
errorobject—Informations d’erreurValeurs possibles : {"type": "error_type", "message": "message d’erreur"}
metadataobject—Métadonnées de la sessionValeurs possibles : {"client_id": "web", "session_type": "chat"}
Paramètres d’état des éléments de conversation3 champs
ChampTypeObligatoireDescriptionValeurs possibles ou exemple
statusstring—État de l’élément de conversationValeurs possibles : completed, in_progress, incomplete
rolestring—Rôle de l’expéditeurValeurs possibles : user, assistant, system
typestring—Type d’élément de conversationValeurs possibles : message, function_call, function_call_output
Paramètres de type de contenu3 champs
ChampTypeObligatoireDescriptionValeurs possibles ou exemple
typestring—Type de contenuValeurs possibles : text, audio, transcript
formatstring—Format du contenuValeurs possibles : plain, markdown, html
encodingstring—EncodageValeurs possibles : utf-8, base64
Paramètres d’état de réponse3 champs
ChampTypeObligatoireDescriptionValeurs possibles ou exemple
statusstring—État de la réponseValeurs possibles : completed, cancelled, failed, incomplete
status_detailsobject—Détails de l’étatValeurs possibles : {"reason": "user_cancelled"}
usageobject—Statistiques d’utilisationValeurs possibles : {"total_tokens": 50, "input_tokens": 20, "output_tokens": 30}
Paramètres de transcription audio4 champs
ChampTypeObligatoireDescriptionValeurs possibles ou exemple
enabledboolean—Activation de la transcriptionExemple : true
modelstring—Modèle de transcriptionExemple : whisper-1
languagestring—Langue de transcriptionExemple : en, zh, auto
promptstring—Prompt de transcriptionExemple : "Transcription d’une conversation"
Paramètres du flux audio3 champs
ChampTypeObligatoireDescriptionValeurs possibles ou exemple
chunk_sizeinteger—Taille des blocs audio (octets)Valeurs possibles : 1024, 2048, 4096
latencystring—Mode de latenceValeurs possibles : low, balanced, high
compressionstring—CompressionValeurs possibles : none, opus, mp3
Paramètres de configuration WebRTC3 champs
ChampTypeObligatoireDescriptionValeurs possibles ou exemple
ice_serversarray—Liste des serveurs ICEValeur par défaut : [{"urls": "stun:stun.l.google.com:19302"}]
audio_constraintsobject—Contraintes audioValeur par défaut : {"echoCancellation": true}
connection_timeoutinteger—Délai de connexion (millisecondes)Valeur par défaut : 30000

Gestion des erreurs et reprise

Les erreurs Realtime relèvent généralement de quatre catégories : connexion, authentification, audio ou session.

TypeCauses courantesMesures à prendre
Erreur de connexionCoupure réseau, échec du handshake ou configuration incorrecteVérifiez l’adresse WSS, le réseau et le handshake ; limitez le nombre de reconnexions
Erreur d’authentificationClé API non valide, jeton temporaire expiré ou incompatibilité avec l’adresse APIRenouvelez les identifiants et assurez-vous que la clé API correspond à l’adresse API utilisée
Erreur audioAutorisations de périphérique, format non pris en charge ou codecs incompatiblesVérifiez les autorisations, l’échantillonnage et l’encodage, puis rétablissez le flux audio
Erreur de sessionExpiration, limite de concurrence ou états d’événements incohérentsConservez l’événement d’erreur, recréez la session et, si nécessaire, utilisez une interface non temps réel

La reprise peut comprendre la reconnexion automatique, la restauration de session, des tentatives limitées et un mode dégradé. En cas d’erreur, lisez d’abord l’événement error, conservez event_id, error.type, error.code, error.message et les informations d’événement associées, puis décidez si un renvoi est nécessaire.