访客相关事件回调接口

该接口定义了访客在呼叫中心系统中可能接收到的各类事件回调方法。 通过实现这些回调方法,应用可以响应系统状态变化、成员加入/离开、 消息接收、通话属性变更等事件,从而实现完整的访客端业务逻辑。 所有回调方法均为可选实现。

interface JRTCGuestCallback {
    onGetAllGroups?: (
        result: boolean,
        groups: ArrayList<JRTCCallCenterGroupItem>,
    ) => void;
    onCallStateChanged?: (
        state: JRTCCallCenterCallState,
        incomingType: JRTCCallCenterIncomingType,
        inviter: undefined | JRTCInviter,
        reason: JRTCCallCenterTermReason,
    ) => void;
    onCallQueueCount?: (
        count: number,
        time?: number,
        agentRinging?: boolean,
    ) => void;
    onCallPropertyChanged?: (propChangeParam: JRTCRoomPropChangeParam) => void;
    onRemoteRecordStateChanged?: (
        state: JRTCRemoteRecordState,
        oldState: JRTCRemoteRecordState,
    ) => void;
    onScreenShareStateChanged?: (
        shareUserId: undefined | string,
        shareStreamId: undefined | string,
        oldShareUserId: undefined | string,
        oldShareStreamId: undefined | string,
        changeType: JRTCScreenShareChangeType,
    ) => void;
    onMemberJoin?: (participant: JRTCRoomParticipant) => void;
    onMemberLeave?: (participant: JRTCRoomParticipant) => void;
    onMemberUpdate?: (
        participant: JRTCRoomParticipant,
        changeParam: JRTCRoomParticipantChangeParam,
    ) => void;
    onUrgentResultResponse?: (agree: boolean) => void;
    onHoldStateChanged?: (hold: boolean) => void;
    onCallTypeChanged?: (callType: JRTCCallCenterCallType) => void;
    onMessageReceived?: (
        content: string,
        contentType: string,
        messageType: JRTCCallCenterMessageType,
        fromUserId: string,
    ) => void;
    onSignRequest?: (fromUserId: string, extraInfo: string) => void;
    onOnewayVideoChanged?: (turnOn: boolean) => void;
    onDeliveryAbort?: (
        isShutDown: boolean,
        deliveryUserId: string,
        reason: string,
    ) => void;
    onCallForwarding?: () => void;
    onNotifyMessageReceived?: (
        notifyMessage: JRTCNotifyMessage,
        fromUserId: string,
    ) => void;
}

Properties

onGetAllGroups?: (
    result: boolean,
    groups: ArrayList<JRTCCallCenterGroupItem>,
) => void

获取业务号列表结果回调

Type declaration

    • (result: boolean, groups: ArrayList<JRTCCallCenterGroupItem>): void
    • Parameters

      • result: boolean

        获取结果,true表示获取成功,false表示获取失败

      • groups: ArrayList<JRTCCallCenterGroupItem>

        座席业务实体对象列表,获取失败时为undefined

      Returns void

当访客调用queryAllGroups接口获取业务号列表后, 会收到此回调,通知请求结果及返回的业务号列表数据。 业务号列表可用于展示可选的客服业务类型,供用户选择需要咨询的服务。

onCallStateChanged?: (
    state: JRTCCallCenterCallState,
    incomingType: JRTCCallCenterIncomingType,
    inviter: undefined | JRTCInviter,
    reason: JRTCCallCenterTermReason,
) => void

通话状态改变回调

Type declaration

此回调在以下情况会触发:

应用应根据不同状态调整UI展示和功能可用性,如在TALKING状态启用媒体传输, 在IDLE状态释放资源等。

onCallQueueCount?: (
    count: number,
    time?: number,
    agentRinging?: boolean,
) => void

当前排队人数上报回调

Type declaration

    • (count: number, time?: number, agentRinging?: boolean): void
    • Parameters

      • count: number

        当前排队人数,不包含已分配座席但未接听的访客

      • Optionaltime: number

        预计等待时长,单位为秒

      • OptionalagentRinging: boolean

        座席是否正在振铃,true表示已有座席正在响铃

      Returns void

在呼叫发起后尚未接通的等待阶段,系统每5秒上报一次当前排队情况。 通话接通后将停止上报。应用可利用此信息向用户展示排队状态和预计等待时间, 提升用户体验。当agentRingingtrue时,表示已有座席收到呼叫请求, 正在振铃阶段,有望很快接听。

onCallPropertyChanged?: (propChangeParam: JRTCRoomPropChangeParam) => void

通话属性改变回调

