Skip to content

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

ConstantEvent ValueDescription
TEvent.JOIN_CLASSjoinClassJoin succeeded (all modules ready)
TEvent.LEAVE_CLASSleaveClassLeave completed (all resources released)
TEvent.BEFORE_LEAVEbeforeLeaveAbout to leave
TEvent.AFTER_LEAVEafterLeaveAfter leave completed
TEvent.CLASS_INFO_MODIFIEDclassInfoModifiedClass info modified by server
TEvent.CLASS_STARTclassStartClass started (all participants notified)
TEvent.CLASS_ENDclassEndClass ended (all participants notified)
TEvent.KICK_OUTkickOutKicked from classroom (payload includes reason and localized message)
TEvent.CLASS_INFO_CHANGE_REQUESTEDclassInfoChangeRequestedClass info change request (needs local confirmation)
TEvent.CLASS_INFO_UPDATEDclassInfoUpdatedClass info updated (after classInfo$ sync)
TEvent.CLASS_TASK_CHANGEclassTaskChangeClass whiteboard task list changed
TEvent.TASK_UPDATEDtaskUpdatedSingle business task updated (after dedup; carries full TaskInfo)
TEvent.ENABLE_STAGE_CHANGEDenableStageChangedHand-raise stage feature toggle changed (synced to all participants after teacher action).
TEvent.JOIN_PROGRESS_CHANGEDjoinProgressChangedJoin flow phase changed (fires every time JoinProgress enum value changes).

Member events

ConstantEvent ValueDescription
TEvent.MEMBER_JOINmemberJoinMember joined (includes full MemberInfo)
TEvent.MEMBER_LEAVEmemberLeaveMember left (includes full MemberInfo)
TEvent.MEMBER_STAGE_UPmemberStageUpMember went on stage (stage=true)
TEvent.MEMBER_STAGE_DOWNmemberStageDownMember left stage (stage=false)
TEvent.MEMBER_DEVICE_CHANGEmemberDeviceChangeMember device state changed (driven by change_member_stream signal; triggers MediaRenderer refresh).
TEvent.SELF_ONLINEselfOnlineSelf came online (confirmed in member list)
TEvent.SELF_OFFLINEselfOfflineSelf went offline (may trigger reconnect)

Permission events

ConstantEvent ValueDescription
TEvent.PERMISSION_UPDATEpermissionUpdatePermission list batch updated
TEvent.MY_PERMISSION_CHANGEmyPermissionChangeMy own permissions changed
TEvent.SCHOOL_INFO_READYschoolInfoReadySchool info loaded (includes package and watermark config)

Device events

ConstantEvent ValueDescription
TEvent.DEVICE_CHANGEdeviceChangeLocal device hot-plug event (camera/mic/speaker connected or disconnected).

RTC events

ConstantEvent ValueDescription
TEvent.USER_ENTER_ROOMuserEnterRoomRemote user entered TRTC room
TEvent.USER_LEAVE_ROOMuserLeaveRoomRemote user left TRTC room
TEvent.USER_VIDEO_AVAILABLEuserVideoAvailableRemote user video stream available/unavailable (true=camera on, false=camera off).
TEvent.USER_AUDIO_AVAILABLEuserAudioAvailableRemote user audio stream available/unavailable.
TEvent.USER_AUDIO_MUTEuserAudioMuteRemote user audio mute/unmute (active mute, different from 'available').
TEvent.USER_SUB_STREAM_AVAILABLEuserSubStreamAvailableRemote user sub-stream (screen share) available/unavailable
TEvent.LOCAL_VIDEO_STATSlocalVideoStatsLocal video stats (fires every ~2s)
TEvent.LOCAL_AUDIO_STATSlocalAudioStatsLocal audio stats
TEvent.REMOTE_VIDEO_STATSremoteVideoStatsRemote video stats
TEvent.REMOTE_AUDIO_STATSremoteAudioStatsRemote audio stats
TEvent.SCREEN_SHARE_STARTEDscreenShareStartedLocal screen share started
TEvent.SCREEN_SHARE_STOPPEDscreenShareStoppedLocal screen share stopped
TEvent.REMOTE_SCREEN_SHARE_STARTEDremoteScreenShareStartedRemote user started screen share
TEvent.REMOTE_SCREEN_SHARE_STOPPEDremoteScreenShareStoppedRemote user stopped screen share

