Zoom Video SDK UI Toolkit
Référence de base pour la boîte à outils UI du SDK Vidéo Zoom prédéfinie sur le web. Préférez choose-zoom-approach en premier si l'utilisateur pourrait encore avoir besoin du Meeting SDK à la place.
Documentation officielle : https://developers.zoom.us/docs/video-sdk/web/ui-toolkit/ Référence API : https://marketplacefront.zoom.us/sdk/uitoolkit/web/ Paquet NPM : https://www.npmjs.com/package/@zoom/videosdk-zoom-ui-toolkit Démo en direct : https://sdk.zoom.com/videosdk-uitoolkit
Liens rapides
Nouveau à UI Toolkit ? Suivez ce chemin :
- Quick Start - Soyez opérationnel en 5 minutes (voir ci-dessous)
- JWT Authentication - Génération de jetons côté serveur (obligatoire)
- Composite vs Components - Choisissez votre approche
- Framework Integration - Modèles React, Vue, Angular, Next.js
- Integrated Index - Voir la section ci-dessous dans ce fichier
Vous rencontrez des problèmes ?
- Session ne se joint pas → Vérifiez JWT Authentication (problème le plus courant)
- Erreur de dépendance peer React 18 → Voir section Installation
- CSS ne se charge pas → Voir Troubleshooting
- Composants ne s'affichent pas → Vérifiez Component Lifecycle
- Commencez par les vérifications préalables → 5-Minute Runbook
Vue d'ensemble
La boîte à outils UI du SDK Vidéo Zoom est une bibliothèque UI vidéo prédéfinie qui rend des expériences complètes de vidéoconférence avec un code minimal. Contrairement au SDK Vidéo brut, la boîte à outils UI fournit :
- ✅ UI prête à l'emploi - Interface vidéo professionnelle dès le départ
- ✅ Zéro code UI - Pas besoin de construire des mises en page vidéo, des contrôles ou une gestion des participants
- ✅ Indépendant du framework - Fonctionne avec React, Vue, Angular, Next.js, vanilla JS
- ✅ Hautement personnalisable - Choisissez les fonctionnalités à activer, personnalisez les thèmes
- ✅ Fonctionnalités intégrées - Chat, partage d'écran, paramètres, arrière-plans virtuels inclus
Quand utiliser UI Toolkit :
- Vous voulez une solution vidéo complète rapidement
- Vous avez besoin de la cohérence de l'interface utilisateur de Zoom
- Vous ne voulez pas construire une interface vidéo personnalisée
- Vous avez besoin de fonctionnalités standard (chat, partage, participants)
Quand utiliser le SDK Vidéo brut à la place :
- Vous avez besoin d'un contrôle UI entièrement personnalisé
- Vous construisez une expérience vidéo non standard
- Vous avez besoin d'accès aux données vidéo/audio brutes
- Vous voulez construire votre propre pipeline de rendu
Installation
npm install @zoom/videosdk-zoom-ui-toolkit jsrsasign
npm install -D @types/jsrsasign
Remarque : Le support de React dépend de la version de la boîte à outils UI. Vérifiez les dépendances peer du paquet pour votre version installée (React 18 est généralement requis).
Quick Start
Utilisation basique (Vanilla JS)
import uitoolkit from "@zoom/videosdk-zoom-ui-toolkit";
import "@zoom/videosdk-ui-toolkit/dist/videosdk-zoom-ui-toolkit.css";
const container = document.getElementById("sessionContainer");
const config = {
videoSDKJWT: "your_jwt_token",
sessionName: "my-session",
userName: "John Doe",
sessionPasscode: "",
features: ["video", "audio", "share", "chat", "users", "settings"],
};
uitoolkit.joinSession(container, config);
uitoolkit.onSessionJoined(() => {
console.log("Session joined");
});
uitoolkit.onSessionClosed(() => {
console.log("Session closed");
});
Intégration Next.js / React
'use client';
import { useEffect, useRef } from 'react';
export default function VideoSession({ jwt, sessionName, userName }) {
const containerRef = useRef<HTMLDivElement>(null);
const uitoolkitRef = useRef<any>(null);
useEffect(() => {
let isMounted = true;
const init = async () => {
const uitoolkitModule = await import('@zoom/videosdk-zoom-ui-toolkit');
const uitoolkit = uitoolkitModule.default;
uitoolkitRef.current = uitoolkit;
// If TypeScript complains about CSS imports, configure your app to allow them
// (for example via a global `declare module \"*.css\";`), or import the CSS from
// a global entrypoint (Next.js layout/_app) instead of inlining here.
await import('@zoom/videosdk-ui-toolkit/dist/videosdk-zoom-ui-toolkit.css');
if (!isMounted || !containerRef.current) return;
const config: any = {
videoSDKJWT: jwt,
sessionName: sessionName,
userName: userName,
sessionPasscode: '',
features: ['video', 'audio', 'share', 'chat', 'users', 'settings'],
};
uitoolkit.joinSession(containerRef.current, config);
uitoolkit.onSessionJoined(() => console.log('Joined'));
uitoolkit.onSessionClosed(() => console.log('Closed'));
};
init();
return () => {
isMounted = false;
if (uitoolkitRef.current && containerRef.current) {
try {
uitoolkitRef.current.closeSession(containerRef.current);
} catch (e) {}
}
};
}, [jwt, sessionName, userName]);
return <div ref={containerRef} style={{ width: '100%', height: '100vh' }} />;
}
Fonctionnalités disponibles
| Fonctionnalité | Description |
|---|---|
video |
Activer la mise en page vidéo et envoyer/recevoir la vidéo |
audio |
Afficher le bouton audio, envoyer/recevoir l'audio |
share |
Partage d'écran |
chat |
Messagerie en session |
users |
Liste des participants |
settings |
Sélection des appareils, arrière-plan virtuel |
preview |
Aperçu de la caméra/du micro avant la participation |
recording |
Enregistrement cloud (forfait payant) |
leave |
Bouton quitter/terminer la session |
Troubleshooting
- troubleshooting/common-issues.md - CSS, SSR, JWT/session join, limites de personnalisation
Génération de JWT Token (côté serveur)
Obligatoire : Générez les JWT tokens sur votre serveur, ne posez jamais le secret SDK côté client.
Route API Node.js / Next.js
import { NextRequest, NextResponse } from 'next/server';
import { KJUR } from 'jsrsasign';
const ZOOM_VIDEO_SDK_KEY = process.env.ZOOM_VIDEO_SDK_KEY;
const ZOOM_VIDEO_SDK_SECRET = process.env.ZOOM_VIDEO_SDK_SECRET;
export async function POST(request: NextRequest) {
const { sessionName, role, userName } = await request.json();
if (!sessionName || role === undefined) {
return NextResponse.json({ error: 'Missing params' }, { status: 400 });
}
const iat = Math.floor(Date.now() / 1000);
const exp = iat + 60 * 60 * 2; // 2 hours
const oHeader = { alg: 'HS256', typ: 'JWT' };
const oPayload = {
app_key: ZOOM_VIDEO_SDK_KEY,
role_type: role, // 0 = participant, 1 = host
tpc: sessionName,
version: 1,
iat,
exp,
user_identity: userName || 'User',
};
const signature = KJUR.jws.JWS.sign(
'HS256',
JSON.stringify(oHeader),
JSON.stringify(oPayload),
ZOOM_VIDEO_SDK_SECRET
);
return NextResponse.json({ signature });
}
Champs de charge utile JWT
| Champ | Obligatoire | Description |
|---|---|---|
app_key |
Oui | Votre clé Video SDK |
role_type |
Oui | 0 = participant, 1 = host |
tpc |
Oui | Nom de session/sujet |
version |
Oui | Toujours 1 |
iat |
Oui | Émis à (timestamp Unix) |
exp |
Oui | Expiration (timestamp Unix) |
user_identity |
Non | Identifiant utilisateur |
Référence API
Méthodes principales
uitoolkit.joinSession(container, config);
uitoolkit.closeSession(container);
Écouteurs d'événements
uitoolkit.onSessionJoined(callback);
uitoolkit.onSessionClosed(callback);
uitoolkit.offSessionJoined(callback);
uitoolkit.offSessionClosed(callback);
Méthodes de composant
uitoolkit.showChatComponent(container);
uitoolkit.hideChatComponent(container);
uitoolkit.showUsersComponent(container);
uitoolkit.hideUsersComponent(container);
uitoolkit.showControlsComponent(container);
uitoolkit.hideControlsComponent(container);
uitoolkit.showSettingsComponent(container);
uitoolkit.hideSettingsComponent(container);
uitoolkit.hideAllComponents();
Utilisation CDN (aucune étape de construction)
<link rel="stylesheet" href="https://source.zoom.us/uitoolkit/2.3.5-1/videosdk-zoom-ui-toolkit.css" />
<script src="https://source.zoom.us/uitoolkit/2.3.5-1/videosdk-zoom-ui-toolkit.min.umd.js"></script>
<div id="sessionContainer"></div>
<script>
const uitoolkit = window.UIToolkit;
uitoolkit.joinSession(document.getElementById('sessionContainer'), {
videoSDKJWT: 'your_jwt',
sessionName: 'my-session',
userName: 'User',
features: ['video', 'audio', 'chat']
});
</script>
Next.js avec basePath
Lors du déploiement de Next.js sous un sous-chemin :
// next.config.ts
const nextConfig = {
basePath: "/your-app-path",
assetPrefix: "/your-app-path",
};
Récupérez les routes API avec le chemin complet :
fetch('/your-app-path/api/token', { ... })
Prérequis
- Identifiants Zoom Video SDK de Zoom Marketplace
- React version compatible avec votre paquet UI Toolkit installé (vérifiez les dépendances peer ; React 18 est courant)
- Génération JWT côté serveur (ne posez jamais le secret SDK)
- Navigateur moderne avec support WebRTC
Support des navigateurs
| Navigateur | Version |
|---|---|
| Chrome | 78+ |
| Firefox | 76+ |
| Safari | 14.1+ |
| Edge | 79+ |
Problèmes courants
| Problème | Solution |
|---|---|
Erreur peer react@"^18.0.0" |
Utilisez la version de React requise par le paquet UI Toolkit installé (vérifiez les dépendances peer ; React 18 est courant) |
| Erreur TypeScript d'importation CSS | Configurez la gestion TS/CSS (préférez une déclaration de module global *.css) ; évitez @ts-ignore sauf dans les démos jetables |
| Erreur de type Config | Typez config comme any |
| API retourne HTML pas JSON | Vérifiez basePath dans l'URL de fetch |
Ressources
- GitHub : https://github.com/zoom/videosdk-zoom-ui-toolkit-web
- Documentation UI Toolkit : https://developers.zoom.us/docs/video-sdk/web/ui-toolkit/
- Exemple de endpoint Auth : https://github.com/zoom/videosdk-auth-endpoint-sample
- Marketplace : https://marketplace.zoom.us/
Index intégré
Cette section a été migrée depuis SKILL.md.
Navigation complète pour toute la documentation UI Toolkit.
📚 Commencez ici
Nouveau à UI Toolkit ? Suivez ce chemin d'apprentissage :
- SKILL.md - Vue d'ensemble principale et quick start
- 5-Minute Runbook - Vérifications préalables avant le débogage approfondi
- Quick Start Guide - Code fonctionnel en 5 minutes (voir skill.md)
- JWT Authentication - Génération de jetons côté serveur (voir skill.md)
- Choose Your Mode - Composite vs Components (voir skill.md)
🎯 Concepts fondamentaux
Comprendre comment fonctionne UI Toolkit :
- Composite vs Components - Deux façons d'utiliser UI Toolkit (voir skill.md)
- UI Toolkit Architecture - Comment il enveloppe Video SDK en interne
- Feature Configuration - Compréhension de la structure featuresOptions
- Session Lifecycle - Flux Join → Active → Leave/Close → Destroy
📖 Guides complets
Démarrage
- Installation - Installation NPM et configuration React 18 (voir skill.md)
- Quick Start - Composite - Interface utilisateur complète en un conteneur (voir skill.md)
- Quick Start - Components - Éléments UI individuels (voir skill.md)
- JWT Authentication - Génération de jetons côté serveur (voir skill.md)
Intégration du framework
- React Integration - Patterns Hooks et useEffect (voir skill.md)
- Vue.js Integration - Composition API et Options API (voir skill.md)
- Angular Integration - Cycle de vie des composants (voir skill.md)
- Next.js Integration - App Router, Server Components (voir skill.md)
- Vanilla JavaScript - Utilisation sans framework (voir skill.md)
Sujets avancés
- Component Lifecycle - Patterns de montage, démontage, nettoyage
- Event Listeners - Réagir aux événements de session
- Session Management - Contrôle programmatique
- Quality Statistics - Surveiller la qualité de la connexion
- Custom Themes - Personnalisation de thème
- Virtual Backgrounds - Images d'arrière-plan personnalisées
📚 Référence API
Documentation API complète :
-
Core Methods (voir skill.md)
joinSession()- Démarrer une session vidéocloseSession()- Terminer la session et supprimer l'interface utilisateurdestroy()- Nettoyer l'instance UI ToolkitleaveSession()- Quitter sans détruire l'interface utilisateur
-
Component Methods (voir skill.md)
showControlsComponent()- Afficher la barre de contrôleshowChatComponent()- Afficher le panneau de chatshowUsersComponent()- Afficher la liste des participantsshowSettingsComponent()- Afficher le panneau des paramètreshideAllComponents()- Masquer tous les composants
-
Event Listeners (voir skill.md)
onSessionJoined()- Session rejointe avec succèsonSessionClosed()- Session terminéeonSessionDestroyed()- UI Toolkit détruitonViewTypeChange()- Mode de vue modifiéon()- S'abonner aux événements Video SDKoff()- Se désabonner des événements
-
Information Methods (voir skill.md)
getSessionInfo()- Obtenir les détails de la sessiongetCurrentUserInfo()- Obtenir l'utilisateur actuelgetAllUser()- Obtenir tous les participantsgetClient()- Obtenir le client Video SDK sous-jacentversion()- Obtenir les informations de version
-
Control Methods (voir skill.md)
changeViewType()- Changer le mode de vuemirrorVideo()- Inverser la vidéo personnelleisSupportCustomLayout()- Vérifier le support du dispositif
-
Statistics Methods (voir skill.md)
subscribeAudioStatisticData()- Statistiques de qualité audiosubscribeVideoStatisticData()- Statistiques de qualité vidéosubscribeShareStatisticData()- Statistiques de qualité de partage
🔧 Configuration
-
Feature Configuration (voir skill.md)
- Structure
featuresOptions - Options audio/vidéo
- Chat, Users, Settings
- Arrière-plan virtuel
- Recording, Captions (fonctionnalités payantes)
- Personnalisation de thème
- Modes de vue
- Structure
-
Session Configuration (voir skill.md)
- Obligatoire :
videoSDKJWT,sessionName,userName - Optionnel :
sessionPasscode,sessionIdleTimeoutMins - Mode débogage
- Endpoint web
- Paramètres de langue
- Obligatoire :
⚠️ Troubleshooting
Problèmes courants
- Erreur de dépendance peer React 18
- JWT token invalide
- CSS ne se charge pas
- Composants ne s'affichent pas
- Échecs de jonction de session
Voir : troubleshooting/common-issues.md
Problèmes spécifiques au framework
- React : SSR, hydration, nettoyage
- Vue : Réactivité, cycle de vie
- Angular : Imports de module, AOT
- Next.js : App Router, basePath
Problèmes de session
- Échecs d'authentification
- Problèmes de connexion
- Vidéo/audio ne fonctionnant pas
- Problèmes de partage d'écran
📦 Exemples d'applications
Dépôts officiels :
| Framework | Dépôt | Fonctionnalités clés |
|---|---|---|
| React | videosdk-zoom-ui-toolkit-react-sample | Hooks, TypeScript |
| Vue.js | videosdk-zoom-ui-toolkit-vuejs-sample | Composition API |
| Angular | videosdk-zoom-ui-toolkit-angular-sample | Services, Guards |
| JavaScript | videosdk-zoom-ui-toolkit-javascript-sample | Vanilla JS |
| Auth Endpoint | videosdk-auth-endpoint-sample | Node.js JWT |
🌐 Ressources externes
- Documentation officielle : https://developers.zoom.us/docs/video-sdk/web/ui-toolkit/
- Référence API : https://marketplacefront.zoom.us/sdk/uitoolkit/web/
- Paquet NPM : https://www.npmjs.com/package/@zoom/videosdk-zoom-ui-toolkit
- Marketplace : https://marketplace.zoom.us/
- Forum développeur : https://devforum.zoom.us/
- Démo en direct : https://sdk.zoom.com/videosdk-uitoolkit
- Changelog : https://developers.zoom.us/changelog/ui-toolkit/web/
🎓 Chemin d'apprentissage
Débutant
- Lire la vue d'ensemble SKILL.md
- Suivre Quick Start - Composite
- Générer JWT sur le serveur
- Rejoindre votre première session
- Explorer les fonctionnalités disponibles
Intermédiaire
- Essayer Component Mode
- Ajouter des écouteurs d'événements
- Personnaliser le thème
- Ajouter des arrière-plans virtuels
- Intégrer avec votre framework
Avancé
- Accéder au Video SDK sous-jacent
- S'abonner aux statistiques de qualité
- Gérer tous les cas limites
- Implémenter des mises en page personnalisées
- Construire une application prête pour la production
📋 Carte de référence rapide
Exemple de travail minimal
import uitoolkit from "@zoom/videosdk-zoom-ui-toolkit";
import "@zoom/videosdk-ui-toolkit/dist/videosdk-zoom-ui-toolkit.css";
const config = {
videoSDKJWT: "YOUR_JWT",
sessionName: "test-session",
userName: "User",
featuresOptions: {
video: { enable: true },
audio: { enable: true }
}
};
uitoolkit.joinSession(document.getElementById("container"), config);
uitoolkit.onSessionJoined(() => console.log("Joined"));
uitoolkit.onSessionClosed(() => uitoolkit.destroy());
Règles à retenir
- ✅ Toujours générer JWT côté serveur
- ✅ Toujours appeler
destroy()au nettoyage - ✅ Toujours utiliser React 18 (pas 17/19)
- ✅ Toujours importer le fichier CSS
- ❌ Jamais exposer le secret SDK côté client
- ❌ Jamais ignorer le nettoyage
onSessionClosed - ❌ Jamais appeler des composants avant
joinSession
📞 Support
- Forum développeur : https://devforum.zoom.us/
- Support développeur : https://developers.zoom.us/support/
- Support Premier : https://explore.zoom.us/en/support-plans/developer/
Navigation : ← Retour à SKILL.md
Variables d'environnement
- Voir references/environment-variables.md pour les clés
.envstandardisées et où trouver chaque valeur.