2.0.2 • Published 6 months ago

sip-mix-agora-web v2.0.2

Weekly downloads
-
License
MIT
Repository
-
Last release
6 months ago

TOC

1 SIP-MIX-SDK 说明

SIP-MIX-SDK 基于JsSIP封装,用于和ACD进行信令交互,支持Agora SDK媒体协商方式。

2 API 说明

2.1 获取单例

获取SipMix类单例
@param domain     服务器域名或IP
@param port       服务器端口,默认5049
@param path       服务路径,默认webcall
@returns {SipMix} 返回SipMix实例

static SipMix.getInstance({
    domain: string,
    port: number = 5049,
    path: string = 'webcall',
}) : SipMix

注: 
1、如果不需要单例,也可以直接new SipMix对象,构造函数参数一致。
2、浏览器音视频通话需要HTTPS支持,如果没有证书可能会被浏览器拦截请求,请保证环境正常。

2.2 销毁单例

移除事件监听,销毁SipMix类单例
static SipMix.destroyInstance() : void

2.3 创建服务代理对象

创建SIP UA,进行服务器连接。(如开启注册模式,则在连接服务器后开始SIP注册)
@param deviceId     设备ID/主叫号码/分机号码,默认'H5User'
@param password     设备密码,选填
@param register     是否开启SIP 注册模式。默认false
@param debug        是否打开debug模式。默认false

sipMix.start({
    deviceId: string = 'H5User', 
    password: string, 
    register: boolean = false, 
    debug: boolean = false
}) : void

注:
1、调用后会触发connecting、connected、disconnected等事件
2、如果register为true,可能触发registered、registrationFailed等事件

2.4 呼叫号码

给被叫号码打电话
@param target         被叫号码
@param video          是否支持视频,默认为true
@param audio          是否支持音频,默认为true
@param extraHeaders   信令扩展头,在SIP消息头部添加的扩展头,部分业务需要。
@param token          用于向第三方鉴权。
@param userToUserData 透明参数,用于将参数携带到被叫方。
@param videoCodec     用于告知媒体服务器当前视频编码格式

sipMix.call({
    target: string, 
    video: boolean = true, 
    audio: boolean = true, 
    extraHeaders: array = [], 
    token: string, 
    userToUserData: string,
    videoCodec: string = 'H264'
}) : void

注:
1、token用于呼叫时由业务系统带入,ACD拿到后再到业务系统侧鉴权
2、后续可能会触发newSession、remoteRing、accepted、confirmed、end、failed等事件

2.5 发送会话内消息

通话过程中发送会话内消息。
@param sessionId   会话ID,多会话实例时需要传递,单会话实例时,可以不传,SDK自行判断会话实例。
@param contentType 消息类型
@param content     消息体

sipMix.sendInfo({
    sessionId: string,
    contentType: string = 'application/json',
    content: string | object
}) : void

注:
1、content为object时,SDK会使用JSON.stringify转换成字符串发送。

2.6 发送DTMF拨号

通话过程中发送二次拨号,可用于IVR菜单导航输入等。
@param sessionId   会话ID,多会话实例时需要传递,单会话实例时,可以不传,SDK自行判断会话实例。
@param tones       拨号字符串,如: '1234#', 1

sipMix.sendDTMF({
    sessionId: string,
    tones: string | number
}) : void

2.7 挂机

通话挂机。
@param sessionId   会话ID,多会话实例时需要传递,单会话实例时,可以不传,SDK自行判断会话实例。

sipMix.hangup({
    sessionId: string
}) : void

2.8 指定媒体SDK AppID

当平台配置多个媒体SDK AppID,可以指定某一个AppID做特殊处理。不调用时,使用平台默认媒体AppID。
@param appId   平台配置的某个媒体SDK AppId。

sipMix.setMediaSDKAppId( appId: string ) : void

3 事件说明

3.1 事件统一调用方式

@param eventName 事件名称
@param callback  事件处理回调