IM events

ConstantEvent ValueDescription
TEvent.RECV_MESSAGErecvMessageNew chat message received
TEvent.RECV_CUSTOM_MSGrecvCustomMsgRaw custom group message received
TEvent.RECV_CUSTOM_IM_MSGrecvCustomImMsgCustom IM message received (wrapped as Message)
TEvent.MESSAGE_REVOKEDmessageRevokedMessage revoked (msgId is the revoked message ID)
TEvent.IM_CONNECTEDimConnectedIM connected
TEvent.IM_DISCONNECTEDimDisconnectedIM disconnected (reconnecting or unreachable)
TEvent.IM_KICKEDimKickedIM account logged in elsewhere, kicked on this end
TEvent.IM_SIG_EXPIREDimSigExpiredIM signature expired (rejoin required after refreshing sig)
TEvent.IM_CMD_MESSAGEimCmdMessageSignaling group command message (internal)
TEvent.IM_C2C_ADMIN_MSGimC2CAdminMsgBackend C2C admin control message (internal)

Whiteboard events

ConstantEvent ValueDescription
TEvent.BOARD_ERRORboardErrorWhiteboard runtime error (code 1/3/8 etc.; fires after retries exhausted; show error UI).
TEvent.BOARD_SIG_ERRORboardSigErrorWhiteboard auth error (code=7 sig expired / code=11 sig invalid; rejoin required).
TEvent.BOARD_READYboardReadyWhiteboard ready (history synced; boardReady$=true; page/tool operations now allowed).
TEvent.BOARD_INITboardInitWhiteboard DOM mounted (TEB_INIT; syncing history)
TEvent.BOARD_WARNboardWarnNon-fatal whiteboard warning (e.g., code=10 page limit reached)
TEvent.BOARD_IMAGE_STATUS_CHANGEDboardImageStatusChangedWhiteboard image load status changed
TEvent.BOARD_H5PPT_STATUS_CHANGEDboardH5PptStatusChangedH5 PPT animation status changed
TEvent.BOARD_H5FILE_STATUS_CHANGEDboardH5FileStatusChangedH5 file status changed
TEvent.BOARD_MEDIA_STATUS_CHANGEDboardMediaStatusChangedWhiteboard PPT media playback status (TEB_H5PPT_MEDIA_STATUS_CHANGED).
TEvent.BOARD_VIDEO_STATUS_CHANGEDboardVideoStatusChangedWhiteboard embedded video status changed
TEvent.BOARD_AUDIO_STATUS_CHANGEDboardAudioStatusChangedWhiteboard audio status changed
TEvent.BOARD_ADD_TRANSCODE_FILEboardAddTranscodeFileTranscoded courseware loaded into whiteboard (TEB_ADDTRANSCODEFILE; returns internal fileId).

Courseware events

ConstantEvent ValueDescription
TEvent.DOC_LOAD_COURSEWAREdocLoadCoursewareInternal event for loading courseware to whiteboard (DocModule → BoardModule; decoupling).
TEvent.DOC_PLAY_AUDIOdocPlayAudioAudio courseware play command (SDK has no built-in player; UIKit implements playback).
TEvent.DOC_LIST_UPDATEDdocListUpdatedCourseware list updated (after upload/delete/join; data.documents is the complete list).
TEvent.DOC_TRANSCODE_PROGRESSdocTranscodeProgressTranscode progress (internal)
TEvent.DOC_UPLOAD_PROGRESSdocUploadProgressCourseware upload/transcode progress update (covers full cycle: COS upload → server transcode → done).

