与 IM 业务集成
您可以将 CallPlus 集成到基于 IMLib SDK 的应用程序中,为用户提供使用通话和聊天服务的无缝体验。
在会话页面插入通话结束消息
应用程序可以通话结束时返回聊天视图,并在会话页面中展示通话结束的消息。
为便于与 IMLib SDK 集成,从 2.1.1 版本开始,CallPlus SDK 可在通话结束时返回一个 IM 消息对象 IRCCallPlusReceivedSummaryMessage,其中包含消息内容对象 RCCallPlusSummaryMessageContent。应用程序可以通过调用 IMLib SDK 的接口直接将该消息内容对象插入到会话中。
获取通话结束消息
重要
CallPlus SDK 暂仅支持在一对一通话(通话类型为
RCCallPlusType.SINGLE
)结束时返回用于展示通话记录的消息内容。暂不支持支持多人通话。
通话正常、异常结束,或在未接听时挂断,CallPlus SDK 会触发 ICallPlusEventListener 的 onReceivedCallPlusSummaryMessage 回调方法,可在该回调方法获取到通话结束的消息内容对象。
如果被叫时用户不在线,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。
在 ICallPlusEventListener
的 onReceivedCallPlusSummaryMessage
回调方法中获取 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)
}
});
}