Type declaration

当通话的属性发生变化时,如屏幕共享状态变更、录制状态变更等,会触发此回调。

重点关注屏幕共享属性,当screenSharetrue时, 应用需处理屏幕共享相关事件。可通过getShareStreamIdgetShareUserId获取共享画面的流ID和用户ID,用于渲染共享内容。 当屏幕共享停止时,应及时停止渲染并释放相关资源。

onRemoteRecordStateChanged?: (
    state: JRTCRemoteRecordState,
    oldState: JRTCRemoteRecordState,
) => void

远程录制状态变化回调

Type declaration

onScreenShareStateChanged?: (
    shareUserId: undefined | string,
    shareStreamId: undefined | string,
    oldShareUserId: undefined | string,
    oldShareStreamId: undefined | string,
    changeType: JRTCScreenShareChangeType,
) => void

屏幕共享状态变化回调

Type declaration

    • (
          shareUserId: undefined | string,
          shareStreamId: undefined | string,
          oldShareUserId: undefined | string,
          oldShareStreamId: undefined | string,
          changeType: JRTCScreenShareChangeType,
      ): void
    • Parameters

      • shareUserId: undefined | string

        当前屏幕共享用户 ID

      • shareStreamId: undefined | string

        当前屏幕共享流 ID

      • oldShareUserId: undefined | string

        变化前屏幕共享用户 ID

      • oldShareStreamId: undefined | string

        变化前屏幕共享流 ID

      • changeType: JRTCScreenShareChangeType

        屏幕共享变化类型

      Returns void

onMemberJoin?: (participant: JRTCRoomParticipant) => void

通话中有新成员加入回调

Type declaration

当第三方成员加入通话时,已在通话中的所有成员会收到此回调。 新加入的成员本身不会收到此回调。

应用应在收到此回调时更新UI界面,添加新成员的视频窗口(如果有视频), 并可能需要调整布局以适应新的成员数量。可通过participant对象获取 新成员的ID、名称、角色等信息。

onMemberLeave?: (participant: JRTCRoomParticipant) => void

通话中有成员离开回调

Type declaration

通话中有成员离开时,剩余的成员会收到此回调。 离开的成员本身不会收到此回调。

应用应在收到此回调时更新UI界面,移除离开成员的视频窗口, 并可能需要调整布局。特别是座席成员离开时,可能需要显示通话即将结束的提示。 可通过participant对象识别离开成员的身份和角色。

onMemberUpdate?: (
    participant: JRTCRoomParticipant,
    changeParam: JRTCRoomParticipantChangeParam,
) => void

通话中成员属性更新回调

Type declaration

当通话中成员的属性发生变化时,如音量变化、音视频状态变化等,会触发此回调。 常见的属性变化包括:

  • volume - 成员实时音量值
  • audio - 音频上传状态变更
  • video - 视频上传状态变更

应用应根据属性变化更新UI显示,如显示音量指示器、切换摄像头开启/关闭图标、 在视频暂停时显示占位图像等。

onUrgentResultResponse?: (agree: boolean) => void

座席处理加急的结果回调

Type declaration

    • (agree: boolean): void
    • Parameters

      • agree: boolean

        加急是否通过,true表示座席同意了访客的加急请求,false表示不同意

      Returns void

访客调用requestUrgent接口请求加急后, 座席会收到加急请求并可以通过JRTCAgent.responseUrgent responseUrgent接口进行响应。 访客随后会通过此回调获得座席的响应结果。

应用可根据响应结果向用户展示相应提示,如"加急请求已被接受"或"加急请求被拒绝"。

onHoldStateChanged?: (hold: boolean) => void

收到通话保持或取回的回调

Type declaration

    • (hold: boolean): void
    • Parameters

      • hold: boolean

        通话状态,true表示通话被保持,false表示通话被取回

      Returns void

通话中座席可调用JRTCAgent.setHoldState setHoldState接口保持通话或取回通话, 通话中所有成员都会收到此回调。

当通话被保持时,应用应向用户显示"通话已保持"提示,并可能需要暂停媒体传输。 当通话被取回时,应恢复正常通话界面并重新启用媒体传输。

onCallTypeChanged?: (callType: JRTCCallCenterCallType) => void

音视频通话切换回调

Type declaration

通话中的访客和座席可分别调用turnCallType和JRTCAgent.turnCallType turnCallType 方法切换音视频通话模式,通话中所有成员都会收到此回调。

可能的通话模式包括:

  • AUDIO - 语音通话模式,只传输音频
  • VIDEO - 视频通话模式,同时传输音频和视频