Media playback events

ConstantEvent ValueDescription
TEvent.VOD_STARTvodStartVOD started playing (payload includes url)
TEvent.VOD_PAUSEvodPauseVOD paused
TEvent.VOD_RESUMEvodResumeVOD resumed
TEvent.VOD_STOPvodStopVOD stopped
TEvent.VOD_ENDvodEndVOD playback ended
TEvent.VOD_SEEKvodSeekVOD seeked (payload includes time in seconds)
TEvent.MUSIC_STARTmusicStartBackground music started (payload includes url)
TEvent.MUSIC_STOPmusicStopBackground music stopped
TEvent.MUSIC_PAUSEmusicPauseBackground music paused
TEvent.MUSIC_RESUMEmusicResumeBackground music resumed
TEvent.MUSIC_SEEKmusicSeekBackground music seeked

Subtitle events

ConstantEvent ValueDescription
TEvent.SUBTITLE_UPDATEsubtitleUpdateReceived real-time subtitle data (from TRTC custom message or cloud ASR).
TEvent.RTC_CUSTOM_MSGrtcCustomMsgTRTC custom msg relay (internal)

跑马灯事件 / Watermark and marquee events

ConstantEvent ValueDescription
TEvent.WATERMARK_UPDATEwatermarkUpdateWatermark config changed (triggered by setWatermarkConfig or server push).
TEvent.MARQUEE_UPDATEmarqueeUpdateMarquee config changed (triggered by setMarqueeConfig or server push).

Network diagnostic events

ConstantEvent ValueDescription
TEvent.NETWORK_SPEED_TEST_RESULTnetworkSpeedTestResultTRTC speed test result (fires after checkMediaServerConnection completes).

Network monitor events

ConstantEvent ValueDescription
TEvent.NETWORK_BROKENnetworkBrokenNetwork broken
TEvent.NETWORK_WEAKnetworkWeakNetwork weak (quality may degrade)
TEvent.NETWORK_RECOVEREDnetworkRecoveredNetwork recovered

上台事件 / Hand-up and stage events

ConstantEvent ValueDescription
TEvent.HAND_UPhandUpA member raised/lowered hand
TEvent.ASK_STAGE_REQUESTaskStageRequestStudent sent ask-stage request (teacher side)
TEvent.ASK_STAGE_ACCEPTEDaskStageAcceptedTeacher approved my ask-stage request (student side)
TEvent.ASK_STAGE_REJECTEDaskStageRejectedTeacher rejected my ask-stage request (student side)
TEvent.ASK_STAGE_CANCELLEDaskStageCancelledTeacher cancelled invite list; I was removed
TEvent.ASK_STAGE_UPDATEaskStageUpdateAsk-stage list updated (v1/stage signal)
TEvent.STAGE_LOOP_ACTIONstageLoopActionStage loop action notification (v1/stage_loop signal)

C2C control events

ConstantEvent ValueDescription
TEvent.RECV_MEMBER_ACTIONrecvMemberActionTeacher performed member action (student side)
TEvent.QUESTION_ANSWEREDquestionAnsweredStudent answered a quiz question (teacher side)
TEvent.TRANSLATE_MSGtranslateMsgTranslation result callback (includes original and translated text)

Quiz events

ConstantEvent ValueDescription
TEvent.QUESTION_BEGINquestionBeginQuiz started (all participants notified)
TEvent.QUESTION_ABANDONquestionAbandonQuiz abandoned (no scoring; ended immediately)
TEvent.QUESTION_CLOSEquestionCloseQuiz closed (stats viewable; still accepting answers briefly)
TEvent.QUESTION_ENDquestionEndQuiz fully ended (status reset to idle)

AI classroom

ConstantEvent ValueDescription
TEvent.AI_CLASS_READYaiClassReadyAI classroom ready (taskId is AI task ID)

