diff --git a/docs/fr/plugins/google-meet.md b/docs/fr/plugins/google-meet.md index a45878d96..fcd65776b 100644 --- a/docs/fr/plugins/google-meet.md +++ b/docs/fr/plugins/google-meet.md @@ -1,14 +1,14 @@ --- read_when: - Vous voulez qu’un agent OpenClaw rejoigne un appel Google Meet - - Vous configurez Chrome, le Node Chrome ou Twilio comme transport Google Meet -summary: 'Plugin Google Meet : rejoindre des URL Meet explicites via Chrome ou Twilio avec les valeurs par défaut de voix en temps réel' + - Vous configurez Chrome, le nœud Chrome ou Twilio comme transport Google Meet +summary: 'Plugin Google Meet : rejoindre des URL Meet explicites via Chrome ou Twilio avec les paramètres vocaux en temps réel par défaut' title: Plugin Google Meet x-i18n: - generated_at: "2026-04-24T08:57:23Z" + generated_at: "2026-04-24T09:51:43Z" model: gpt-5.4 provider: openai - source_hash: 8d430a1f2d6ee7fc1d997ef388a2e0d2915a6475480343e7060edac799dfc027 + source_hash: f1673ac4adc9cf163194a340dd6e451d0e4d28bb62adeb126898298e62106d43 source_path: plugins/google-meet.md workflow: 15 --- @@ -21,24 +21,31 @@ Le Plugin est explicitement conçu ainsi : - Il rejoint uniquement une URL explicite `https://meet.google.com/...`. - La voix `realtime` est le mode par défaut. -- La voix en temps réel peut rappeler l’agent OpenClaw complet lorsque des outils ou un raisonnement plus approfondi sont nécessaires. +- La voix en temps réel peut revenir vers l’agent OpenClaw complet lorsque des + outils ou un raisonnement plus approfondi sont nécessaires. - L’authentification commence comme un OAuth Google personnel ou un profil Chrome déjà connecté. -- Il n’y a aucune annonce automatique de consentement. +- Il n’y a pas d’annonce de consentement automatique. - Le backend audio Chrome par défaut est `BlackHole 2ch`. - Chrome peut s’exécuter localement ou sur un hôte Node appairé. -- Twilio accepte un numéro d’appel entrant avec un code PIN ou une séquence DTMF facultatifs. -- La commande CLI est `googlemeet` ; `meet` est réservé aux flux de téléconférence d’agent plus larges. +- Twilio accepte un numéro d’appel entrant ainsi qu’un code PIN ou une séquence DTMF facultatifs. +- La commande CLI est `googlemeet` ; `meet` est réservé aux workflows plus larges + de téléconférence d’agent. ## Démarrage rapide -Installez les dépendances audio locales et assurez-vous que le fournisseur en temps réel peut utiliser OpenAI : +Installez les dépendances audio locales et configurez un fournisseur de voix en +temps réel backend. OpenAI est celui par défaut ; Google Gemini Live fonctionne +également avec `realtime.provider: "google"` : ```bash brew install blackhole-2ch sox export OPENAI_API_KEY=sk-... +# or +export GEMINI_API_KEY=... ``` -`blackhole-2ch` installe le périphérique audio virtuel `BlackHole 2ch`. Le programme d’installation de Homebrew nécessite un redémarrage avant que macOS n’expose le périphérique : +`blackhole-2ch` installe le périphérique audio virtuel `BlackHole 2ch`. Le +programme d’installation de Homebrew nécessite un redémarrage avant que macOS expose le périphérique : ```bash sudo reboot @@ -87,17 +94,25 @@ Ou laissez un agent rejoindre la réunion via l’outil `google_meet` : } ``` -Chrome rejoint la réunion en tant que profil Chrome connecté. Dans Meet, choisissez `BlackHole 2ch` pour le chemin microphone/haut-parleur utilisé par OpenClaw. Pour un audio duplex propre, utilisez des périphériques virtuels séparés ou un graphe de type Loopback ; un seul périphérique BlackHole suffit pour un premier test rapide, mais peut produire de l’écho. +Chrome rejoint la réunion avec le profil Chrome connecté. Dans Meet, choisissez `BlackHole 2ch` pour +le chemin microphone/haut-parleur utilisé par OpenClaw. Pour un son duplex propre, utilisez +des périphériques virtuels séparés ou un graphe de type Loopback ; un seul périphérique BlackHole suffit +pour un premier test rapide, mais peut produire de l’écho. ### Gateway local + Chrome Parallels -Vous n’avez **pas** besoin d’un Gateway OpenClaw complet ni d’une clé API de modèle à l’intérieur d’une VM macOS uniquement pour faire de la VM l’hôte de Chrome. Exécutez le Gateway et l’agent localement, puis exécutez un hôte Node dans la VM. Activez une fois le Plugin intégré sur la VM afin que le Node annonce la commande Chrome : +Vous n’avez **pas** besoin d’un Gateway OpenClaw complet ou d’une clé d’API de modèle dans une VM macOS +uniquement pour que la VM héberge Chrome. Exécutez le Gateway et l’agent localement, puis exécutez un +hôte Node dans la VM. Activez une fois le Plugin intégré sur la VM afin que le nœud annonce la commande Chrome : Ce qui s’exécute où : -- Hôte Gateway : Gateway OpenClaw, espace de travail de l’agent, clés de modèle/API, fournisseur en temps réel et configuration du Plugin Google Meet. -- VM macOS Parallels : CLI/hôte Node OpenClaw, Google Chrome, SoX, BlackHole 2ch et un profil Chrome connecté à Google. -- Non requis dans la VM : service Gateway, configuration de l’agent, clé OpenAI/GPT ou configuration du fournisseur de modèle. +- Hôte Gateway : OpenClaw Gateway, espace de travail de l’agent, clés de modèle/API, fournisseur + temps réel et configuration du Plugin Google Meet. +- VM macOS Parallels : CLI/hôte Node OpenClaw, Google Chrome, SoX, BlackHole 2ch, + et un profil Chrome connecté à Google. +- Inutile dans la VM : service Gateway, configuration de l’agent, clé OpenAI/GPT ou configuration du fournisseur + de modèle. Installez les dépendances de la VM : @@ -111,7 +126,7 @@ Redémarrez la VM après l’installation de BlackHole afin que macOS expose `Bl sudo reboot ``` -Après le redémarrage, vérifiez que la VM peut voir le périphérique audio et les commandes SoX : +Après le redémarrage, vérifiez que la VM voit le périphérique audio et les commandes SoX : ```bash system_profiler SPAudioDataType | grep -i BlackHole @@ -130,14 +145,15 @@ Démarrez l’hôte Node dans la VM : openclaw node run --host --port 18789 --display-name parallels-macos ``` -Si `` est une IP LAN et que vous n’utilisez pas TLS, le Node refuse le WebSocket en texte clair sauf si vous l’autorisez explicitement pour ce réseau privé de confiance : +Si `` est une IP LAN et que vous n’utilisez pas TLS, le nœud refuse le +WebSocket en texte clair à moins que vous n’autorisiez explicitement ce réseau privé de confiance : ```bash OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 \ openclaw node run --host --port 18789 --display-name parallels-macos ``` -Utilisez la même variable d’environnement lors de l’installation du Node comme LaunchAgent : +Utilisez la même variable d’environnement lorsque vous installez le nœud comme LaunchAgent : ```bash OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 \ @@ -145,22 +161,24 @@ OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 \ openclaw node restart ``` -`OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1` est un environnement de processus, pas un paramètre `openclaw.json`. `openclaw node install` l’enregistre dans l’environnement du LaunchAgent lorsqu’elle est présente sur la commande d’installation. +`OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1` est un environnement de processus, pas un +paramètre `openclaw.json`. `openclaw node install` l’enregistre dans l’environnement du LaunchAgent +lorsqu’il est présent dans la commande d’installation. -Approuvez le Node depuis l’hôte Gateway : +Approuvez le nœud depuis l’hôte Gateway : ```bash openclaw devices list openclaw devices approve ``` -Confirmez que le Gateway voit le Node et qu’il annonce `googlemeet.chrome` : +Confirmez que le Gateway voit le nœud et qu’il annonce `googlemeet.chrome` : ```bash openclaw nodes status ``` -Acheminez Meet via ce Node sur l’hôte Gateway : +Faites passer Meet par ce nœud sur l’hôte Gateway : ```json5 { @@ -185,48 +203,70 @@ Acheminez Meet via ce Node sur l’hôte Gateway : } ``` -Vous pouvez maintenant rejoindre la réunion normalement depuis l’hôte Gateway : +Rejoignez maintenant normalement depuis l’hôte Gateway : ```bash openclaw googlemeet join https://meet.google.com/abc-defg-hij ``` -ou demander à l’agent d’utiliser l’outil `google_meet` avec `transport: "chrome-node"`. +ou demandez à l’agent d’utiliser l’outil `google_meet` avec `transport: "chrome-node"`. -Si `chromeNode.node` est omis, OpenClaw effectue une sélection automatique uniquement lorsqu’un seul Node connecté annonce `googlemeet.chrome`. Si plusieurs Nodes compatibles sont connectés, définissez `chromeNode.node` sur l’identifiant du Node, son nom d’affichage ou son IP distante. +Si `chromeNode.node` est omis, OpenClaw effectue une sélection automatique uniquement lorsqu’un seul +nœud connecté annonce `googlemeet.chrome`. Si plusieurs nœuds capables sont +connectés, définissez `chromeNode.node` sur l’identifiant du nœud, son nom d’affichage ou son IP distante. Vérifications courantes en cas d’échec : -- `No connected Google Meet-capable node` : démarrez `openclaw node run` dans la VM, approuvez l’appairage et assurez-vous que `openclaw plugins enable google-meet` a bien été exécuté dans la VM. Confirmez aussi que l’hôte Gateway autorise la commande Node avec `gateway.nodes.allowCommands: ["googlemeet.chrome"]`. -- `BlackHole 2ch audio device not found on the node` : installez `blackhole-2ch` dans la VM et redémarrez la VM. -- Chrome s’ouvre mais ne peut pas rejoindre la réunion : connectez-vous à Chrome dans la VM et confirmez que ce profil peut rejoindre manuellement l’URL Meet. -- Pas d’audio : dans Meet, acheminez le microphone et le haut-parleur via le chemin de périphérique audio virtuel utilisé par OpenClaw ; utilisez des périphériques virtuels séparés ou un routage de type Loopback pour un audio duplex propre. +- `No connected Google Meet-capable node` : démarrez `openclaw node run` dans la VM, + approuvez l’appairage, et assurez-vous que `openclaw plugins enable google-meet` a été exécuté + dans la VM. Confirmez également que l’hôte Gateway autorise la commande du nœud avec + `gateway.nodes.allowCommands: ["googlemeet.chrome"]`. +- `BlackHole 2ch audio device not found on the node` : installez `blackhole-2ch` + dans la VM et redémarrez la VM. +- Chrome s’ouvre mais ne peut pas rejoindre : connectez-vous à Chrome dans la VM et confirmez que ce + profil peut rejoindre l’URL Meet manuellement. +- Pas de son : dans Meet, faites passer le microphone/haut-parleur par le chemin du périphérique audio virtuel + utilisé par OpenClaw ; utilisez des périphériques virtuels séparés ou un routage de type Loopback + pour un duplex propre. ## Notes d’installation -Le mode Chrome en temps réel par défaut utilise deux outils externes : +La configuration par défaut Chrome realtime utilise deux outils externes : -- `sox` : utilitaire audio en ligne de commande. Le Plugin utilise ses commandes `rec` et `play` pour le pont audio G.711 mu-law 8 kHz par défaut. -- `blackhole-2ch` : pilote audio virtuel macOS. Il crée le périphérique audio `BlackHole 2ch` par lequel Chrome/Meet peut être acheminé. +- `sox` : utilitaire audio en ligne de commande. Le Plugin utilise ses commandes `rec` et `play` + pour le pont audio G.711 mu-law 8 kHz par défaut. +- `blackhole-2ch` : pilote audio virtuel macOS. Il crée le périphérique audio `BlackHole 2ch` + par lequel Chrome/Meet peut être routé. -OpenClaw ne fournit ni ne redistribue aucun de ces deux paquets. La documentation demande aux utilisateurs de les installer comme dépendances de l’hôte via Homebrew. SoX est sous licence `LGPL-2.0-only AND GPL-2.0-only` ; BlackHole est sous licence GPL-3.0. Si vous créez un programme d’installation ou une appliance qui intègre BlackHole avec OpenClaw, vérifiez les conditions de licence amont de BlackHole ou obtenez une licence distincte auprès de Existential Audio. +OpenClaw ne regroupe ni ne redistribue aucun de ces deux paquets. La documentation demande aux utilisateurs de +les installer comme dépendances hôtes via Homebrew. SoX est sous licence +`LGPL-2.0-only AND GPL-2.0-only` ; BlackHole est sous GPL-3.0. Si vous créez un +installateur ou une appliance qui regroupe BlackHole avec OpenClaw, examinez les +conditions de licence amont de BlackHole ou obtenez une licence distincte auprès d’Existential Audio. ## Transports ### Chrome -Le transport Chrome ouvre l’URL Meet dans Google Chrome et rejoint la réunion en tant que profil Chrome connecté. Sur macOS, le Plugin vérifie la présence de `BlackHole 2ch` avant le lancement. Si configuré, il exécute également une commande de vérification de santé du pont audio et une commande de démarrage avant d’ouvrir Chrome. Utilisez `chrome` lorsque Chrome/l’audio s’exécutent sur l’hôte Gateway ; utilisez `chrome-node` lorsque Chrome/l’audio s’exécutent sur un Node appairé, comme une VM macOS Parallels. +Le transport Chrome ouvre l’URL Meet dans Google Chrome et rejoint la réunion avec le profil Chrome +connecté. Sur macOS, le Plugin vérifie la présence de `BlackHole 2ch` avant le lancement. +Si configuré, il exécute également une commande de vérification de santé du pont audio et une commande de démarrage +avant d’ouvrir Chrome. Utilisez `chrome` lorsque Chrome/l’audio s’exécutent sur l’hôte Gateway ; +utilisez `chrome-node` lorsque Chrome/l’audio s’exécutent sur un nœud appairé comme une VM macOS Parallels. ```bash openclaw googlemeet join https://meet.google.com/abc-defg-hij --transport chrome openclaw googlemeet join https://meet.google.com/abc-defg-hij --transport chrome-node ``` -Acheminez l’audio microphone et haut-parleur de Chrome via le pont audio OpenClaw local. Si `BlackHole 2ch` n’est pas installé, la connexion échoue avec une erreur de configuration au lieu de rejoindre silencieusement sans chemin audio. +Faites passer l’audio du microphone et du haut-parleur de Chrome par le pont audio local OpenClaw. +Si `BlackHole 2ch` n’est pas installé, la connexion échoue avec une erreur de configuration +au lieu de rejoindre silencieusement sans chemin audio. ### Twilio -Le transport Twilio est un plan de numérotation strict délégué au Plugin Voice Call. Il n’analyse pas les pages Meet pour y trouver des numéros de téléphone. +Le transport Twilio est un plan de numérotation strict délégué au Plugin Voice Call. Il +n’analyse pas les pages Meet pour en extraire des numéros de téléphone. ```bash openclaw googlemeet join https://meet.google.com/abc-defg-hij \ @@ -244,17 +284,20 @@ openclaw googlemeet join https://meet.google.com/abc-defg-hij \ --dtmf-sequence ww123456# ``` -## OAuth et prévérification +## OAuth et pré-vérification -L’accès à l’API média Google Meet utilise d’abord un client OAuth personnel. Configurez `oauth.clientId` et, facultativement, `oauth.clientSecret`, puis exécutez : +L’accès à l’API média Google Meet commence d’abord par un client OAuth personnel. Configurez +`oauth.clientId` et éventuellement `oauth.clientSecret`, puis exécutez : ```bash openclaw googlemeet auth login --json ``` -La commande affiche un bloc de configuration `oauth` avec un jeton d’actualisation. Elle utilise PKCE, un rappel localhost sur `http://localhost:8085/oauth2callback` et un flux manuel de copier-coller avec `--manual`. +La commande affiche un bloc de configuration `oauth` avec un refresh token. Elle utilise PKCE, +le callback localhost sur `http://localhost:8085/oauth2callback` et un flux manuel +copier/coller avec `--manual`. -Ces variables d’environnement sont acceptées comme solutions de secours : +Ces variables d’environnement sont acceptées comme solutions de repli : - `OPENCLAW_GOOGLE_MEET_CLIENT_ID` ou `GOOGLE_MEET_CLIENT_ID` - `OPENCLAW_GOOGLE_MEET_CLIENT_SECRET` ou `GOOGLE_MEET_CLIENT_SECRET` @@ -271,21 +314,27 @@ Résolvez une URL Meet, un code ou `spaces/{id}` via `spaces.get` : openclaw googlemeet resolve-space --meeting https://meet.google.com/abc-defg-hij ``` -Exécutez la prévérification avant le travail média : +Exécutez la pré-vérification avant le travail média : ```bash openclaw googlemeet preflight --meeting https://meet.google.com/abc-defg-hij ``` -Définissez `preview.enrollmentAcknowledged: true` uniquement après avoir confirmé que votre projet Cloud, le principal OAuth et les participants à la réunion sont inscrits au Google Workspace Developer Preview Program pour les API média Meet. +Définissez `preview.enrollmentAcknowledged: true` uniquement après avoir confirmé que votre +projet Cloud, le principal OAuth et les participants à la réunion sont inscrits au +Google Workspace Developer Preview Program pour les API média Meet. ## Configuration -Le chemin Chrome en temps réel courant nécessite seulement le Plugin activé, BlackHole, SoX et une clé OpenAI : +Le chemin Chrome realtime courant nécessite seulement l’activation du Plugin, BlackHole, SoX +et une clé de fournisseur de voix temps réel backend. OpenAI est celui par défaut ; définissez +`realtime.provider: "google"` pour utiliser Google Gemini Live : ```bash brew install blackhole-2ch sox export OPENAI_API_KEY=sk-... +# or +export GEMINI_API_KEY=... ``` Définissez la configuration du Plugin sous `plugins.entries.google-meet.config` : @@ -307,15 +356,18 @@ Valeurs par défaut : - `defaultTransport: "chrome"` - `defaultMode: "realtime"` -- `chromeNode.node` : identifiant/nom/IP du Node facultatif pour `chrome-node` +- `chromeNode.node` : identifiant/nom/IP de nœud facultatif pour `chrome-node` - `chrome.audioBackend: "blackhole-2ch"` -- `chrome.audioInputCommand` : commande SoX `rec` écrivant un audio G.711 mu-law 8 kHz vers stdout -- `chrome.audioOutputCommand` : commande SoX `play` lisant un audio G.711 mu-law 8 kHz depuis stdin +- `chrome.audioInputCommand` : commande SoX `rec` écrivant de l’audio G.711 mu-law 8 kHz + sur stdout +- `chrome.audioOutputCommand` : commande SoX `play` lisant de l’audio G.711 mu-law 8 kHz + depuis stdin - `realtime.provider: "openai"` - `realtime.toolPolicy: "safe-read-only"` - `realtime.instructions` : réponses parlées brèves, avec `openclaw_agent_consult` pour les réponses plus approfondies -- `realtime.introMessage` : bref contrôle vocal de disponibilité lorsque le pont en temps réel se connecte ; définissez-le sur `""` pour rejoindre silencieusement +- `realtime.introMessage` : bref contrôle de disponibilité vocal lorsque le pont temps réel + se connecte ; définissez-le sur `""` pour rejoindre silencieusement Surcharges facultatives : @@ -331,8 +383,15 @@ Surcharges facultatives : node: "parallels-macos", }, realtime: { + provider: "google", toolPolicy: "owner", introMessage: "Say exactly: I'm here.", + providers: { + google: { + model: "gemini-2.5-flash-native-audio-preview-12-2025", + voice: "Kore", + }, + }, }, } ``` @@ -365,9 +424,14 @@ Les agents peuvent utiliser l’outil `google_meet` : } ``` -Utilisez `transport: "chrome"` lorsque Chrome s’exécute sur l’hôte Gateway. Utilisez `transport: "chrome-node"` lorsque Chrome s’exécute sur un Node appairé, comme une VM Parallels. Dans les deux cas, le modèle en temps réel et `openclaw_agent_consult` s’exécutent sur l’hôte Gateway, de sorte que les identifiants du modèle y restent. +Utilisez `transport: "chrome"` lorsque Chrome s’exécute sur l’hôte Gateway. Utilisez +`transport: "chrome-node"` lorsque Chrome s’exécute sur un nœud appairé comme une VM Parallels. +Dans les deux cas, le modèle temps réel et `openclaw_agent_consult` s’exécutent sur l’hôte +Gateway, de sorte que les identifiants du modèle y restent. -Utilisez `action: "status"` pour lister les sessions actives ou inspecter un identifiant de session. Utilisez `action: "speak"` avec `sessionId` et `message` pour faire parler immédiatement l’agent en temps réel. Utilisez `action: "leave"` pour marquer une session comme terminée. +Utilisez `action: "status"` pour lister les sessions actives ou inspecter un identifiant de session. Utilisez +`action: "speak"` avec `sessionId` et `message` pour faire parler immédiatement l’agent +temps réel. Utilisez `action: "leave"` pour marquer la fin d’une session. ```json { @@ -377,23 +441,30 @@ Utilisez `action: "status"` pour lister les sessions actives ou inspecter un ide } ``` -## Consultation d’agent en temps réel +## Consultation de l’agent en temps réel -Le mode Chrome en temps réel est optimisé pour une boucle vocale en direct. Le fournisseur vocal en temps réel entend l’audio de la réunion et parle via le pont audio configuré. Lorsque le modèle en temps réel a besoin d’un raisonnement plus approfondi, d’informations actuelles ou des outils OpenClaw normaux, il peut appeler `openclaw_agent_consult`. +Le mode Chrome realtime est optimisé pour une boucle vocale en direct. Le fournisseur +de voix temps réel entend l’audio de la réunion et parle via le pont audio configuré. +Lorsque le modèle temps réel a besoin d’un raisonnement plus approfondi, d’informations +actuelles ou des outils OpenClaw normaux, il peut appeler `openclaw_agent_consult`. -L’outil de consultation exécute en arrière-plan l’agent OpenClaw standard avec le contexte récent de la transcription de la réunion, puis renvoie une réponse orale concise à la session vocale en temps réel. Le modèle vocal peut ensuite restituer cette réponse dans la réunion. +L’outil de consultation exécute l’agent OpenClaw standard en arrière-plan avec le contexte +récent de la transcription de la réunion et renvoie une réponse parlée concise à la session +vocale temps réel. Le modèle vocal peut ensuite prononcer cette réponse dans la réunion. `realtime.toolPolicy` contrôle l’exécution de la consultation : - `safe-read-only` : expose l’outil de consultation et limite l’agent standard à `read`, `web_search`, `web_fetch`, `x_search`, `memory_search` et `memory_get`. -- `owner` : expose l’outil de consultation et permet à l’agent standard d’utiliser la politique d’outils normale de l’agent. -- `none` : n’expose pas l’outil de consultation au modèle vocal en temps réel. +- `owner` : expose l’outil de consultation et laisse l’agent standard utiliser la politique + d’outils normale de l’agent. +- `none` : n’expose pas l’outil de consultation au modèle vocal temps réel. -La clé de session de consultation est limitée à chaque session Meet, afin que les appels de consultation de suivi puissent réutiliser le contexte de consultation précédent pendant la même réunion. +La clé de session de consultation est limitée à chaque session Meet, afin que les appels de +consultation de suivi puissent réutiliser le contexte de consultation antérieur pendant la même réunion. -Pour forcer une vérification vocale de disponibilité après que Chrome a complètement rejoint l’appel : +Pour forcer un contrôle vocal de disponibilité une fois que Chrome a complètement rejoint l’appel : ```bash openclaw googlemeet speak meet_... "Say exactly: I'm here and listening." @@ -401,19 +472,29 @@ openclaw googlemeet speak meet_... "Say exactly: I'm here and listening." ## Notes -L’API média officielle de Google Meet est orientée réception, donc parler dans un appel Meet nécessite toujours un chemin de participation. Ce Plugin conserve cette limite visible : Chrome gère la participation via le navigateur et le routage audio local ; Twilio gère la participation par appel téléphonique. +L’API média officielle de Google Meet est orientée réception, donc parler dans un appel Meet +nécessite toujours un chemin de participation. Ce Plugin garde cette limite visible : +Chrome gère la participation du navigateur et le routage audio local ; Twilio gère +la participation par appel téléphonique. -Le mode Chrome en temps réel nécessite soit : +Le mode Chrome realtime nécessite soit : -- `chrome.audioInputCommand` plus `chrome.audioOutputCommand` : OpenClaw gère le pont du modèle en temps réel et fait transiter l’audio G.711 mu-law 8 kHz entre ces commandes et le fournisseur vocal en temps réel sélectionné. -- `chrome.audioBridgeCommand` : une commande de pont externe gère l’ensemble du chemin audio local et doit se terminer après avoir démarré ou validé son démon. +- `chrome.audioInputCommand` plus `chrome.audioOutputCommand` : OpenClaw gère le + pont du modèle temps réel et transfère l’audio G.711 mu-law 8 kHz entre ces + commandes et le fournisseur de voix temps réel sélectionné. +- `chrome.audioBridgeCommand` : une commande de pont externe gère l’ensemble du chemin + audio local et doit se terminer après avoir démarré ou validé son démon. -Pour un audio duplex propre, acheminez la sortie Meet et le microphone Meet via des périphériques virtuels séparés ou un graphe de périphériques virtuels de type Loopback. Un seul périphérique BlackHole partagé peut réinjecter l’audio des autres participants dans l’appel. +Pour un duplex audio propre, faites passer la sortie Meet et le microphone Meet par des +périphériques virtuels séparés ou par un graphe de périphérique virtuel de type Loopback. Un seul +périphérique BlackHole partagé peut renvoyer en écho les autres participants dans l’appel. -`googlemeet speak` déclenche le pont audio en temps réel actif pour une session Chrome. `googlemeet leave` arrête ce pont. Pour les sessions Twilio déléguées via le Plugin Voice Call, `leave` raccroche également l’appel vocal sous-jacent. +`googlemeet speak` déclenche le pont audio temps réel actif pour une session Chrome. +`googlemeet leave` arrête ce pont. Pour les sessions Twilio déléguées via le Plugin +Voice Call, `leave` raccroche également l’appel vocal sous-jacent. -## Liés +## Liens associés - [Plugin Voice Call](/fr/plugins/voice-call) -- [Mode conversation](/fr/nodes/talk) -- [Créer des Plugins](/fr/plugins/building-plugins) +- [Mode Talk](/fr/nodes/talk) +- [Créer des plugins](/fr/plugins/building-plugins) diff --git a/docs/fr/plugins/voice-call.md b/docs/fr/plugins/voice-call.md index 355f986bd..3c1916943 100644 --- a/docs/fr/plugins/voice-call.md +++ b/docs/fr/plugins/voice-call.md @@ -1,22 +1,21 @@ --- read_when: - - Vous souhaitez émettre un appel vocal sortant depuis OpenClaw - - Vous configurez ou développez le Plugin voice-call -summary: 'Plugin Voice Call : appels entrants + sortants via Twilio/Telnyx/Plivo (installation du Plugin + configuration + CLI)' + - Vous souhaitez passer un appel vocal sortant depuis OpenClaw + - Vous configurez ou développez le plugin voice-call +summary: 'Plugin Voice Call : appels sortants + entrants via Twilio/Telnyx/Plivo (installation du plugin + configuration + CLI)' title: Plugin Voice Call x-i18n: - generated_at: "2026-04-24T07:25:15Z" + generated_at: "2026-04-24T09:51:43Z" model: gpt-5.4 provider: openai - source_hash: 4cd57118133506c22604ab9592a823546a91795ab425de4b7a81edbbb8374e6d + source_hash: 6aed4e33ce090c86f43c71280f033e446f335c53d42456fdc93c9938250e9af6 source_path: plugins/voice-call.md workflow: 15 --- -# Voice Call (Plugin) +# Voice Call (plugin) -Appels vocaux pour OpenClaw via un Plugin. Prend en charge les notifications sortantes et -les conversations à plusieurs tours avec politiques entrantes. +Appels vocaux pour OpenClaw via un plugin. Prend en charge les notifications sortantes et les conversations multi-tours avec des politiques entrantes. Fournisseurs actuels : @@ -27,16 +26,16 @@ Fournisseurs actuels : Modèle mental rapide : -- Installer le Plugin -- Redémarrer Gateway +- Installer le plugin +- Redémarrer le Gateway - Configurer sous `plugins.entries.voice-call.config` - Utiliser `openclaw voicecall ...` ou l’outil `voice_call` -## Où cela s’exécute (local vs distant) +## Où il s’exécute (local ou distant) -Le Plugin Voice Call s’exécute **dans le processus Gateway**. +Le plugin Voice Call s’exécute **dans le processus Gateway**. -Si vous utilisez un Gateway distant, installez/configurez le Plugin sur la **machine qui exécute le Gateway**, puis redémarrez le Gateway pour charger le Plugin. +Si vous utilisez un Gateway distant, installez/configurez le plugin sur la **machine qui exécute le Gateway**, puis redémarrez le Gateway pour le charger. ## Installation @@ -69,8 +68,8 @@ Définissez la configuration sous `plugins.entries.voice-call.config` : "voice-call": { enabled: true, config: { - provider: "twilio", // or "telnyx" | "plivo" | "mock" - fromNumber: "+15550001234", // or TWILIO_FROM_NUMBER for Twilio + provider: "twilio", // ou "telnyx" | "plivo" | "mock" + fromNumber: "+15550001234", // ou TWILIO_FROM_NUMBER pour Twilio toNumber: "+15550005678", twilio: { @@ -81,8 +80,8 @@ Définissez la configuration sous `plugins.entries.voice-call.config` : telnyx: { apiKey: "...", connectionId: "...", - // Telnyx webhook public key from the Telnyx Mission Control Portal - // (Base64 string; can also be set via TELNYX_PUBLIC_KEY). + // Clé publique de webhook Telnyx depuis le portail Telnyx Mission Control + // (chaîne Base64 ; peut aussi être définie via TELNYX_PUBLIC_KEY). publicKey: "...", }, @@ -91,19 +90,19 @@ Définissez la configuration sous `plugins.entries.voice-call.config` : authToken: "...", }, - // Webhook server + // Serveur Webhook serve: { port: 3334, path: "/voice/webhook", }, - // Webhook security (recommended for tunnels/proxies) + // Sécurité Webhook (recommandée pour les tunnels/proxys) webhookSecurity: { allowedHosts: ["voice.example.com"], trustedProxyIPs: ["100.64.0.1"], }, - // Public exposure (pick one) + // Exposition publique (choisissez-en une) // publicUrl: "https://example.ngrok.app/voice/webhook", // tunnel: { provider: "ngrok" }, // tailscale: { mode: "funnel", path: "/voice/webhook" } @@ -114,11 +113,11 @@ Définissez la configuration sous `plugins.entries.voice-call.config` : streaming: { enabled: true, - provider: "openai", // optional; first registered realtime transcription provider when unset + provider: "openai", // facultatif ; premier fournisseur de transcription temps réel enregistré si non défini streamPath: "/voice/stream", providers: { openai: { - apiKey: "sk-...", // optional if OPENAI_API_KEY is set + apiKey: "sk-...", // facultatif si OPENAI_API_KEY est défini model: "gpt-4o-transcribe", silenceDurationMs: 800, vadThreshold: 0.5, @@ -129,6 +128,17 @@ Définissez la configuration sous `plugins.entries.voice-call.config` : maxPendingConnectionsPerIp: 4, maxConnections: 128, }, + + realtime: { + enabled: false, + provider: "google", // facultatif ; premier fournisseur vocal temps réel enregistré si non défini + providers: { + google: { + model: "gemini-2.5-flash-native-audio-preview-12-2025", + voice: "Kore", + }, + }, + }, }, }, }, @@ -138,49 +148,133 @@ Définissez la configuration sous `plugins.entries.voice-call.config` : Remarques : -- Twilio/Telnyx exigent une URL Webhook **accessible publiquement**. -- Plivo exige une URL Webhook **accessible publiquement**. +- Twilio/Telnyx nécessitent une URL de Webhook **accessible publiquement**. +- Plivo nécessite une URL de Webhook **accessible publiquement**. - `mock` est un fournisseur de développement local (sans appels réseau). -- Si d’anciennes configurations utilisent encore `provider: "log"`, `twilio.from`, ou les anciennes clés OpenAI `streaming.*`, exécutez `openclaw doctor --fix` pour les réécrire. -- Telnyx exige `telnyx.publicKey` (ou `TELNYX_PUBLIC_KEY`) sauf si `skipSignatureVerification` vaut true. +- Si d’anciennes configurations utilisent encore `provider: "log"`, `twilio.from` ou d’anciennes clés OpenAI `streaming.*`, exécutez `openclaw doctor --fix` pour les réécrire. +- Telnyx nécessite `telnyx.publicKey` (ou `TELNYX_PUBLIC_KEY`) sauf si `skipSignatureVerification` vaut true. - `skipSignatureVerification` est réservé aux tests locaux. -- Si vous utilisez le niveau gratuit de ngrok, définissez `publicUrl` sur l’URL ngrok exacte ; la vérification de signature est toujours appliquée. -- `tunnel.allowNgrokFreeTierLoopbackBypass: true` autorise les Webhooks Twilio avec des signatures invalides **uniquement** lorsque `tunnel.provider="ngrok"` et `serve.bind` est en boucle locale (agent local ngrok). À utiliser uniquement pour le développement local. -- Les URL ngrok du niveau gratuit peuvent changer ou ajouter un comportement intermédiaire ; si `publicUrl` dérive, les signatures Twilio échoueront. Pour la production, préférez un domaine stable ou Tailscale funnel. -- Valeurs par défaut de sécurité du streaming : +- Si vous utilisez l’offre gratuite ngrok, définissez `publicUrl` sur l’URL ngrok exacte ; la vérification de signature est toujours appliquée. +- `tunnel.allowNgrokFreeTierLoopbackBypass: true` autorise les Webhooks Twilio avec des signatures invalides **uniquement** lorsque `tunnel.provider="ngrok"` et `serve.bind` est en loopback (agent local ngrok). À utiliser uniquement pour le développement local. +- Les URL ngrok gratuites peuvent changer ou ajouter un comportement interstitiel ; si `publicUrl` dérive, les signatures Twilio échoueront. En production, préférez un domaine stable ou un funnel Tailscale. +- `realtime.enabled` démarre des conversations vocales complètes de bout en bout ; ne l’activez pas en même temps que `streaming.enabled`. +- Paramètres de sécurité par défaut pour le streaming : - `streaming.preStartTimeoutMs` ferme les sockets qui n’envoient jamais de trame `start` valide. - `streaming.maxPendingConnections` limite le nombre total de sockets pré-démarrage non authentifiés. -- `streaming.maxPendingConnectionsPerIp` limite les sockets pré-démarrage non authentifiés par IP source. +- `streaming.maxPendingConnectionsPerIp` limite le nombre de sockets pré-démarrage non authentifiés par IP source. - `streaming.maxConnections` limite le nombre total de sockets de flux média ouverts (en attente + actifs). -- Le repli à l’exécution accepte encore pour l’instant ces anciennes clés voice-call, mais le chemin de réécriture est `openclaw doctor --fix` et la couche de compatibilité est temporaire. +- Le repli d’exécution accepte encore ces anciennes clés voice-call pour le moment, mais la voie de réécriture est `openclaw doctor --fix` et la couche de compatibilité est temporaire. + +## Conversations vocales temps réel + +`realtime` sélectionne un fournisseur vocal temps réel full duplex pour l’audio des appels en direct. +Il est distinct de `streaming`, qui ne transfère l’audio qu’aux fournisseurs +de transcription temps réel. + +Comportement actuel à l’exécution : + +- `realtime.enabled` est pris en charge pour Twilio Media Streams. +- `realtime.enabled` ne peut pas être combiné avec `streaming.enabled`. +- `realtime.provider` est facultatif. S’il n’est pas défini, Voice Call utilise le premier + fournisseur vocal temps réel enregistré. +- Les fournisseurs vocaux temps réel inclus comprennent Google Gemini Live (`google`) et + OpenAI (`openai`), enregistrés par leurs plugins de fournisseur. +- La configuration brute propre au fournisseur se trouve sous `realtime.providers.`. +- Si `realtime.provider` pointe vers un fournisseur non enregistré, ou si aucun fournisseur vocal + temps réel n’est enregistré, Voice Call journalise un avertissement et ignore + les médias temps réel au lieu de faire échouer tout le plugin. + +Valeurs par défaut temps réel pour Google Gemini Live : + +- Clé API : `realtime.providers.google.apiKey`, `GEMINI_API_KEY` ou + `GOOGLE_GENERATIVE_AI_API_KEY` +- modèle : `gemini-2.5-flash-native-audio-preview-12-2025` +- voix : `Kore` + +Exemple : + +```json5 +{ + plugins: { + entries: { + "voice-call": { + config: { + provider: "twilio", + inboundPolicy: "allowlist", + allowFrom: ["+15550005678"], + realtime: { + enabled: true, + provider: "google", + instructions: "Parlez brièvement et demandez avant d’utiliser des outils.", + providers: { + google: { + apiKey: "${GEMINI_API_KEY}", + model: "gemini-2.5-flash-native-audio-preview-12-2025", + voice: "Kore", + }, + }, + }, + }, + }, + }, + }, +} +``` + +Utiliser OpenAI à la place : + +```json5 +{ + plugins: { + entries: { + "voice-call": { + config: { + realtime: { + enabled: true, + provider: "openai", + providers: { + openai: { + apiKey: "${OPENAI_API_KEY}", + }, + }, + }, + }, + }, + }, + }, +} +``` + +Voir [fournisseur Google](/fr/providers/google) et [fournisseur OpenAI](/fr/providers/openai) +pour les options vocales temps réel spécifiques au fournisseur. ## Transcription en streaming -`streaming` sélectionne un fournisseur de transcription en temps réel pour l’audio des appels en direct. +`streaming` sélectionne un fournisseur de transcription temps réel pour l’audio des appels en direct. Comportement actuel à l’exécution : - `streaming.provider` est facultatif. S’il n’est pas défini, Voice Call utilise le premier - fournisseur de transcription en temps réel enregistré. -- Les fournisseurs groupés de transcription en temps réel incluent Deepgram (`deepgram`), + fournisseur de transcription temps réel enregistré. +- Les fournisseurs de transcription temps réel inclus comprennent Deepgram (`deepgram`), ElevenLabs (`elevenlabs`), Mistral (`mistral`), OpenAI (`openai`) et xAI - (`xai`), enregistrés par leurs Plugins fournisseurs. -- La configuration brute appartenant au fournisseur se trouve sous `streaming.providers.`. -- Si `streaming.provider` pointe vers un fournisseur non enregistré, ou si aucun fournisseur - de transcription en temps réel n’est enregistré, Voice Call journalise un avertissement et - ignore le streaming média au lieu de faire échouer l’ensemble du Plugin. + (`xai`), enregistrés par leurs plugins de fournisseur. +- La configuration brute propre au fournisseur se trouve sous `streaming.providers.`. +- Si `streaming.provider` pointe vers un fournisseur non enregistré, ou si aucun fournisseur de transcription + temps réel n’est enregistré, Voice Call journalise un avertissement et + ignore le streaming média au lieu de faire échouer tout le plugin. -Valeurs par défaut de la transcription en streaming OpenAI : +Valeurs par défaut pour la transcription en streaming OpenAI : - Clé API : `streaming.providers.openai.apiKey` ou `OPENAI_API_KEY` - modèle : `gpt-4o-transcribe` - `silenceDurationMs` : `800` - `vadThreshold` : `0.5` -Valeurs par défaut de la transcription en streaming xAI : +Valeurs par défaut pour la transcription en streaming xAI : - Clé API : `streaming.providers.xai.apiKey` ou `XAI_API_KEY` -- endpoint : `wss://api.x.ai/v1/stt` +- point de terminaison : `wss://api.x.ai/v1/stt` - `encoding` : `mulaw` - `sampleRate` : `8000` - `endpointingMs` : `800` @@ -200,7 +294,7 @@ Exemple : streamPath: "/voice/stream", providers: { openai: { - apiKey: "sk-...", // optional if OPENAI_API_KEY is set + apiKey: "sk-...", // facultatif si OPENAI_API_KEY est défini model: "gpt-4o-transcribe", silenceDurationMs: 800, vadThreshold: 0.5, @@ -228,7 +322,7 @@ Utiliser xAI à la place : streamPath: "/voice/stream", providers: { xai: { - apiKey: "${XAI_API_KEY}", // optional if XAI_API_KEY is set + apiKey: "${XAI_API_KEY}", // facultatif si XAI_API_KEY est défini endpointingMs: 800, language: "en", }, @@ -241,7 +335,7 @@ Utiliser xAI à la place : } ``` -Les anciennes clés sont encore auto-migrées par `openclaw doctor --fix` : +Les anciennes clés sont encore migrées automatiquement par `openclaw doctor --fix` : - `streaming.sttProvider` → `streaming.provider` - `streaming.openaiApiKey` → `streaming.providers.openai.apiKey` @@ -258,7 +352,7 @@ Utilisez `staleCallReaperSeconds` pour terminer les appels qui ne reçoivent jam Plages recommandées : - **Production :** `120`–`300` secondes pour les flux de type notification. -- Gardez cette valeur **supérieure à `maxDurationSeconds`** afin que les appels normaux puissent +- Gardez cette valeur **supérieure à `maxDurationSeconds`** pour que les appels normaux puissent se terminer. Un bon point de départ est `maxDurationSeconds + 30–60` secondes. Exemple : @@ -280,28 +374,28 @@ Exemple : ## Sécurité Webhook -Lorsqu’un proxy ou un tunnel se trouve devant le Gateway, le Plugin reconstruit l’URL -publique pour la vérification de signature. Ces options contrôlent quels en-têtes transférés -sont approuvés. +Lorsqu’un proxy ou un tunnel est placé devant le Gateway, le plugin reconstruit l’URL +publique pour la vérification de signature. Ces options contrôlent quels en-têtes +transmis sont dignes de confiance. -`webhookSecurity.allowedHosts` met en liste d’autorisation les hôtes à partir des en-têtes de transfert. +`webhookSecurity.allowedHosts` met sur liste autorisée les hôtes provenant des en-têtes de transfert. -`webhookSecurity.trustForwardingHeaders` fait confiance aux en-têtes transférés sans liste d’autorisation. +`webhookSecurity.trustForwardingHeaders` fait confiance aux en-têtes de transfert sans liste autorisée. -`webhookSecurity.trustedProxyIPs` ne fait confiance aux en-têtes transférés que lorsque l’IP distante +`webhookSecurity.trustedProxyIPs` ne fait confiance aux en-têtes de transfert que lorsque l’IP distante de la requête correspond à la liste. -La protection contre la relecture de Webhook est activée pour Twilio et Plivo. Les requêtes Webhook -rejouées mais valides sont accusées réception, mais ignorées pour les effets de bord. +La protection contre la relecture des Webhooks est activée pour Twilio et Plivo. Les requêtes Webhook +valides rejouées sont reconnues mais ignorées pour les effets de bord. -Les tours de conversation Twilio incluent un jeton par tour dans les callbacks ``, de sorte que -des callbacks vocaux obsolètes/rejoués ne puissent pas satisfaire un nouveau tour de transcription en attente. +Les tours de conversation Twilio incluent un jeton par tour dans les rappels ``, afin que +les rappels vocaux obsolètes ou rejoués ne puissent pas satisfaire un nouveau tour de transcription en attente. -Les requêtes Webhook non authentifiées sont rejetées avant lecture du corps lorsque les en-têtes de signature requis -par le fournisseur sont absents. +Les requêtes Webhook non authentifiées sont rejetées avant la lecture du corps lorsque les en-têtes +de signature requis par le fournisseur sont absents. -Le Webhook voice-call utilise le profil partagé de corps pré-auth (64 KB / 5 secondes) -plus une limite en vol par IP avant la vérification de signature. +Le Webhook voice-call utilise le profil partagé de corps pré-authentification (64 KB / 5 secondes) +ainsi qu’une limite par IP sur les requêtes en vol avant la vérification de signature. Exemple avec un hôte public stable : @@ -324,9 +418,9 @@ Exemple avec un hôte public stable : ## TTS pour les appels -Voice Call utilise la configuration `messages.tts` du cœur pour -le streaming vocal sur les appels. Vous pouvez la remplacer sous la configuration du Plugin avec la -**même forme** — elle fusionne en profondeur avec `messages.tts`. +Voice Call utilise la configuration principale `messages.tts` pour +la synthèse vocale en streaming lors des appels. Vous pouvez la redéfinir dans la configuration du plugin avec la +**même structure** — elle est fusionnée en profondeur avec `messages.tts`. ```json5 { @@ -344,15 +438,15 @@ le streaming vocal sur les appels. Vous pouvez la remplacer sous la configuratio Remarques : -- Les anciennes clés `tts.` à l’intérieur de la configuration du Plugin (`openai`, `elevenlabs`, `microsoft`, `edge`) sont auto-migrées vers `tts.providers.` au chargement. Préférez la forme `providers` dans la configuration versionnée. -- **La parole Microsoft est ignorée pour les appels vocaux** (l’audio téléphonique nécessite du PCM ; le transport Microsoft actuel n’expose pas de sortie PCM téléphonique). -- Le TTS du cœur est utilisé lorsque le streaming média Twilio est activé ; sinon les appels reviennent aux voix natives du fournisseur. -- Si un flux média Twilio est déjà actif, Voice Call ne revient pas à `` TwiML. Si le TTS téléphonique n’est pas disponible dans cet état, la requête de lecture échoue au lieu de mélanger deux chemins de lecture. -- Lorsque le TTS téléphonique se replie sur un fournisseur secondaire, Voice Call journalise un avertissement avec la chaîne de fournisseurs (`from`, `to`, `attempts`) pour faciliter le débogage. +- Les anciennes clés `tts.` dans la configuration du plugin (`openai`, `elevenlabs`, `microsoft`, `edge`) sont migrées automatiquement vers `tts.providers.` au chargement. Préférez la structure `providers` dans la configuration versionnée. +- **Microsoft speech est ignoré pour les appels vocaux** (l’audio téléphonique nécessite du PCM ; le transport Microsoft actuel n’expose pas de sortie PCM pour la téléphonie). +- Le TTS principal est utilisé lorsque le streaming média Twilio est activé ; sinon les appels reviennent aux voix natives du fournisseur. +- Si un flux média Twilio est déjà actif, Voice Call ne revient pas à TwiML ``. Si le TTS téléphonique n’est pas disponible dans cet état, la demande de lecture échoue au lieu de mélanger deux chemins de lecture. +- Lorsque le TTS téléphonique revient à un fournisseur secondaire, Voice Call journalise un avertissement avec la chaîne de fournisseurs (`from`, `to`, `attempts`) pour le débogage. -### Plus d’exemples +### Autres exemples -Utiliser uniquement le TTS du cœur (sans remplacement) : +Utiliser uniquement le TTS principal (sans redéfinition) : ```json5 { @@ -367,7 +461,7 @@ Utiliser uniquement le TTS du cœur (sans remplacement) : } ``` -Remplacer par ElevenLabs uniquement pour les appels (garder la valeur par défaut du cœur ailleurs) : +Redéfinir vers ElevenLabs uniquement pour les appels (conserver la valeur par défaut principale ailleurs) : ```json5 { @@ -392,7 +486,7 @@ Remplacer par ElevenLabs uniquement pour les appels (garder la valeur par défau } ``` -Remplacer uniquement le modèle OpenAI pour les appels (exemple de fusion profonde) : +Redéfinir uniquement le modèle OpenAI pour les appels (exemple de fusion en profondeur) : ```json5 { @@ -417,21 +511,21 @@ Remplacer uniquement le modèle OpenAI pour les appels (exemple de fusion profon ## Appels entrants -La politique entrante vaut par défaut `disabled`. Pour activer les appels entrants, définissez : +La politique entrante est `disabled` par défaut. Pour activer les appels entrants, définissez : ```json5 { inboundPolicy: "allowlist", allowFrom: ["+15550001234"], - inboundGreeting: "Hello! How can I help?", + inboundGreeting: "Bonjour ! Comment puis-je vous aider ?", } ``` -`inboundPolicy: "allowlist"` est un filtrage d’identifiant d’appelant à faible assurance. Le Plugin +`inboundPolicy: "allowlist"` est un filtrage à faible assurance basé sur l’identifiant de l’appelant. Le plugin normalise la valeur `From` fournie par le fournisseur et la compare à `allowFrom`. -La vérification du Webhook authentifie la livraison du fournisseur et l’intégrité de la charge utile, mais -elle ne prouve pas la propriété du numéro appelant PSTN/VoIP. Traitez `allowFrom` comme -un filtrage d’identifiant d’appelant, pas comme une identité forte de l’appelant. +La vérification du Webhook authentifie la livraison par le fournisseur et l’intégrité de la charge utile, mais +elle ne prouve pas la possession du numéro appelant PSTN/VoIP. Considérez `allowFrom` comme +un filtrage d’identifiant d’appelant, et non comme une identité forte de l’appelant. Les réponses automatiques utilisent le système d’agent. Ajustez avec : @@ -439,34 +533,34 @@ Les réponses automatiques utilisent le système d’agent. Ajustez avec : - `responseSystemPrompt` - `responseTimeoutMs` -### Contrat de sortie parlée +### Contrat de sortie vocale -Pour les réponses automatiques, Voice Call ajoute un contrat strict de sortie parlée au prompt système : +Pour les réponses automatiques, Voice Call ajoute un contrat strict de sortie vocale au prompt système : - `{"spoken":"..."}` Voice Call extrait ensuite le texte vocal de manière défensive : - Ignore les charges utiles marquées comme contenu de raisonnement/erreur. -- Analyse le JSON direct, le JSON encadré ou les clés `"spoken"` en ligne. +- Analyse du JSON direct, du JSON délimité, ou des clés `"spoken"` en ligne. - Revient au texte brut et supprime les paragraphes d’introduction probables de planification/métadonnées. -Cela permet de garder la lecture vocale centrée sur le texte destiné à l’appelant et d’éviter les fuites de texte de planification dans l’audio. +Cela permet de concentrer la lecture vocale sur le texte destiné à l’appelant et d’éviter que du texte de planification ne fuite dans l’audio. ### Comportement au démarrage de la conversation Pour les appels sortants `conversation`, la gestion du premier message est liée à l’état de lecture en direct : -- L’effacement de file pour interruption et la réponse automatique ne sont supprimés que pendant la lecture active du message d’accueil initial. -- Si la lecture initiale échoue, l’appel revient à `listening` et le message initial reste en file pour une nouvelle tentative. +- L’effacement de la file d’attente pour interruption et la réponse automatique sont supprimés uniquement pendant que le message d’accueil initial est en cours de lecture. +- Si la lecture initiale échoue, l’appel revient à l’état `listening` et le message initial reste en file d’attente pour une nouvelle tentative. - La lecture initiale pour le streaming Twilio démarre à la connexion du flux sans délai supplémentaire. -### Délai de grâce de déconnexion du flux Twilio +### Délai de grâce après déconnexion du flux Twilio Lorsqu’un flux média Twilio se déconnecte, Voice Call attend `2000ms` avant de terminer automatiquement l’appel : - Si le flux se reconnecte pendant cette fenêtre, la fin automatique est annulée. -- Si aucun flux n’est réenregistré après le délai de grâce, l’appel est terminé afin d’éviter les appels actifs bloqués. +- Si aucun flux n’est réenregistré après le délai de grâce, l’appel est terminé pour éviter des appels actifs bloqués. ## CLI @@ -484,9 +578,9 @@ openclaw voicecall expose --mode funnel ``` `latency` lit `calls.jsonl` depuis le chemin de stockage voice-call par défaut. Utilisez -`--file ` pour pointer vers un journal différent et `--last ` pour limiter l’analyse +`--file ` pour pointer vers un autre journal et `--last ` pour limiter l’analyse aux N derniers enregistrements (200 par défaut). La sortie inclut p50/p90/p99 pour la -latence de tour et les temps d’attente d’écoute. +latence des tours et les temps d’attente d’écoute. ## Outil d’agent @@ -501,7 +595,7 @@ Actions : - `end_call` (callId) - `get_status` (callId) -Ce dépôt fournit une documentation de Skill correspondante dans `skills/voice-call/SKILL.md`. +Ce dépôt inclut un document Skills correspondant dans `skills/voice-call/SKILL.md`. ## RPC Gateway @@ -512,7 +606,7 @@ Ce dépôt fournit une documentation de Skill correspondante dans `skills/voice- - `voicecall.end` (`callId`) - `voicecall.status` (`callId`) -## Voir aussi +## Liens associés - [Synthèse vocale](/fr/tools/tts) - [Mode Talk](/fr/nodes/talk) diff --git a/docs/fr/tools/media-overview.md b/docs/fr/tools/media-overview.md index 1e8a0b682..c5b0185b8 100644 --- a/docs/fr/tools/media-overview.md +++ b/docs/fr/tools/media-overview.md @@ -1,88 +1,89 @@ --- read_when: - - Vous cherchez une vue d’ensemble des capacités média - - Deciding which media provider to configure - - Comprendre le fonctionnement de la génération média asynchrone -summary: Page d’accueil unifiée pour la génération de médias, la compréhension et les capacités vocales -title: Vue d’ensemble des médias + - Vous cherchez un aperçu des capacités multimédias + - Choisir quel fournisseur multimédia configurer + - Comprendre le fonctionnement de la génération multimédia asynchrone +summary: Page d’accueil unifiée pour la génération, la compréhension et les capacités vocales des médias +title: Aperçu des médias x-i18n: - generated_at: "2026-04-24T07:37:57Z" + generated_at: "2026-04-24T09:51:46Z" model: gpt-5.4 provider: openai - source_hash: 469fb173ac3853011b8cd4f89f3ab97dd7d14e12e4e1d7d87e84de05d025a593 + source_hash: 39848c6104ebd4feeb37b233b70f3312fa076b535c3b3780336729eb9fdfa4e6 source_path: tools/media-overview.md workflow: 15 --- # Génération et compréhension des médias -OpenClaw génère des images, des vidéos et de la musique, comprend les médias entrants (images, audio, vidéo), et lit les réponses à voix haute avec la synthèse vocale. Toutes les capacités média sont pilotées par des outils : l’agent décide quand les utiliser en fonction de la conversation, et chaque outil n’apparaît que lorsqu’au moins un fournisseur de support est configuré. +OpenClaw génère des images, des vidéos et de la musique, comprend les médias entrants (images, audio, vidéo) et lit ses réponses à voix haute grâce à la synthèse vocale. Toutes les capacités multimédias sont pilotées par des outils : l’agent décide quand les utiliser en fonction de la conversation, et chaque outil n’apparaît que lorsqu’au moins un fournisseur sous-jacent est configuré. ## Capacités en un coup d’œil -| Capacité | Outil | Fournisseurs | Ce qu’il fait | -| -------------------- | ---------------- | ------------------------------------------------------------------------------------------- | ------------------------------------------------------- | -| Génération d’images | `image_generate` | ComfyUI, fal, Google, MiniMax, OpenAI, Vydra, xAI | Crée ou édite des images à partir de prompts texte ou de références | -| Génération de vidéo | `video_generate` | Alibaba, BytePlus, ComfyUI, fal, Google, MiniMax, OpenAI, Qwen, Runway, Together, Vydra, xAI | Crée des vidéos à partir de texte, d’images ou de vidéos existantes | -| Génération de musique | `music_generate` | ComfyUI, Google, MiniMax | Crée de la musique ou des pistes audio à partir de prompts texte | -| Synthèse vocale (TTS) | `tts` | ElevenLabs, Microsoft, MiniMax, OpenAI, xAI | Convertit les réponses sortantes en audio parlé | -| Compréhension des médias | (automatique) | Tout fournisseur de modèle compatible vision/audio, plus replis CLI | Résume les images, l’audio et la vidéo entrants | +| Capacité | Outil | Fournisseurs | Ce qu’il fait | +| -------------------- | ---------------- | -------------------------------------------------------------------------------------------- | --------------------------------------------------------- | +| Génération d’images | `image_generate` | ComfyUI, fal, Google, MiniMax, OpenAI, Vydra, xAI | Crée ou modifie des images à partir d’invites textuelles ou de références | +| Génération de vidéos | `video_generate` | Alibaba, BytePlus, ComfyUI, fal, Google, MiniMax, OpenAI, Qwen, Runway, Together, Vydra, xAI | Crée des vidéos à partir de texte, d’images ou de vidéos existantes | +| Génération musicale | `music_generate` | ComfyUI, Google, MiniMax | Crée de la musique ou des pistes audio à partir d’invites textuelles | +| Synthèse vocale (TTS) | `tts` | ElevenLabs, Google, Microsoft, MiniMax, OpenAI, xAI | Convertit les réponses sortantes en audio parlé | +| Compréhension des médias | (automatique) | Tout fournisseur de modèle compatible vision/audio, plus des solutions de secours CLI | Résume les images, l’audio et la vidéo entrants | -## Matrice de capacités des fournisseurs +## Matrice des capacités des fournisseurs -Ce tableau montre quels fournisseurs prennent en charge quelles capacités média sur la plateforme. +Ce tableau montre quels fournisseurs prennent en charge quelles capacités multimédias sur l’ensemble de la plateforme. -| Fournisseur | Image | Vidéo | Musique | TTS | STT / Transcription | Compréhension des médias | -| ----------- | ----- | ----- | ------- | --- | ------------------- | ------------------------ | -| Alibaba | | Yes | | | | | -| BytePlus | | Yes | | | | | -| ComfyUI | Yes | Yes | Yes | | | | -| Deepgram | | | | | Yes | | -| ElevenLabs | | | | Yes | Yes | | -| fal | Yes | Yes | | | | | -| Google | Yes | Yes | Yes | | | Yes | -| Microsoft | | | | Yes | | | -| MiniMax | Yes | Yes | Yes | Yes | | Yes | -| Mistral | | | | | Yes | | -| OpenAI | Yes | Yes | | Yes | Yes | Yes | -| Qwen | | Yes | | | | | -| Runway | | Yes | | | | | -| Together | | Yes | | | | | -| Vydra | Yes | Yes | | | | | -| xAI | Yes | Yes | | Yes | Yes | Yes | +| Fournisseur | Image | Vidéo | Musique | TTS | STT / Transcription | Voix en temps réel | Compréhension des médias | +| ----------- | ----- | ----- | ------- | --- | ------------------- | ------------------ | ------------------------ | +| Alibaba | | Oui | | | | | | +| BytePlus | | Oui | | | | | | +| ComfyUI | Oui | Oui | Oui | | | | | +| Deepgram | | | | | Oui | | | +| ElevenLabs | | | | Oui | Oui | | | +| fal | Oui | Oui | | | | | | +| Google | Oui | Oui | Oui | Oui | | Oui | Oui | +| Microsoft | | | | Oui | | | | +| MiniMax | Oui | Oui | Oui | Oui | | | | +| Mistral | | | | | Oui | | | +| OpenAI | Oui | Oui | | Oui | Oui | Oui | Oui | +| Qwen | | Oui | | | | | | +| Runway | | Oui | | | | | | +| Together | | Oui | | | | | | +| Vydra | Oui | Oui | | | | | | +| xAI | Oui | Oui | | Oui | Oui | | Oui | -La compréhension des médias utilise tout modèle compatible vision ou audio enregistré dans votre configuration de fournisseur. Le tableau ci-dessus met en avant les fournisseurs avec prise en charge dédiée de la compréhension des médias ; la plupart des fournisseurs LLM avec modèles multimodaux (Anthropic, Google, OpenAI, etc.) peuvent aussi comprendre les médias entrants lorsqu’ils sont configurés comme modèle de réponse actif. +La compréhension des médias utilise tout modèle compatible vision ou audio enregistré dans votre configuration de fournisseur. Le tableau ci-dessus met en avant les fournisseurs offrant une prise en charge dédiée de la compréhension des médias ; la plupart des fournisseurs de LLM avec des modèles multimodaux (Anthropic, Google, OpenAI, etc.) peuvent également comprendre les médias entrants lorsqu’ils sont configurés comme modèle de réponse actif. ## Fonctionnement de la génération asynchrone -La génération de vidéo et de musique s’exécute comme tâche en arrière-plan car le traitement fournisseur prend généralement de 30 secondes à plusieurs minutes. Lorsque l’agent appelle `video_generate` ou `music_generate`, OpenClaw soumet la requête au fournisseur, renvoie immédiatement un ID de tâche et suit le travail dans le journal des tâches. L’agent continue de répondre à d’autres messages pendant l’exécution du travail. Lorsque le fournisseur a terminé, OpenClaw réveille l’agent afin qu’il puisse republier le média terminé dans le canal d’origine. La génération d’images et le TTS sont synchrones et se terminent inline avec la réponse. +La génération de vidéos et de musique s’exécute comme une tâche en arrière-plan, car le traitement côté fournisseur prend généralement de 30 secondes à plusieurs minutes. Lorsque l’agent appelle `video_generate` ou `music_generate`, OpenClaw envoie la requête au fournisseur, renvoie immédiatement un ID de tâche et suit le travail dans le registre des tâches. L’agent continue à répondre aux autres messages pendant l’exécution de la tâche. Lorsque le fournisseur a terminé, OpenClaw réactive l’agent afin qu’il puisse publier le média finalisé dans le canal d’origine. La génération d’images et le TTS sont synchrones et se terminent dans le flux de la réponse. Deepgram, ElevenLabs, Mistral, OpenAI et xAI peuvent tous transcrire l’audio entrant -via le chemin batch `tools.media.audio` lorsqu’ils sont configurés. Deepgram, +via le chemin par lots `tools.media.audio` lorsqu’ils sont configurés. Deepgram, ElevenLabs, Mistral, OpenAI et xAI enregistrent également des fournisseurs STT en streaming pour Voice Call, -de sorte que l’audio téléphonique live peut être transmis au fournisseur sélectionné -sans attendre un enregistrement terminé. +afin que l’audio téléphonique en direct puisse être transmis au fournisseur sélectionné +sans attendre la fin d’un enregistrement. -OpenAI se mappe aux surfaces OpenClaw de génération d’images, vidéo, TTS batch, STT batch, STT -en streaming Voice Call, voix realtime et embeddings de mémoire. xAI se mappe actuellement -aux surfaces OpenClaw d’image, vidéo, recherche, exécution de code, TTS batch, STT batch, -et STT en streaming Voice Call. La voix realtime xAI est une capacité amont, -mais elle n’est pas enregistrée dans OpenClaw tant que le contrat partagé de voix realtime -ne peut pas la représenter. +Google correspond aux surfaces image, vidéo, musique, TTS par lots, voix en temps réel côté backend +et compréhension des médias d’OpenClaw. OpenAI correspond aux surfaces image, +vidéo, TTS par lots, STT par lots, STT en streaming pour Voice Call, voix en temps réel côté backend, +et embeddings de mémoire d’OpenClaw. xAI correspond actuellement aux surfaces image, vidéo, +recherche, exécution de code, TTS par lots, STT par lots et STT en streaming pour Voice Call +d’OpenClaw. La voix xAI Realtime est actuellement une capacité amont, mais elle n’est pas +enregistrée dans OpenClaw tant que le contrat partagé de voix en temps réel ne peut pas la représenter. ## Liens rapides -- [Génération d’images](/fr/tools/image-generation) -- générer et éditer des images -- [Génération de vidéo](/fr/tools/video-generation) -- text-to-video, image-to-video et video-to-video -- [Génération de musique](/fr/tools/music-generation) -- créer de la musique et des pistes audio +- [Génération d’images](/fr/tools/image-generation) -- générer et modifier des images +- [Génération de vidéos](/fr/tools/video-generation) -- texte-vers-vidéo, image-vers-vidéo et vidéo-vers-vidéo +- [Génération musicale](/fr/tools/music-generation) -- créer de la musique et des pistes audio - [Synthèse vocale](/fr/tools/tts) -- convertir les réponses en audio parlé - [Compréhension des médias](/fr/nodes/media-understanding) -- comprendre les images, l’audio et la vidéo entrants -## Associé +## Lié - [Génération d’images](/fr/tools/image-generation) -- [Génération de vidéo](/fr/tools/video-generation) -- [Génération de musique](/fr/tools/music-generation) +- [Génération de vidéos](/fr/tools/video-generation) +- [Génération musicale](/fr/tools/music-generation) - [Synthèse vocale](/fr/tools/tts)