sipMix.on(eventName: string, callback: function)

3.2 事件回调

3.2.1 connecting

服务器连接中,调用start方法后触发
connecting () : void

3.2.2 connected

服务器已连接
connected () : void

3.2.3 disconnected

服务器连接断开
disconnected () : void

3.2.4 registered

注册成功,仅在start 参数中register参数为true时会触发
registered () : void

3.2.5 registrationFailed

注册失败,仅在start 参数中register参数为true时会触发
@param cause 原因

registrationFailed (cause: string) : void

注:
1、Failure and End Causes: https://jssip.net/documentation/3.10.x/api/causes/

3.2.6 unregistered

注册后注销,仅在start 参数中register参数为true时会触发
@param cause 原因

unregistered (cause) : void

注:
1、Failure and End Causes: https://jssip.net/documentation/3.10.x/api/causes/

3.2.7 newSession

产生新的会话实例
@param sessionId         SDK区分不同会话的sessionId
@param uri               被叫号码SIP URI, 如: sip:0123456789@www.xxx.com:5049
@param userNumber        被叫号码,如: 0123456789

newSession ({
    sessionId: string,
    uri: string,
    userNumber: string,
}) : void

3.2.8 remoteRing

远端振铃
@param sessionId         SDK区分不同会话的sessionId
@param uri               被叫号码SIP URI, 如: sip:0123456789@www.xxx.com:5049
@param userNumber        被叫号码,如: 0123456789
@param callId            平台callId
@param sdkParams         媒体SDK的参数
@param sdkParams.appId   appId
@param sdkParams.channel channelId Or roomId
@param sdkParams.userId  uid Or userId
@param sdkParams.token   token Or userSig

remoteRing ({
    sessionId: string,
    uri: string,
    userNumber: string,
    callId: string,
    sdkParams: {
        appId: string,
        channel: string,
        userId: string,
        token: string
    }
}) : void

3.2.9 accepted

收到远端应答信令
@param sessionId         SDK区分不同会话的sessionId
@param uri               被叫号码SIP URI, 如: sip:0123456789@www.xxx.com:5049
@param userNumber        被叫号码,如: 0123456789
@param callId            平台callId
@param sdkParams         媒体SDK的参数
@param sdkParams.appId   appId
@param sdkParams.channel channelId Or roomId
@param sdkParams.userId  uid Or userId
@param sdkParams.token   token Or userSig

accepted ({
    callId: string,
    sessionId: string,
    uri: string,
    userNumber: string,
    sdkParams: {
        appId: string,
        channel: string,
        userId: string,
        token: string
    }
}) : void

3.2.10 confirmed

本地确认会话建立
@param sessionId         SDK区分不同会话的sessionId
@param uri               被叫号码SIP URI, 如: sip:0123456789@www.xxx.com:5049
@param userNumber        被叫号码,如: 0123456789
@param callId            平台callId
@param sdkParams         媒体SDK的参数
@param sdkParams.appId   appId
@param sdkParams.channel channelId Or roomId
@param sdkParams.userId  uid Or userId
@param sdkParams.token   token Or userSig

confirmed ({
    callId: string,
    sessionId: string,
    uri: string,
    userNumber: string,
    sdkParams: {
        appId: string,
        channel: string,
        userId: string,
        token: string
    }
}) : void

3.2.11 failed

会话建立失败,如会话未建立前挂机等
@param sessionId         SDK区分不同会话的sessionId
@param uri               被叫号码SIP URI, 如: sip:0123456789@www.xxx.com:5049
@param userNumber        被叫号码,如: 0123456789
@param callId            平台callId(平台会话未建立之前无callId)
@param originator        'local'/'remote'/'system' 呼叫失败方
@param cause             失败原因 Failure and End Causes 

failed ({
    sessionId: string,
    uri: string,
    userNumber: string,
    callId: string,
    originator: string,
    cause: string,
}) : void

注:
1、Failure and End Causes: https://jssip.net/documentation/3.10.x/api/causes/

3.2.12 ended

会话结束
@param sessionId         SDK区分不同会话的sessionId
@param uri               被叫号码SIP URI, 如: sip:0123456789@www.xxx.com:5049
@param userNumber        被叫号码,如: 0123456789
@param callId            平台callId(平台会话未建立之前无callId)
@param sdkParams         媒体SDK的参数(平台会话未建立之前无sdkParams)
@param sdkParams.appId   appId
@param sdkParams.channel channelId Or roomId
@param sdkParams.userId  uid Or userId
@param sdkParams.token   token Or userSig
@param originator        'local'/'remote'/'system' 呼叫失败方
@param cause             失败原因 Failure and End Causes 

ended ({
    sessionId: string,
    uri: string,
    userNumber: string,
    callId: string,
    sdkParams: {
        appId: string,
        channel: string,
        userId: string,
        token: string
    },
    originator: string,
    cause: string
}) : void

注:
1、Failure and End Causes: https://jssip.net/documentation/3.10.x/api/causes/

3.2.13 newInfo

收到会话内消息
@param sessionId         SDK区分不同会话的sessionId
@param uri               被叫号码SIP URI, 如: sip:0123456789@www.xxx.com:5049
@param userNumber        被叫号码,如: 0123456789
@param callId            平台callId(平台会话未建立之前无callId)
@param sdkParams         媒体SDK的参数
@param sdkParams.appId   appId
@param sdkParams.channel channelId Or roomId
@param sdkParams.userId  uid Or userId
@param sdkParams.token   token Or userSig
@param conentType        发送时指定的消息体类型
@param content           消息内容字符串


newInfo ({
    sessionId: string,
    uri: string,
    userNumber: string,
    callId: string,
    sdkParams: {
        appId: string,
        channel: string,
        userId: string,
        token: string
    }
    contentType: string,
    content: string
}) : void

3.2.14 socketError

socket连接发生错误
@param e socket连接错误

socketError (e: Error) : void

4 其他说明

SDK支持\<script>标签引入和 ES6 import 引入方式,以\<script>标签引入示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>script 标签引入</title>
    <script src="./SIP_MIX_WEB.js"></script>
</head>
<body onload="onload()">

<h1>
  This is a test page for script import.
</h1>

<script>
  window.config = {
    domain: 'videocc.cincc.cn',
    path: 'webcall',
    port: 5049
  }
  function onload () {
    const sipMix = SIP_MIX_WEB.getInstance(window.config)
    console.info(sipMix)
    sipMix.start({
      password: '',
      register: false,
      debug: true
    })
  }
</script>
</body>
</html>

以import语法引入示例:

...
import SipMix from '@/libs/SIP_MIX_WEB'
...
cosnt sipMix = SipMix.getInstance({
  domain, port,
  path, debug
})
...
sipMix.on('connected', () => this.prompt = '服务器已连接。')
...
sipMix.strat({
  password,
  register
})

由于使用非NPM安装方式,在 import 引入后,可能会引起项目报错,如:

ERROR in [eslint]                                                              
...src\libs\SIP_MIX_WEB.js

  2:112     error  'define' is not defined                                                              no-undef
  2:123     error  'define' is not defined                                                              no-undef
  2:705     error  Empty block statement                                                                no-empty
  2:774     error  Empty block statement                                                                no-empty
  2:1678    error  Empty block statement                                                                no-empty
  2:8416    error  'n' is defined but never used                                                        no-unused-vars
  2:16124   error  Do not access Object.prototype method 'hasOwnProperty' from target object            no-prototype-builtins
  2:16299   error  Do not access Object.prototype method 'hasOwnProperty' from target object            no-prototype-builtins
...

可以在项目目录下修改 .eslintignore 文件,将SDK文件路径写入,如

src/libs/SIP_MIX_WEB.js
2.0.2

6 months ago

2.0.1

6 months ago

2.0.0

6 months ago