Webrtc function enhancement and integrate for sip library
npm install @xccjh/sipshell
$ yarn add @94ai/sip
`
使用
`js
import userAgentManager from '@94ai/sip' // 获取代理用户实例
const userAgentManager = UserAgentFactory.getUserAgentManager()
// 获取实例初始化状态
`
$3
`js
userAgentManager.prepareUserAgent({ // 配置设置
refresh(path, value) {
userAgentStatus[path] = value // 外部想要响应状态可以实时更新外部的userAgentStatus
}
}, { // 事件监听
onInvite(invitation) { // 当有外呼过来
playMedia('localAudio') // 播放模拟来电响铃
popNotice() // 提示通知 来电了
invitation.stateChange.addListener((state) => { // 一旦执行接听电话,注意初始化invitation不是session
switch (state) {
case SessionState.Initial:
break
case SessionState.Establishing:
break
case SessionState.Established: // session建立后就可拿到webrtc的各种基础api,如userAgentManager.getPeerConnection(),如userAgentManager.getSenders()等等
const mediaElement1 = getMedia('remoteAudio') // 获取audio dom
mediaElement1.srcObject = userAgentManager.getStream() // 获取流
mediaElement1.play() // 播放audio
break
case SessionState.Terminating:
// fall through
case SessionState.Terminated: // 在挂断电话时候会执行
const mediaElement2 = getMedia(id) // 获取audio dom
mediaElement2.srcObject = null
mediaElement2.pause() // 释放audio
break
default:
throw new Error('Unknown session state.')
}
})
}
})
`
$3
`js
const acceptInvite = () => {
refreshShowTime() // 重新计算通话时长
pauseMedia('localAudio') // 暂停来电铃声
userAgentManager.acceptInvite() // 接入电话流
}
`
$3
`js
const ignoreInvite = () => {
pauseMedia('localAudio')
userAgentManager.ignoreInvite()
}
`
$3
`js
const hangUpInvite = () => {
refreshShowTime()
userAgentManager.hangUpInvite()
}
`
$3
`js
const disconnect = () => {
refreshShowTime()
userAgentManager.dispose() // 一个方法安全销毁
}
`
$3
`js
const unMuteLocalAudio = () => {
userAgentManager.unMuteLocalAudio()
}
`
$3
`js
const muteLocalAudio = () => {
userAgentManager.muteLocalAudio()
}
`
$3
`js
const unMuteRemoteAudio = () => {
userAgentManager.unMuteRemoteAudio()
}
`
$3
`js
const muteRemoteAudio = () => {
userAgentManager.muteRemoteAudio()
}
`
$3
`js
const senders = userAgentManager.getSenders()
const receivers = userAgentManager.getReceivers()
const peerConnection = userAgentManager.getPeerConnection()
`
$3
`js
const userAgent = userAgentManager.getUserAgent()
const sessionDescriptionHandler = userAgentManager.getSessionDescriptionHandler()
const currentInvitation = userAgentManager.getCurrentInvitation()
const currentInviter = userAgentManager.getCurrentInviter()
const localMixedMediaStream = userAgentManager.getStream()
`
$3
`ts
interface userAgentStatus {
connectStatus: boolean, // 是否已链接
registerStatus: boolean, // 是否已注册
invitatingStatus: boolean, // 是否正拨出
incomingStatus: boolean, // 是否正来电
answerStatus: boolean, // 是否正接听
}
const userAgentStatus: userAgentStatus = userAgentManager.getUserAgentStatue()
`
$3
`js
import { userAgentFactory } from '@94ai/sip'
// userAgentOptions 相关配置查看 UserAgentOptions
userAgentFactory.getUserAgent(userAgentOptions)
// 默认配置
export const userAgentDefault = {
authorizationPassword, // 坐席组用户密码
authorizationUsername, // 坐席组用户名
viaHost, // 指纹,唯一标志,用来排查线路故障
uri: UserAgent.makeURI(sipServerHost), // sip服务地址
logLevel: 'error', // sip日志查看等级,一般情况下生产开error,开发用debugger
transportOptions: {
server: webSocketServerHost // websocket协商地址
},
}
``