应用应根据通话模式变化调整UI界面,如在语音模式下隐藏视频窗口, 在视频模式下显示视频窗口并启用摄像头。

onMessageReceived?: (
    content: string,
    contentType: string,
    messageType: JRTCCallCenterMessageType,
    fromUserId: string,
) => void

收到消息回调

Type declaration

    • (
          content: string,
          contentType: string,
          messageType: JRTCCallCenterMessageType,
          fromUserId: string,
      ): void
    • Parameters

      • content: string

        消息内容

      • contentType: string

        消息内容类型

      • messageType: JRTCCallCenterMessageType

        消息归属类型

      • fromUserId: string

        发送方的用户ID

      Returns void

通话中的访客和座席可分别调用sendMessage和JRTCAgent.sendMessage sendMessage 接口发送消息,接收方会通过此回调获取消息。

消息归属类型包括:

  • UNKNOWN - 未知消息类型
  • ONE_TO_ONE - 一对一消息
  • GROUP - 群发消息(发送给通话中所有成员)

应用应根据消息类型和内容更新聊天界面,如在聊天窗口显示接收到的消息。 可通过fromUserId识别消息发送者,并可能需要根据身份显示不同的样式。

onSignRequest?: (fromUserId: string, extraInfo: string) => void

收到签名请求回调

Type declaration

    • (fromUserId: string, extraInfo: string): void
    • Parameters

      • fromUserId: string

        发起签名请求的座席用户ID

      • extraInfo: string

        随路额外消息

      Returns void

通话中座席调用JRTCAgent.requestSign requestSign接口给访客发送签名请求时, 访客会收到此回调。

应用应在收到此回调时显示签名请求界面,让用户进行电子签名操作。 签名完成后,可通过responseSignResult接口将签名结果回传给座席。 extraInfo参数可能包含需要用户确认的文本内容或其他信息。

onOnewayVideoChanged?: (turnOn: boolean) => void

收到单向视频状态变化回调

Type declaration

    • (turnOn: boolean): void
    • Parameters

      • turnOn: boolean

        单向视频状态,true表示开启单向视频,false表示关闭单向视频

      Returns void

通话中座席调用JRTCAgent.requestOnewayVideo requestOnewayVideo请求单向视频时, 所有成员都会收到此回调。

单向视频是指座席可以看到访客的视频,但访客看不到座席的视频。 SDK不会自动处理单向视频的画面隐藏,应用需要自行实现, 例如在turnOntrue时用图片遮挡座席视频画面。

onDeliveryAbort?: (
    isShutDown: boolean,
    deliveryUserId: string,
    reason: string,
) => void

录制异常回调

Type declaration

    • (isShutDown: boolean, deliveryUserId: string, reason: string): void
    • Parameters

      • isShutDown: boolean

        录制异常时服务器是否自动结束通话,true表示自动结束通话,false表示不自动结束通话

      • deliveryUserId: string

        录制异常的用户ID

      • reason: string

        录制异常的原因

      Returns void

当远程录制服务异常退出时,会触发此回调通知所有通话成员。

应用应在收到此回调时向用户显示相应提示,如"录制服务异常"。 如果isShutDowntrue,还应提示用户通话即将结束, 此时通话会被服务器自动终止。

onCallForwarding?: () => void

座席通话转接回调

通话中座席调用JRTCAgent.transferCall transferCall接口将通话转接到其他座席或业务组时, 访客会收到此回调。

收到此回调后,访客的通话状态不会改变,但需要等待新的座席接听。 当新座席接听后,访客会通过onMemberJoin回调得知新座席加入。 应用应在收到此回调时向用户显示"正在转接"提示,并可能需要显示等待界面。

onNotifyMessageReceived?: (
    notifyMessage: JRTCNotifyMessage,
    fromUserId: string,
) => void

收到事件通知消息回调

Type declaration

    • (notifyMessage: JRTCNotifyMessage, fromUserId: string): void
    • Parameters

      • notifyMessage: JRTCNotifyMessage

        事件通知实体类

      • fromUserId: string

        发送方的用户ID

      Returns void

通话中的访客和座席可分别调用sendNotifyMessage和 JRTCAgent.sendNotifyMessage sendNotifyMessage接口发送通知消息, 接收方会通过此回调获取消息。

与普通文本消息不同,通知消息通常用于传递特定业务事件,如文件传输请求、 评价请求等。应用应根据通知消息的类型和内容执行相应的业务逻辑。 notifyMessage对象包含消息类型、内容等信息,可用于区分不同的通知事件。