Global Events
SDK notifies the business layer of state changes via events. Listen with classroom.on(TEvent.XXX, handler).
Usage
typescript
import { TencentClassroom, TEvent } from '@tencent-classroom/sdk';
classroom.on(TEvent.KICK_OUT, ({ reason, message }) => {
alert(message);
});
classroom.once(TEvent.CLASS_START, () => {
console.log('Class started');
});
await classroom.waitFor(TEvent.JOIN_CLASS);Event List
Classroom lifecycle
| Constant | Event Value | Description |
|---|---|---|
TEvent.JOIN_CLASS | joinClass | Join succeeded (all modules ready) |
TEvent.LEAVE_CLASS | leaveClass | Leave completed (all resources released) |
TEvent.BEFORE_LEAVE | beforeLeave | About to leave |
TEvent.AFTER_LEAVE | afterLeave | After leave completed |
TEvent.CLASS_INFO_MODIFIED | classInfoModified | Class info modified by server |
TEvent.CLASS_START | classStart | Class started (all participants notified) |
TEvent.CLASS_END | classEnd | Class ended (all participants notified) |
TEvent.KICK_OUT | kickOut | Kicked from classroom (payload includes reason and localized message) |
TEvent.CLASS_INFO_CHANGE_REQUESTED | classInfoChangeRequested | Class info change request (needs local confirmation) |
TEvent.CLASS_INFO_UPDATED | classInfoUpdated | Class info updated (after classInfo$ sync) |
TEvent.CLASS_TASK_CHANGE | classTaskChange | Class whiteboard task list changed |
TEvent.TASK_UPDATED | taskUpdated | Single business task updated (after dedup; carries full TaskInfo) |
TEvent.ENABLE_STAGE_CHANGED | enableStageChanged | Hand-raise stage feature toggle changed (synced to all participants after teacher action). |
TEvent.JOIN_PROGRESS_CHANGED | joinProgressChanged | Join flow phase changed (fires every time JoinProgress enum value changes). |
Member events
| Constant | Event Value | Description |
|---|---|---|
TEvent.MEMBER_JOIN | memberJoin | Member joined (includes full MemberInfo) |
TEvent.MEMBER_LEAVE | memberLeave | Member left (includes full MemberInfo) |
TEvent.MEMBER_STAGE_UP | memberStageUp | Member went on stage (stage=true) |
TEvent.MEMBER_STAGE_DOWN | memberStageDown | Member left stage (stage=false) |
TEvent.MEMBER_DEVICE_CHANGE | memberDeviceChange | Member device state changed (driven by change_member_stream signal; triggers MediaRenderer refresh). |
TEvent.SELF_ONLINE | selfOnline | Self came online (confirmed in member list) |
TEvent.SELF_OFFLINE | selfOffline | Self went offline (may trigger reconnect) |
Permission events
| Constant | Event Value | Description |
|---|---|---|
TEvent.PERMISSION_UPDATE | permissionUpdate | Permission list batch updated |
TEvent.MY_PERMISSION_CHANGE | myPermissionChange | My own permissions changed |
TEvent.SCHOOL_INFO_READY | schoolInfoReady | School info loaded (includes package and watermark config) |
Device events
| Constant | Event Value | Description |
|---|---|---|
TEvent.DEVICE_CHANGE | deviceChange | Local device hot-plug event (camera/mic/speaker connected or disconnected). |
RTC events
| Constant | Event Value | Description |
|---|---|---|
TEvent.USER_ENTER_ROOM | userEnterRoom | Remote user entered TRTC room |
TEvent.USER_LEAVE_ROOM | userLeaveRoom | Remote user left TRTC room |
TEvent.USER_VIDEO_AVAILABLE | userVideoAvailable | Remote user video stream available/unavailable (true=camera on, false=camera off). |
TEvent.USER_AUDIO_AVAILABLE | userAudioAvailable | Remote user audio stream available/unavailable. |
TEvent.USER_AUDIO_MUTE | userAudioMute | Remote user audio mute/unmute (active mute, different from 'available'). |
TEvent.USER_SUB_STREAM_AVAILABLE | userSubStreamAvailable | Remote user sub-stream (screen share) available/unavailable |
TEvent.LOCAL_VIDEO_STATS | localVideoStats | Local video stats (fires every ~2s) |
TEvent.LOCAL_AUDIO_STATS | localAudioStats | Local audio stats |
TEvent.REMOTE_VIDEO_STATS | remoteVideoStats | Remote video stats |
TEvent.REMOTE_AUDIO_STATS | remoteAudioStats | Remote audio stats |
TEvent.SCREEN_SHARE_STARTED | screenShareStarted | Local screen share started |
TEvent.SCREEN_SHARE_STOPPED | screenShareStopped | Local screen share stopped |
TEvent.REMOTE_SCREEN_SHARE_STARTED | remoteScreenShareStarted | Remote user started screen share |
TEvent.REMOTE_SCREEN_SHARE_STOPPED | remoteScreenShareStopped | Remote user stopped screen share |
IM events
| Constant | Event Value | Description |
|---|---|---|
TEvent.RECV_MESSAGE | recvMessage | New chat message received |
TEvent.RECV_CUSTOM_MSG | recvCustomMsg | Raw custom group message received |
TEvent.RECV_CUSTOM_IM_MSG | recvCustomImMsg | Custom IM message received (wrapped as Message) |
TEvent.MESSAGE_REVOKED | messageRevoked | Message revoked (msgId is the revoked message ID) |
TEvent.IM_CONNECTED | imConnected | IM connected |
TEvent.IM_DISCONNECTED | imDisconnected | IM disconnected (reconnecting or unreachable) |
TEvent.IM_KICKED | imKicked | IM account logged in elsewhere, kicked on this end |
TEvent.IM_SIG_EXPIRED | imSigExpired | IM signature expired (rejoin required after refreshing sig) |
TEvent.IM_CMD_MESSAGE | imCmdMessage | Signaling group command message (internal) |
TEvent.IM_C2C_ADMIN_MSG | imC2CAdminMsg | Backend C2C admin control message (internal) |
Whiteboard events
| Constant | Event Value | Description |
|---|---|---|
TEvent.BOARD_ERROR | boardError | Whiteboard runtime error (code 1/3/8 etc.; fires after retries exhausted; show error UI). |
TEvent.BOARD_SIG_ERROR | boardSigError | Whiteboard auth error (code=7 sig expired / code=11 sig invalid; rejoin required). |
TEvent.BOARD_READY | boardReady | Whiteboard ready (history synced; boardReady$=true; page/tool operations now allowed). |
TEvent.BOARD_INIT | boardInit | Whiteboard DOM mounted (TEB_INIT; syncing history) |
TEvent.BOARD_WARN | boardWarn | Non-fatal whiteboard warning (e.g., code=10 page limit reached) |
TEvent.BOARD_IMAGE_STATUS_CHANGED | boardImageStatusChanged | Whiteboard image load status changed |
TEvent.BOARD_H5PPT_STATUS_CHANGED | boardH5PptStatusChanged | H5 PPT animation status changed |
TEvent.BOARD_H5FILE_STATUS_CHANGED | boardH5FileStatusChanged | H5 file status changed |
TEvent.BOARD_MEDIA_STATUS_CHANGED | boardMediaStatusChanged | Whiteboard PPT media playback status (TEB_H5PPT_MEDIA_STATUS_CHANGED). |
TEvent.BOARD_VIDEO_STATUS_CHANGED | boardVideoStatusChanged | Whiteboard embedded video status changed |
TEvent.BOARD_AUDIO_STATUS_CHANGED | boardAudioStatusChanged | Whiteboard audio status changed |
TEvent.BOARD_ADD_TRANSCODE_FILE | boardAddTranscodeFile | Transcoded courseware loaded into whiteboard (TEB_ADDTRANSCODEFILE; returns internal fileId). |
Courseware events
| Constant | Event Value | Description |
|---|---|---|
TEvent.DOC_LOAD_COURSEWARE | docLoadCourseware | Internal event for loading courseware to whiteboard (DocModule → BoardModule; decoupling). |
TEvent.DOC_PLAY_AUDIO | docPlayAudio | Audio courseware play command (SDK has no built-in player; UIKit implements playback). |
TEvent.DOC_LIST_UPDATED | docListUpdated | Courseware list updated (after upload/delete/join; data.documents is the complete list). |
TEvent.DOC_TRANSCODE_PROGRESS | docTranscodeProgress | Transcode progress (internal) |
TEvent.DOC_UPLOAD_PROGRESS | docUploadProgress | Courseware upload/transcode progress update (covers full cycle: COS upload → server transcode → done). |
Media playback events
| Constant | Event Value | Description |
|---|---|---|
TEvent.VOD_START | vodStart | VOD started playing (payload includes url) |
TEvent.VOD_PAUSE | vodPause | VOD paused |
TEvent.VOD_RESUME | vodResume | VOD resumed |
TEvent.VOD_STOP | vodStop | VOD stopped |
TEvent.VOD_END | vodEnd | VOD playback ended |
TEvent.VOD_SEEK | vodSeek | VOD seeked (payload includes time in seconds) |
TEvent.MUSIC_START | musicStart | Background music started (payload includes url) |
TEvent.MUSIC_STOP | musicStop | Background music stopped |
TEvent.MUSIC_PAUSE | musicPause | Background music paused |
TEvent.MUSIC_RESUME | musicResume | Background music resumed |
TEvent.MUSIC_SEEK | musicSeek | Background music seeked |
Subtitle events
| Constant | Event Value | Description |
|---|---|---|
TEvent.SUBTITLE_UPDATE | subtitleUpdate | Received real-time subtitle data (from TRTC custom message or cloud ASR). |
TEvent.RTC_CUSTOM_MSG | rtcCustomMsg | TRTC custom msg relay (internal) |
跑马灯事件 / Watermark and marquee events
| Constant | Event Value | Description |
|---|---|---|
TEvent.WATERMARK_UPDATE | watermarkUpdate | Watermark config changed (triggered by setWatermarkConfig or server push). |
TEvent.MARQUEE_UPDATE | marqueeUpdate | Marquee config changed (triggered by setMarqueeConfig or server push). |
Network diagnostic events
| Constant | Event Value | Description |
|---|---|---|
TEvent.NETWORK_SPEED_TEST_RESULT | networkSpeedTestResult | TRTC speed test result (fires after checkMediaServerConnection completes). |
Network monitor events
| Constant | Event Value | Description |
|---|---|---|
TEvent.NETWORK_BROKEN | networkBroken | Network broken |
TEvent.NETWORK_WEAK | networkWeak | Network weak (quality may degrade) |
TEvent.NETWORK_RECOVERED | networkRecovered | Network recovered |
上台事件 / Hand-up and stage events
| Constant | Event Value | Description |
|---|---|---|
TEvent.HAND_UP | handUp | A member raised/lowered hand |
TEvent.ASK_STAGE_REQUEST | askStageRequest | Student sent ask-stage request (teacher side) |
TEvent.ASK_STAGE_ACCEPTED | askStageAccepted | Teacher approved my ask-stage request (student side) |
TEvent.ASK_STAGE_REJECTED | askStageRejected | Teacher rejected my ask-stage request (student side) |
TEvent.ASK_STAGE_CANCELLED | askStageCancelled | Teacher cancelled invite list; I was removed |
TEvent.ASK_STAGE_UPDATE | askStageUpdate | Ask-stage list updated (v1/stage signal) |
TEvent.STAGE_LOOP_ACTION | stageLoopAction | Stage loop action notification (v1/stage_loop signal) |
C2C control events
| Constant | Event Value | Description |
|---|---|---|
TEvent.RECV_MEMBER_ACTION | recvMemberAction | Teacher performed member action (student side) |
TEvent.QUESTION_ANSWERED | questionAnswered | Student answered a quiz question (teacher side) |
TEvent.TRANSLATE_MSG | translateMsg | Translation result callback (includes original and translated text) |
Quiz events
| Constant | Event Value | Description |
|---|---|---|
TEvent.QUESTION_BEGIN | questionBegin | Quiz started (all participants notified) |
TEvent.QUESTION_ABANDON | questionAbandon | Quiz abandoned (no scoring; ended immediately) |
TEvent.QUESTION_CLOSE | questionClose | Quiz closed (stats viewable; still accepting answers briefly) |
TEvent.QUESTION_END | questionEnd | Quiz fully ended (status reset to idle) |
AI classroom
| Constant | Event Value | Description |
|---|---|---|
TEvent.AI_CLASS_READY | aiClassReady | AI classroom ready (taskId is AI task ID) |
AV permission changes
| Constant | Event Value | Description |
|---|---|---|
TEvent.AV_ADD | avAdd | New AV permission entry added |
TEvent.AV_UPDATE | avUpdate | AV permission entry updated |
TEvent.AV_REMOVE | avRemove | AV permission entry removed (member left stage) |
TEvent.ADJUST_HEARTBEAT | adjustHeartbeat | Adjust heartbeat interval (internal) |
TEvent.RESTORE_HEARTBEAT | restoreHeartbeat | Restore default heartbeat interval (internal) |
TEvent.BURST_HEARTBEAT | burstHeartbeat | Burst heartbeat (PermissionModule self-offline → RoomModule) |
TEvent.CONFIRM_ACTION | confirmAction | User confirmation required (e.g., invite-stage dialog) (internal) |
TEvent.SILENCE_USER | silenceUser | User silenced/unsilenced (MemberModule → ImModule; triggers silenceUserOnMsgList) (internal) |
TEvent.HEARTBEAT_TASK_SEQ | heartbeatTaskSeq | Heartbeat task seq sync (internal) |
TEvent.HEARTBEAT_PERMISSION_SEQ | heartbeatPermissionSeq | Heartbeat permission seq sync (internal) |
TEvent.PERMISSION_REVOKED | permissionRevoked | Permission revoked (PermissionModule → RtcModule; triggers device stop) (internal) |
TEvent.MUTE_ALL_CHANGED | muteAllChanged | All-mute changed (ClassModule → RtcModule; stops local mic on mute) (internal) |
TEvent.MUTE_VIDEO_ALL_CHANGED | muteVideoAllChanged | All-video-mute changed (ClassModule → RtcModule; stops local camera on mute) (internal) |
TEvent.KICKOUT_CMD | kickoutCmd | KickOut signal (internal) |
TEvent.KICKOUT_FOREVER_CMD | kickoutForeverCmd | KickOutForever signal (internal) |
TEvent.PERMISSION_SYNC | permissionSync | Permission list sync (internal) |
TEvent.SET_MUSIC_VOLUME | setMusicVolume | Set music volume (internal) |
Mobile events
| Constant | Event Value | Description |
|---|---|---|
TEvent.SOFT_KEYBOARD | softKeyboard | Soft keyboard shown/hidden |
TEvent.APP_RESIZED | appResized | App window resized |
TEvent.BACK_PRESSED | backPressed | Android back button pressed |
TEvent.ORIENTATION_CHANGE | orientationChange | Device orientation changed |
Resource loading events
| Constant | Event Value | Description |
|---|---|---|
TEvent.LOAD_RESOURCE_ERROR | loadResourceError | Resource load error |
TEvent.TRY_RELOAD_RESOURCE | tryReloadResource | Attempting to reload a resource |
语言事件 / Version and language events
| Constant | Event Value | Description |
|---|---|---|
TEvent.VERSION_UPDATE | versionUpdate | New version available (UIKit may show update prompt) |
TEvent.LANGUAGE_CHANGED | languageChanged | Language switched (fires after setLocale is called). |
警告事件 / Error and warning events
| Constant | Event Value | Description |
|---|---|---|
TEvent.ERROR | error | Unified error channel (all module errors converge here; payload has module/code/message/detail). |
TEvent.WARN | warn | Unified warning channel (non-fatal issues, e.g., whiteboard page count near limit). |
Live streaming events
| Constant | Event Value | Description |
|---|---|---|
TEvent.STREAM_UPDATE | streamUpdate | Stream list updated (on join by RoomModule + change_member_stream signal by CommandModule). |
TEvent.AUTOPLAY_FAILED | autoplayFailed | Browser autoplay policy blocked video playback (TCPlayer 'blocked' event). |
TEvent.AUTOPLAY_CONFIRM | autoplayConfirm | User confirmed playback; all blocked players have resumed (can hide the "click to play" overlay). |
TEvent.LIVE_VOLUME_UPDATE | liveVolumeUpdate | Live stream volume callback (driven by WebLiveAdapter.enableVolumeEvaluation; use for volume animation UI). |