AV permission changes

ConstantEvent ValueDescription
TEvent.AV_ADDavAddNew AV permission entry added
TEvent.AV_UPDATEavUpdateAV permission entry updated
TEvent.AV_REMOVEavRemoveAV permission entry removed (member left stage)
TEvent.ADJUST_HEARTBEATadjustHeartbeatAdjust heartbeat interval (internal)
TEvent.RESTORE_HEARTBEATrestoreHeartbeatRestore default heartbeat interval (internal)
TEvent.BURST_HEARTBEATburstHeartbeatBurst heartbeat (PermissionModule self-offline → RoomModule)
TEvent.CONFIRM_ACTIONconfirmActionUser confirmation required (e.g., invite-stage dialog) (internal)
TEvent.SILENCE_USERsilenceUserUser silenced/unsilenced (MemberModule → ImModule; triggers silenceUserOnMsgList) (internal)
TEvent.HEARTBEAT_TASK_SEQheartbeatTaskSeqHeartbeat task seq sync (internal)
TEvent.HEARTBEAT_PERMISSION_SEQheartbeatPermissionSeqHeartbeat permission seq sync (internal)
TEvent.PERMISSION_REVOKEDpermissionRevokedPermission revoked (PermissionModule → RtcModule; triggers device stop) (internal)
TEvent.MUTE_ALL_CHANGEDmuteAllChangedAll-mute changed (ClassModule → RtcModule; stops local mic on mute) (internal)
TEvent.MUTE_VIDEO_ALL_CHANGEDmuteVideoAllChangedAll-video-mute changed (ClassModule → RtcModule; stops local camera on mute) (internal)
TEvent.KICKOUT_CMDkickoutCmdKickOut signal (internal)
TEvent.KICKOUT_FOREVER_CMDkickoutForeverCmdKickOutForever signal (internal)
TEvent.PERMISSION_SYNCpermissionSyncPermission list sync (internal)
TEvent.SET_MUSIC_VOLUMEsetMusicVolumeSet music volume (internal)

Mobile events

ConstantEvent ValueDescription
TEvent.SOFT_KEYBOARDsoftKeyboardSoft keyboard shown/hidden
TEvent.APP_RESIZEDappResizedApp window resized
TEvent.BACK_PRESSEDbackPressedAndroid back button pressed
TEvent.ORIENTATION_CHANGEorientationChangeDevice orientation changed

Resource loading events

ConstantEvent ValueDescription
TEvent.LOAD_RESOURCE_ERRORloadResourceErrorResource load error
TEvent.TRY_RELOAD_RESOURCEtryReloadResourceAttempting to reload a resource

语言事件 / Version and language events

ConstantEvent ValueDescription
TEvent.VERSION_UPDATEversionUpdateNew version available (UIKit may show update prompt)
TEvent.LANGUAGE_CHANGEDlanguageChangedLanguage switched (fires after setLocale is called).

警告事件 / Error and warning events

ConstantEvent ValueDescription
TEvent.ERRORerrorUnified error channel (all module errors converge here; payload has module/code/message/detail).
TEvent.WARNwarnUnified warning channel (non-fatal issues, e.g., whiteboard page count near limit).

Live streaming events

ConstantEvent ValueDescription
TEvent.STREAM_UPDATEstreamUpdateStream list updated (on join by RoomModule + change_member_stream signal by CommandModule).
TEvent.AUTOPLAY_FAILEDautoplayFailedBrowser autoplay policy blocked video playback (TCPlayer 'blocked' event).
TEvent.AUTOPLAY_CONFIRMautoplayConfirmUser confirmed playback; all blocked players have resumed (can hide the "click to play" overlay).
TEvent.LIVE_VOLUME_UPDATEliveVolumeUpdateLive stream volume callback (driven by WebLiveAdapter.enableVolumeEvaluation; use for volume animation UI).