呼叫邀请

最近更新时间:2022-09-20 05:17:40

概述

RTM SDK 除了提供实时消息送达以外事件,还提供了呼叫邀请功能。RTM SDK 提供了简单的流程控制接口,同时还会按时序激活 LocalInvitationRemoteInvitation 的生命周期,开发者根据自身的业务逻辑可以自由的实现符合产品的场景。

RTM SDK 提供的呼叫邀请功能,仅仅是实现了呼叫邀请的基本控制逻辑(即发送、取消、接受和拒绝呼叫邀请),不会处理邀请接通之后的动作,也不会管理整个邀请的生命周期,需要开发者根据自己的业务逻辑自行维护。

邀请流程:

  • 主叫端发送或取消呼叫邀请

  • 被叫端接受或拒绝呼叫邀请

可用于多种业务场景:

  • 坐席呼叫
  • 主播连麦邀请
  • 在线教育
  • ...

基本流程

RTM SDK 提供了一个完整的呼叫要求过程,主叫和被叫的呼叫邀请状态和生命周期分别用 LocalInvitationRemoteInvitation 来定义。

发起呼叫邀请

步骤:

  1. 通过 createLocalInvitation 创建一个本地邀请 LocalInvitation 实例,同时 LocalInvitation 生命周期开始。

  2. 实例调用 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 下载最新版的 示例项目 查看完整的源码和代码逻辑。