Android

话单

更新时间: 2022/05/19 03:06:40

呼叫组件提供通话话单功能,在一通通话结束后,您会收到对应的通话话单。通话话单是一条事件通知消息,标记此次呼叫的状态。话单以 IM 会话类型消息抄送的形式发送,收到话单后,您可以解析消息体,获得通话时间等通话详情。

话单说明

下图为常见话单示例,从上至下分别对应主叫取消话单被叫拒绝话单超时未接听话单被叫占线话单正常通话带有时长的话单

使用云信话单

步骤1 开通话单功能

具体请参见开通服务

步骤2 发送话单

开通话单功能后,呼叫组件默认发送话单消息。

话单消息共有5类,其中4类为未接通时的话单,如拒接话单、占线话单、超时未接听话单、主叫取消话单,此类话单均由主叫方客户端发送;1类为带有通话时长的正常话单,此类话单为服务端直接发送。话单结构见话单解析部分。

步骤3 接收并解析话单

  • 在发送端,可以通过 onMessageSent 事件监听到发送话单的通知,然后通过 IM 的 getLocalMsgs 方法获取到历史消息,从而更新话单的 UI。
  • 在接收端,可以给组件的login方法传入onmsg回调,获取到 type 为 g2 的消息,从而更新话单的 UI。

话单消息类型及结构体

代码 话单类型 说明
status 1 正常通话话单,通话双方都进入音视频通话后进行挂断。由组件服务器发送。
status 2 主叫取消话单,主叫呼叫后主动取消的话单。由客户端主叫方发送。
status 3 被叫拒接话单,被叫拒接接听后的话单。客户端主叫方收到被叫拒接消息后进行发送。
status 4 超时话单,被叫收到通话邀请后不操作等待超时产生的话单。客户端主叫方发送。
status 5 占线话单(用户忙),当主叫呼叫被叫时,被叫仍处于通话以及呼叫/被叫中,此时被叫会拒绝主叫的通话邀请。客户端主叫收到消息后会发送占线话单。
json// 收到的话单的json结构
{
   "type": 1,                       //1 表示音频,2 表示视频
   "channelId": 123,                //G2的channelId
   "status": 1,                     //1 表示正常结束通话话单,对应上表的话单类型
   "durations": [
           {
               "accid":"acc01",
               "duration":10
           },
           {
               "accid":"acc02",
               "duration":12
           }
   ]
}

实现自己的话单

若组件自带的话单功能不能满足需求,请参考如下步骤实现自己的话单:

  1. 关闭呼叫组件自带的话单功能。

    登录网易云信控制台,关闭话单功能,具体步骤请参见开通话单功能

  2. 网易云信控制台开通房间时长消息抄送(eventType=8),具体操作步骤请参见开通消息抄送

  3. 确定话单协议,通常用 JSON 表示。

    json{
      "type": 1   // 话单类型
      "data": ... // 话单消息内容,如通话时长等信息
    }
    
  4. 参考发送自定义消息,将步骤 3 确定的话单协议作为自定义内容进行发送与解析。

    至此,您已经完成自定义话单消息的发送以及解析,各个话单消息的种类和发送时间如下:

    • 主叫取消话单:主叫方统一发送。主叫取消话单可在主叫调用 cancel 方法成功后发送。
    • 被叫拒绝话单:主叫方统一发送。在收到 onUserReject回调发送被叫拒绝话单。
    • 超时未接听话单:主叫方统一发送。在收到 onCallingTimeOut 回调发送超时未接听话单。
    • 被叫占线话单:主叫方统一发送。在收到 onUserBusy 回调发送被叫占线话单。
    • 正常通话带有时长的话单:建议由服务端发送,用户服务器收到云信服务器的抄送(房间时长消息抄送(eventType=8))时,根据抄送发送时长话单。
此文档是否对你有帮助?
有帮助
去反馈
  • 话单说明
  • 使用云信话单
  • 步骤1 开通话单功能
  • 步骤2 发送话单
  • 步骤3 接收并解析话单
  • 话单消息类型及结构体
  • 实现自己的话单