通话功能 (PhoneOperator)
PhoneOperator 对象用于管理通话。每通通话都是通过 sessions 属性缓存,该属性本身是一个包含了不同通话实例的地图,即
Map<string, Session>,每个通话实例都被表示为一个
Session。本文介绍与通话功能 (PhoneOperator 对象) 相关的属性、方法及事件。
属性
| 属性名 | 类型 | 说明 |
|---|---|---|
| currentSessionID | string | 标识当前通话 (Session) 的通话 ID。 |
| reRegistryPhoneTimes | number | 指定可重新注册 SIP UA (User Agent) 的次数。 |
| deviceIds | { cameraId?: string; microphoneId?: string;} | 指定音视频输入设备的 ID,包含摄像头 ID 及麦克风 ID。 |
| sessions | Map<string, Session> | 通话 Session 的缓存 Map 对象, key 为 callId。 |
| currentSession | Session | 当前通话 Session。 |
| isRegistered | boolean | 是否成功注册 SIP UA。 |
| extraHeaders | string[] | 额外的 SIP 请求头。 |
| videoPlan | string | 获取视频服务状态。 |
| recordPermissions | number | 是否有录音权限:
|
| incomingList | session[] | 来电列表。 |
| isNoneCamera | boolean | 是否无摄像头。 |
| isMaxCall | boolean | 是否已达最大通话数量。 |
方法
- 方法概览
- 监听事件
-
方法 on(eventName:string,listener: (...args: any[]) => void)方法参数 eventName:事件名称。listener:回调函数。
返回值 this注: 关于可监听的事件,参见 事件。
- 开始注册 SIP UA
- SIP UA 注册成功后即可呼出和接听电话。注: 调用此方法之前,确保你已监听需要监听的事件,否则可能会错失某些事件的通知。
- 重新注册 SIP UA
- 该方法会在 phone 实例内部调用。外部程序无需调用此方法,以免出现异常。
- 发起呼叫
-
方法 call(number: string, option?: CallOptions, transferId?: string)方法参数 number:被叫号码。option:可选。指定通话选项。transferId:可选。咨询转接通话的 ID。注: 当有 transferId 时则为咨询转接通话,异步函数。
返回值 Promise<Result>
- 拒接来电
-
方法 reject(callId: string)方法参数 callId:通话的唯一 ID。返回值类型 boolean
- 接听来电
-
方法 answer(callId: string, option?: CallOptions, allowNoneCamera: boolean = true)方法参数 callId:通话的唯一 ID。option:可选。指定通话选项。allowNoneCamera:是否允许无摄像头接听。
返回值 Promise<Result>
- 挂断通话
-
方法 hangup(callId: string)方法参数 callId:通话的唯一 ID。返回值类型 boolean
- 盲转接通话
-
方法 blindTransfer(callId: string, number: string)方法参数 callId:通话的唯一 ID。number:通话转接对象的号码。
返回值类型 boolean
- 咨询转接通话
-
方法 attendedTransfer(callId: string, number: string)方法参数 callId:通话的唯一 ID。number:通话转接对象的号码。
返回值类型 boolean
- 保持通话
-
方法 hold(callId: string)方法参数 callId:通话的唯一 ID。返回值类型 boolean
- 恢复通话
-
方法 unhold(callId: string)方法参数 callId:通话的唯一 ID。返回值类型 boolean
- 发送 DTMF
-
方法 dtmf(callId: string, dtmf: string)方法参数 callId:通话的唯一 ID。dtmf:字符串 (0123456789*#)
返回值类型 boolean
- 静音通话
-
方法 mute(callId: string)方法参数 callId:通话的唯一 ID。返回值类型 boolean
- 取消静音通话
-
方法 unmute(callId: string)方法参数 callId:通话的唯一 ID。返回值类型 boolean
- 开始录音
-
方法 startRecord(callId: string)方法参数 callId:通话的唯一 ID。返回值类型 boolean
- 暂停录音
-
方法 pauseRecord(callId: string)方法参数 callId:通话的唯一 ID。返回值类型 boolean
- 结束通话
-
方法 terminate(callId: string, type: 'hangup' | 'reject' | 'terminate' = 'terminate')方法参数 callId:通话的唯一 ID。type:通话结束类型。
返回值类型 boolean
- 重新协商通话
-
方法 renegotiate(callId: string, offerToReceiveVideo?: boolean)方法参数 callId:通话唯一标识。offerToReceiveVideo:是否接收视频。
返回值类型 boolean
- 音频转视频
-
方法 audioToVideo(callId: string, allowNoneCamera: boolean = true)方法参数 callId:通话唯一标识。allowNoneCamera:是否允许无摄像头。
返回值 Promise<Result> - 视频转音频
-
方法 videoToAudio(callId: string)方法参数 callId:通话唯一标识。返回值类型 boolean
- 断开 SIP UA 注册
-
方法 disconnect()方法参数 空。 返回值类型 boolean
- 获取全部通话 (sessions 属性)
- 该方法将以数组的形式返回。
- 设置当前通话 (currentSession)
-
方法 setCurrentSession(callId: string)方法参数 callId:通话的唯一 ID。返回值类型 boolean
- 获取当前通话 (currentSession)
-
方法 getCurrentSession()方法参数 空。 返回值 Session
- 更新 Session 的静态属性
-
方法 setSessionStaticStatus(callId: string, staticStatus: Partial<StaticCallStatus>, startManualModel?: boolean)方法参数 callId:通话的唯一 ID。staticStatus:Session 的静态属性包括name、avatar、company。startManualModel:可选。是否启用手动模式,启用后将不再自动更新静态属性。
返回值类型 boolean
- 销毁 PhoneOperator 对象
- 此方法将解除所有订阅事件,停止 SIP UA 实例,并删除所有 session。
事件
| 事件名称 | 事件说明 | 报告参数 |
|---|---|---|
| connected | SIP 服务连接成功 | 空 |
| disconnected | SIP 服务断开连接 | 空 |
| registered | SIP UA 注册成功 | 空 |
| registrationFailed | SIP UA 注册失败 |
|
| newRTCSession | 创建新的通话实例 (Session) |
|
| incoming | 来电 |
|
| startSession | 添加通话实例 (Session) 至存储通话的 Map (sessions) 中 |
|
| recordPermissionsChange | 录音权限发生改变 |
|
| deleteSession | 删除通话实例 (Session) |
|
| isRegisteredChange | SIP UA 注册状态是否发生改变 |
|