概述
RTM SDK 除了提供实时消息送达以外事件,还提供了呼叫邀请功能。RTM SDK 提供了简单的流程控制接口,同时还会按时序激活 LocalInvitation
和 RemoteInvitation
的生命周期,开发者根据自身的业务逻辑可以自由的实现符合产品的场景。
RTM SDK 提供的呼叫邀请功能,仅仅是实现了呼叫邀请的基本控制逻辑(即发送、取消、接受和拒绝呼叫邀请),不会处理邀请接通之后的动作,也不会管理整个邀请的生命周期,需要开发者根据自己的业务逻辑自行维护。
邀请流程:
-
主叫端发送或取消呼叫邀请
-
被叫端接受或拒绝呼叫邀请
可用于多种业务场景:
- 坐席呼叫
- 主播连麦邀请
- 在线教育
- ...
基本流程
RTM SDK 提供了一个完整的呼叫要求过程,主叫和被叫的呼叫邀请状态和生命周期分别用 LocalInvitation
和 RemoteInvitation
来定义。
发起呼叫邀请
步骤:
-
通过
createLocalInvitation
创建一个本地邀请LocalInvitation
实例,同时LocalInvitation
生命周期开始。 -
实例调用
sendLocalInvitation
方法发送呼叫邀请。被叫收到onRemoteInvitationReceived
回调,此时RemoteInvivation
生命周期开始。主叫收到onLocalInvitationReceivedByPeer
回调。
示例代码:
// 获取呼叫邀请管理器。
bool CArRtmInstance::InitCallManager()
{
if(!m_callService)
return false;
m_callManager =m_callService->getRtmCallManager(m_callEventHandler.get());
return m_callManager != nullptr;
}
bool CArRtmInstance::CallRemoteUser(QString remoteUserId)
{
if(!m_callManager)
return false;
m_remoteUserId = remoteUserId;
//创建 LocalInvitation
m_callInvitation = m_callManager->createLocalCallInvitation(remoteUserId.toUtf8());
if(m_callInvitation){
//发送呼叫邀请
int ret = m_callManager->sendLocalInvitation(m_callInvitation);
return ret == 0 ? true : false;
}
return false;
}
取消呼叫邀请
主叫使用 LocalInvitation
实例调用 cancelLocalInvitation
取消呼叫邀请。被叫收到 onRemoteInvitationCanceled
回调,此时 RemoteInvitation
生命周期结束。主叫收到 onLocalInvitationCanceled
回调,此时 LocalInvitation
生命周期结束。
示例代码:
//取消呼叫邀请
bool CArRtmInstance::CancelLocalInvitation()
{
if(!m_callManager || !m_callInvitation)
return false;
int ret = m_callManager->cancelLocalInvitation(m_callInvitation);
return ret == 0 ? true : false;
}
取消呼叫邀请,需要在被叫端 RemoteInvitation
接受或拒绝呼叫邀请操作之前执行。
接受呼叫邀请
被叫从 onRemoteInvitationReceived
回调获取 RemoteInvitation
并调用 acceptRemoteInvitation
接受呼叫邀请。被叫收到 onRemoteInvitationAccepted
回调,此时 RemoteInvitation
生命周期结束。主叫收到 onLocalInvitationAccepted
回调,此时 LocalInvitation
生命周期结束。
示例代码:
// 收到远程呼叫邀请
Client.on("RemoteInvitationReceived", remoteInvitation => {
// 自动接受呼叫邀请
remoteInvitation.accept();
});
你可能会同时收到好几次呼叫邀请,所以业务逻辑要控制好,保证一次只进行一次呼叫,根据业务逻辑去接受和拒绝其他呼叫邀请。
拒绝呼叫邀请
被叫从 onRemoteInvitationReceived
回调获取 RemoteInvitation
并调用 refuseRemoteInvitation
拒绝呼叫邀请。被叫收到 onRemoteInvitationRefused
回调,此时 RemoteInvitation
生命周期结束。主叫收到 onLocalInvitationRefused
回调,此时 LocalInvitation
生命周期结束。
示例代码:
//拒绝呼叫邀请
bool RefuseRemoteInvitation(IRemoteCallInvitation* invitation)
{
int ret = m_callManager->refuseRemoteInvitation(invitation);
return ret == 0 ? true : false;
}
API 参考
详情请见 RTM Windows SDK 呼叫邀请管理 API 文档。
示例项目
你可以到 GitHub 下载最新版的 示例项目 查看完整的源码和代码逻辑。