跳到主要内容

与 IM 业务集成

您可以将 CallPlus 集成到基于 IMLib SDK 的应用程序中,为用户提供使用通话和聊天服务的无缝体验。

在会话页面插入通话结束消息

应用程序可以通话结束时返回聊天视图,并在会话页面中展示通话结束的消息。

为便于与 IMLib SDK 集成,从 2.1.1 版本开始,CallPlus SDK 可在通话结束时返回一个 IM 消息对象 IRCCallPlusReceivedSummaryMessage,其中包含消息内容对象 RCCallPlusSummaryMessageContent。应用程序可以通过调用 IMLib SDK 的接口直接将该消息内容对象插入到会话中。

获取通话结束消息

重要

CallPlus SDK 暂仅支持在一对一通话(通话类型为 RCCallPlusType.SINGLE)结束时返回用于展示通话记录的消息内容。暂不支持支持多人通话。

通话正常、异常结束,或在未接听时挂断,CallPlus SDK 会触发 ICallPlusEventListeneronReceivedCallPlusSummaryMessage 回调方法,可在该回调方法获取到通话结束的消息内容对象。

如果被叫时用户不在线,CallPlus SDK 会在下次成功连接 IM 后立即获取离线时产生的 RCCallPlusSummaryMessageContent。为了确保 CallPlus SDK 可在 IM 连接成功后立即获取到这些消息,请在 IM 连接之前调用 setCallPlusEventListener 注册监听器。

  // callPlus 业务层监听事件增加 onReceivedCallPlusSummaryMessage
callPlusClient.setCallPlusEventListener({
/**
* 收到通话结束的消息记录,可用于在 IM 聊天界面插入通话结束消息
* 仅单聊可收到
* 触发时机:
* 1.单聊在线通话结束后
* 2.离线时收到单聊呼叫,通话结束后,重新连接 IM 在线时
* @param message 通话记录的消息体
* @param message.messageType 通话结束消息类型,为 RC:CallPlusMiss
* @param message.senderUserId 为通话发起者
* @param message.targetId 为单聊中对方的 userId
* @param message.messageDirection 如果本端是呼叫发起者,消息方向则为发送,反之为接收
* @param message.content IRCCallPlusSummaryMessageContent,内部包含通话的 callId、通话发起者、通话对方 userId、通话媒体类型、通话开始时间、通话结束时间、通话挂断原因
* @since 2.1.1
*/
onReceivedCallPlusSummaryMessage(message: IRCCallPlusReceivedSummaryMessage) {
console.log(message);
}
});

在 Electron IMLib V5 中插入通话结束消息

收到通话结束消息时,可以将 RCCallPlusSummaryMessageContent 通过 insertMessage 方法插入到本地会话中,并自行刷新 UI。

ICallPlusEventListeneronReceivedCallPlusSummaryMessage 回调方法中获取 IRCCallPlusReceivedSummaryMessage 对象中包含的 RCCallPlusSummaryMessageContent,在本地会话页面中插入一条通话结束消息。插入消息示例代码:

  onReceivedCallPlusSummaryMessage(message: IRCCallPlusReceivedSummaryMessage) {
const { conversationType, targetId } = message;

const conversation = {
conversationType,
targetId,
};

RongIMLib.electronExtension.insertMessage(conversation, message).then(res => {
if (res.code === RongIMLib.ErrorCode.SUCCESS) {
// 消息插入成功,返回 IAReceivedMessage 类型的消息数据。
console.log('消息插入成功', res.data)
} else {
console.log('消息插入失败', res.code, res.msg)
}
});
}