呼叫
功能介绍
实现两个用户之间的呼叫功能,流程是:A用户先创建一个房间,然后呼叫B用户,如果B用户接受呼叫,AB进入房间进行通讯。
如果有邀请多方通话需求,请使用邀请功能。
使用场景:
- 点对点外呼:双方均未在房间,主叫创建房间后呼叫对方,对方接听后共同入会。
- 排队系统:客户排队后,系统将客户分配给空闲坐席,坐席创建房间并发起呼叫通知客户进入房间,队列相关流程参见 队列功能。
使用注意点:
- 接受呼叫后,call session 会一直保持,直到任一方调用
hangupCall挂断(参见下文 挂断)。这与 邀请 不同:邀请在被接受或拒绝后即结束,不维持 invite session。 - 呼叫发起后直到呼叫取消或呼叫挂断,双方都将进入忙状态,此时双方无法再做被叫(主叫端将收到对方忙的错误原因)。
- 队列功能,涉及出队列、通话中状态等,依赖 call 接口,所以只能与 call 配合使用, 不能使用 invite 相关接口。
主叫
1.创建房间
- 调用接口:
//创建房间
crVideoSDKMain->createMeeting();
- 回调通知:
//创建房间成功
void createMeetingSuccess(const CRMeetInfo& meetObj, const char* cookie)
{
//创建成功后可获得房间信息meetObj
}
//创建房间失败
void createMeetingFail(CRVSDK_ERR_DEF sdkErr, const char* cookie)
{
//创建失败,可以弹出错误提示
}
相关API请参考:
2.发起呼叫
注意:
- 当用户A呼叫用户B时,只有B成功登录了,才可以收到被呼叫通知,否则被呼叫者是无法收到被呼叫的消息的。
- 调用接口:
//A呼叫普通用户B进入房间。
//strMeetInfoObj为createMeeting返回的房间信息
crVideoSDKMain->getSDKCall().call("userIDB", strMeetInfoObj);
- 回调通知:
//呼叫操作成功响应
void callRslt(const char* callID, CRVSDK_ERR_DEF sdkErr, const char* cookie)
{
//sdkErr==CRVSDKERR_NOERR代表成功, 否则代表失败的具体原因
}
- 呼叫SIP/H323设备
请参考 SIP/H.323设备支持 呼叫部分
呼叫他人相关API请参考:
3.呼叫被接受/拒绝
- 回调通知:
//通知呼叫被接受
void notifyCallAccepted(const char* callID, const CRMeetInfo& meetObj, const char* usrExtDat)
{
//呼叫被接受,等待被呼叫方进入房间等处理
//此后 call session 持续存在,直至 hangupCall
}
//通知呼叫被拒绝
void notifyCallRejected(const char* callID, CRVSDK_ERR_DEF reason, const char* usrExtDat)
{
//呼叫被拒绝,弹出提示框等处理
}
相关API请参考:
4.挂断
- 调用接口:
//挂断呼叫
crVideoSDKMain->getSDKCall().hangupCall(callID);
- 回调通知:
//挂断呼叫结果
void hangupCallRslt(const char* callID, CRVSDK_ERR_DEF sdkErr, const char* cookie)
{
//sdkErr==CRVSDKERR_NOERR代表成功, 否则代表失败的具体原因
}
//通知被他人挂断
void notifyCallHungup(const char* callID, const char* usrExtDat)
{
//1. 退出房间,关闭会话窗口
//2.清理工作
}
相关API请参考:
被叫
1.被呼叫
- 回调通知:
// 通知有呼叫到来
void notifyCallIn(const char* callID, const CRMeetInfo& meetObj, const char* callerID, const char* usrExtDat)
{
//主叫为callerID
}
相关API请参考:
2.接受/拒绝呼叫
- 调用接口:
//接受呼叫
crVideoSDKMain->getSDKCall().acceptCall(callID, meetInfo);
//拒绝呼叫
crVideoSDKMain->getSDKCall().rejectCall(callID);
- 回调通知:
// 接受呼叫结果
void acceptCallRslt(const char* callID, CRVSDK_ERR_DEF sdkErr, const char* cookie)
{
//sdkErr==CRVSDKERR_NOERR代表成功, 否则代表失败的具体原因
}
// 拒绝呼叫结果
void rejectCallRslt(const char* callID, CRVSDK_ERR_DEF sdkErr, const char* cookie)
{
//sdkErr==CRVSDKERR_NOERR代表成功, 否则代表失败的具体原因
}
被呼叫者相关API请参考:
3.免打扰
如果用户当前不希望被呼叫,可以把自己的状态设置为免打扰,注意在免打扰状态下不会被呼叫,但是可以主动发起呼叫。
- 调用接口:
//开启免打扰
crVideoSDKMain->setDNDStatus(1);
//关闭免打扰
crVideoSDKMain->setDNDStatus(0);
- 回调通知:
//设置免打扰状态响应
void setDNDStatusRslt(CRVSDK_ERR_DEF sdkErr, const char* cookie)
{
}
相关API请参考: