如何让历史聊天消息中有呼叫或者挂断信息

如何在 Web 端实现在历史消息中记录与对方呼叫的信息,像移动端一样,查看消息列表时有通话了多长时间的记录?
发布时间: 2021-12-23 15:25

回答:

在 Web Call 呼叫场景中,有如下呼叫流程

移动端有本地数据库,挂断后会向本地数据库插入一条通话结束的消息,同时移动端历史消息是从数据库中获取的,所以通话结束后,能从历史消息中查到通话记录

Web 端没有本地存储,历史消息是从远端服务器获取,其中 InviteMessage、RingingMessage、AcceptMessage、HungupMessage 是状态消息,其中 isPersited 是 false,表示为不存储,所以获取历史消息时是不存在的,用户不能通过以上信息来通话记录的判定

那么 Web 端该如何实现查看历史消息有标识这个通话记录呢?

实现方案:用户可以自己发送一条自定义存储类型的消息来标识这次通话记录,由于是存储的,所以可以通过获取历史消息 api 拿到该消息

发送自定义消息请参考:https://doc.rongcloud.cn/im/Web/4.X/guide/private/msgmanage/msgsend/web#createcustom


发送时机由应用层来决定,下面举例一个实现思路:
1、可以在触发  onSessionClose 监听时发送自定义消息,onSessionClose 函数会返回 summaryInfo 的结束信息,具体格式如下图:

export interface IEndSummary {
/**
  * 通话类型
  */
conversationType: ConversationType,
/**
  * 多组织 ID
  */
channelId: string,
/**
  * 目标 ID
  */
targetId: string,
/**
  * 通话媒体类型
  */
mediaType: RCCallMediaType,
/**
  * 通话开始时间戳
  */
beginTimestamp: number,
/**
  * 通话结束时间戳
  */
endTimestamp: number,
/**
  * 通话时间
  */
duration: number,
/**
  * 通话结束原因
  */
endReason: RCCallEndReason
}

2、在历史消息展示时,可以根据 sendUserId 来过滤展示自己的通话信息记录