iOS

# 第三方管理

本文将介绍通话过程中第三方管理的功能::座席可以邀请另外的座席或者访客加入通话,以及收到所有参会成员的加入,离开事件。

# 1. 邀请第三方座席加入

  1. 通话过程中座席调用 inviteThirdAgent (opens new window) 接口邀请其他座席进入通话:
  2. 邀请结果通过实现 JRTCAgentCallback (opens new window)onInviteThirdAgentResult (opens new window) 接口获取;
  3. 如果邀请成功其他座席会收到来电类型为 CALL_INCOMING_TYPE_INVITE (opens new window) 的来电通知。
/**
 * 邀请第三方座席加入
 *
 * 被邀请的第三方座席会收到 {@link JRTCAgentCallback#onCallStateChanged onCallStateChanged} 来电邀请回调 <br>
 * 第三方座席接听通话后,已在通话中的成员会收到 {@link JRTCAgentCallback#onMemberJoin onMemberJoin} 或 {@link JRTCGuestCallback#onMemberJoin onMemberJoin} 成员加入回调
 * @param userId 要邀请的座席用户ID
 * @return 接口调用结果
 * - true: 接口调用成功,邀请结果通过 {@link JRTCAgentCallback#onInviteThirdAgentResult onInviteThirdAgentResult} 回调上报
 * - false: 接口调用异常
 */
public abstract boolean inviteThirdAgent(String userId);
/**
 * 邀请第三方座席结果回调
 *
 * @param result 邀请第三方座席结果
 * - true: 邀请成功
 * - false: 邀请失败
 * @param error 邀请第三方座席失败原因
 */
void onInviteThirdAgentResult(boolean result, String error);

示例代码:

//邀请agent2坐席
agent.inviteThirdAgent("agent2");

//邀请坐席结果通知
public void onInviteThirdAgentResult(boolean result, String error) {
    if(result) {
        //邀请成功
    } else {
        //邀请失败
    }
}

//第三方座席
public void onCallStateChanged(@JRTCAgent.AgentCallStateChangeType int type, @JRTCAgent.CallIncomingType int incomingType, JRTCInviter inviter, @JRTCAgent.CallTermReason int reason) {
    if (type == AGENT_CHANGE_TYPE_INCOMING) {
        if (incomingType == CALL_INCOMING_TYPE_INVITE) {
            //三方邀请来电
            //三方座席接听
            agent.answer();
            //三方座席拒接
            agent.term();
        }
        
    }
}

# 2. 邀请第三方访客

  1. 通话过程中座席调用 inviteThirdGuest (opens new window) 接口邀请其他访客进入通话:
  2. 邀请结果通过实现 JRTCAgentCallback (opens new window)onInviteThirdGuestResult (opens new window) 接口获取;
  3. 如果邀请成功其他访客会收到来电类型为 CALL_INCOMING_TYPE_INVITE (opens new window) 的来电通知。
/**
 * 邀请第三方访客加入
 *
 * 被邀请的第三方座席会收到 {@link JRTCAgentCallback#onCallStateChanged onCallStateChanged} 来电邀请回调 <br>
 * 第三方访客接听通话后,已在通话中的成员会收到 {@link JRTCAgentCallback#onMemberJoin onMemberJoin} 或 {@link JRTCGuestCallback#onMemberJoin onMemberJoin} 成员加入回调
 * @param userId 要邀请的第三方访客用户ID
 * @param extraInfo 邀请携带的额外信息
 * @return 接口调用结果
 * - true: 接口调用成功,结果通过 {@link JRTCAgentCallback#onInviteThirdGuestResult onInviteThirdGuestResult} 回调上报
 * - false: 接口调用异常
 */
public abstract boolean inviteThirdGuest(String userId, String extraInfo);
/**
 * 邀请第三方访客结果回调
 *
 * @param result 邀请第三方访客结果
 * - true: 邀请成功
 * - false: 邀请失败
 * @param userId 访客用户ID
 * @param error 邀请第三方访客失败原因,仅在失败时生效
 */
void onInviteThirdGuestResult(boolean result, String userId, String error);

示例代码:

//邀请第三方访客
agent.inviteThirdGuest("userId","extraInfo");

//邀请第三方访客结果通知
public void onInviteThirdGuestResult(boolean result, String userId, String error) {
    if(result) {
        //邀请成功
    } else {
        //邀请失败
    }
}

//第三方访客
public void onCallStateChanged(@JRTCGuest.GuestCallStateChangeType int type, @JRTCAgent.CallIncomingType int incomingType, JRTCInviter inviter, @JRTCAgent.CallTermReason int reason) {
    if (type == GUEST_CHANGE_TYPE_INCOMING) {
        if (incomingType == CALL_INCOMING_TYPE_INVITE) {
            //三方邀请来电
            //三方访客接听
            guest.answer();
        }
        
    }
}

# 3. 三方成员离开或加入

新成员加入通话或成员离开通话,会通过 JRTCAgentCallback (opens new window) 中的 onMemberJoin (opens new window)onMemberLeave (opens new window) 接口上报

/**
 * 通话中有新成员加入回调
 *
 * 当第三方成员加入时,已在通话中的所有成员会收到此回调,而新加入的成员不会收到此回调。
 * @param part 新加入的成员对象
 */
void onMemberJoin(JRTCRoomParticipant part);

/**
 * 通话中有成员离开回调
 *
 * 通话中有成员离开通话时,剩余的成员会收到此回调,而离开的成员不会收到此回调。
 * @param part 离开的成员对象
 */
void onMemberLeave(JRTCRoomParticipant part);

示例代码:

//邀请第三方访客
agent.inviteThirdGuest("guest2","extraInfo");

//邀请第三方访客结果通知
public void onInviteThirdGuestResult(boolean result, String userId, String error) {
    if(result) {
        //邀请成功
    } else {
        //邀请失败
    }
}

//第三方访客
public void onCallStateChanged(@JRTCGuest.GuestCallStateChangeType int type, @JRTCAgent.CallIncomingType int incomingType, JRTCInviter inviter, @JRTCAgent.CallTermReason int reason) {
    if (type == GUEST_CHANGE_TYPE_INCOMING) {
        if (incomingType == CALL_INCOMING_TYPE_INVITE) {
            //三方邀请来电
            //三方访客接听
            guest.answer();
        }
        
    }
}