1.1.47 • Published 2 months ago

weihu-agent-sdk v1.1.47

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

座席端SDK

适用版本weihu-agent-sdk_1.1.47

使用SDK之前,请确保你有一个可使用的SIP话机或使用WebRTC插件, 用于完成通话

DEMO获取

获取demo, 点击下载

安装

<script src="/weihu-agent-sdk/weihu-agent-sdk_1.1.47.js"></script>

or

npm install weihu-agent-sdk

快速使用

import WeihuAgentSdk from 'weihu-agent-sdk';

const op = {
    el: '#ElementId',
    url: 'WS地址',
    agentNumber: '座席工号',
    password: '座席密码',
    companyShortName: '企业简称'
}
const weihuAgentSdk = new WeihuAgentSdk(op);

weihuAgentSdk.call('21000');
weihuAgentSdk.on('MakeCall', (res) => {
    // 外呼发起
});
weihuAgentSdk.on('After', (res) => {
    // 通话结束
});

初始化配置 SDKOptions

new WeihuAgentSdk(options)中,options配置项如下:

  • url: string 必传

    远程websocket服务地址

  • companyShortName: string 必传

    使用该应用的企业简称,可以在OBC查看。

  • agentNumber: string 必传

    登录的目标坐席工号。

  • agentPassword: string 必传

    登录的目标坐席密码。

  • connectAccount: string 必传

    远程队列服务账号。

  • connectPassword: string 必传

    远程队列服务密码。

  • subscribePath: string 必传

    远程队列服务订阅地址。

  • host: string 必传

    远程队列服务连接Virtual Host地址。

  • el: string default: ''

    接收一个元素选择器,用于指定SDK的UI控件的显示位置, 不传则不展示UI控件。

<div id="sdk-box"></div>

const sdk = new WeihuAgentSdk({
    el: '#sdk-box',
    ...
});

如果配置正确, 会有如图控件出现在页面上的指定元素内。

npm.io

  • pingInterval: number default: 10000

    ws链接心跳间隔, 必须大于0

  • timeout: number default: 5000

    请求超时时间。

  • maxReconnect: number default: 10

    最大重连次数, 当链接失败或链接关闭时, 会自动发起重新链接, 连续重连次数达到该值的时候会停止重连, 连接成功之后会重新计算, 配置时请注意不要超过浏览器的最大链接数量, 以下是各个浏览器的最大链接数量, 以供参考: Chrome: 256个 FireFox: 200个 safari: 1273个

  • unDownloadLog: boolean default: false

    是否关闭下载日志

  • softPhoneFactory: Function

    只有当loginType3的时候才生效

    指定WebRTC话机构造函数, 未指定则在全局对象`window`上查找 `SoftPhoneSdk`, 当座席成功登录之后, 话机会自动注册, 并用采用默认配置进行通话
import WeihuAgentSdk from 'weihu-agent-sdk';
import SoftPhoneSdk from 'soft-phone-sdk';

const weihuAgentSdk = new WeihuAgentSdk({
	loginType: 3,
	softPhoneFactory: SoftPhoneSdk,
	...
});

const loginAndReconnect = () => {
	// 获取软话机实例, 用于对话机操作
	const softPhoneInstance = weihuAgentSdk.getSoftPhoneInstance();
	
	softPhoneInstance.on('Registered', () => {
		console.log('话机注册完成');
	})
}

weihuAgentSdk.on('Login', () => loginAndReconnect());
weihuAgentSdk.on('Reconnect', () => loginAndReconnect());

配合WebRTC话机

当前版本SDK内置了WebRTC话机, 在https环境中使用loginType: 3, 自动就会使用WebRTC话机

API

const sdk = new WeihuAgentSdk(options)中,可以通过sdk直接调用的方法。

  • getVersion(): string

    获取当前SDK版本号。

  • getLoginType(): LoginType

    获取当前登录类型

  • init(sdkOption ?: SDKOptions)

    接收一个SDK配置对象,将当前实例再次初始化,new WeihuAgentSdk(options)会自动调用,当你需要重新初始化SDK的时候可以使用, 失败会抛异常。

  • connect()

    发起ws连接请求,返回一个连接实例,new WeihuAgentSdk(options)会自动调用,当你需要手动建立新连接的时候可以使用。

  • login(loginConfig ?: LoginOptions)

    使用初始化时候的配置进行登录, 或指定配置进行登陆。 LoginOptions成员如下:

属性名类型含义是否必填
agentNumberstring座席工号
passwordstring座席密码
companyShortNamestring企业简称
loginTypenumber登录话机类型1 sip话机; 2 手机; 3 WebRTC话机
  • logout()

    退出当前座席。

  • break()

    退出并断开连接,通话期间不允许断开。

  • call(called: string, calledType: number = 2)

    指定被叫,发起呼叫, calledType是呼叫类型 1为坐席号,2为手机。

  • hangup()

    挂断当前通话,拨通与呼叫中都可以使用。

  • busy(busyType ?: string)

    将当前座席的状态设置为忙碌Busy, 可以指定忙碌类型, 登录时会返回可选的忙碌类型。

  • idle()

    将当前座席的状态设置为空闲Idle

  • mute()

    开启静音, 通话中可使用。

  • unMute()

    解除静音, 开启静音后可使用。

  • transferCall (target: string, transferType: number)

    转接当前正在进行的通话,target表示要转接的目标,transferType表示转接目标的号码类型,1座席工号, 2手机号, 3技能组ID, 4 IVR模版ID。

  • consult(consultTarget: string)

    发起咨询,consultTarget表示要咨询的目标。

  • consultTransfer()

    咨询转接。

  • tripartiteCall()

    会议或三方通话。

  • 	对`sdk`的事件进行监听,当事件触发时调用`callback`, 返回一个监听的`uuid`用于取消监听, 支持的事件名称在[EventMap](#EventMap)部分找到。
const uuid = sdk.on('Open', data => {
    // 链接建立成功
})
  • 	对`sdk`的事件进行监听,当事件触发时调用`callback`, 返回一个监听的`uuid`用于取消监听, 支持的事件名称在[EventMap](#EventMap)部分找到, 与`on`不同的是, `once`绑定的事件在触发之后会自动解绑, 一次绑定只会触发一次。
const uuid = sdk.once('Open', data => {
    // 链接建立成功
})
  • off(eventName: string, uuidOrFn: string | Function): boolean

    取消一个SDK的事件监听, 需要指定eventName, 可以使用指定函数引用或监听的uuid
sdk.off('Open', uuid);
// or
sdk.off('Open', functionPointer);
  • isConnected(): boolean

    是否已链接

  • isLogin(): boolean

    是否已登录

  • getSoftPhoneInstance(): object

    当前使用的软话机实例, 用于对话机操作

班长座席 API

以下AIP的使用,需要当前登录座席是班长。

  • surveillance()

    发起一次监控请求。

  • surveillanceStart(filter ?: SurveillanceFilter, interval: number = 2000)

    开启监控, 自动发起监控请求 interval 是请求间隔, 默认两秒, filter 是监控信息的过滤, 当传递filter时, 必须包含groupId

属性名类型含义
SurveillanceFilter.groupIdstring技能组ID
SurveillanceFilter.agentNumberstring座席工号
SurveillanceFilter.agentNamestring座席名称
SurveillanceFilter.agentStatestring座席状态
SurveillanceFilter.callDirectionnumber呼入方向,0 呼入,1 呼出
  • surveillanceEnd()

    关闭监控

  • forceIdle(target: string)

    强制空闲,target表示目标座席工号。

  • forceBusy(target: string)

    强制忙碌,target表示目标座席工号。

  • forceLogout(target: string)

    强制退出,target表示目标座席工号。

  • listen(target: string)

    监听通话,target表示目标座席工号,目标必须处于通话中。

  • forceBreak(target: string)

    强制挂断通话,target表示目标座席工号,目标必须处于通话中。

  • forceInsert(target: string)

    强制插入通话,target表示目标座席工号,目标必须处于通话中。

  • intercept(target: string)

    拦截通话,target表示目标座席工号,目标必须处于通话中。

  • getStateByAgentId(agentNumber: string)

    获取指定座席工号的状态。

  • getIdleAgentByGroupId(groupId: string)

    获取技能组下的空闲坐席, 通过监听IdleAgent事件拿到数据。

  • getGroups()

    获取所有技能组, 通过监听GroupInfo事件拿到数据。

  • getAutoGroups()

    获取可预测外呼的技能组。

WebRTC话机相关API

当使用内置WebRTC话机时, 可以使用一下方法快速操作话机, 更多操作话机的方法请使用getSoftPhoneInstance

  • isRegistered()

    获取话机是否注册

  • register()

    发起话机注册

  • unregister()

    取消话机注册

  • stop()

    取消话机注册, 并断开链接

可以通过sdk.on方法绑定或解绑并取得响应数据的事件名称集合。

sdk.on('Login', res => { ... })

所有事件都会包含以下公共信息:

属性名类型含义
sequencenumber请求发起时间戳
eventTimenumber事件触发时间戳
nowStatestring座席当前状态
userdatastring用户透传数据, 使用setUserdata指定
typestring事件标识, 固定取值event
eventstring事件名称
dataany事件数据, 具体类型查看对应事件的回传数据
ivrParamstring一个json字符串, ivr交互参数,只有AgentRinging AgentAnswer Conversation After事件会携带

可监听的事件名称如下:

  • Open

    成功建立链接 回传数据类型: Frame 链接相关信息

  • Error

    建立链接失败 回传数据类型: Event 错误信息

  • Close

    链接关闭 回传数据类型: Frame 链接相关信息

  • Login

    登陆成功 回传数据类型: Object

属性名类型含义
domainstringSIP话机注册域
sipIdstringSIP号
sipPasswordstringSIP密码
tokenstring登陆SDK身份标识
agentTypenumber座席类型 0 普通座席;1 班长
groupIdListArray<string>座席所属技能组Id集合
busyTypestring所在企业配置的可选忙碌类型
  • Logout

    退出成功 回传数据类型: null

  • Reconnect

    重链成功, 只有首次登录和退出后的登录会触发Login, 在缓存token信息失效之前, 都会触发Reconnect, 用于恢复座席状态

    回传数据类型: `Object`
属性名类型含义
domainstringSIP话机注册域
sipIdstringSIP号
sipPasswordstringSIP密码
tokenstring登陆SDK身份标识
agentTypenumber座席类型 0 普通座席;1 班长
groupIdListArray<string>座席所属技能组Id集合
busyTypestring所在企业配置的可选忙碌类型
  • Idle

    制闲操作成功 回传数据类型: null

  • Busy

    制忙操作成功 回传数据类型: null

  • MakeCall

    发起通话成功 回传数据类型: null

  • MakeCallFail

    发起通话失败 回传数据类型: Object

属性名类型含义
causestring失败原因描述
  • AgentRinging

    座席振铃 回传数据类型: Object
属性名类型含义
callerstring主叫
calledstring被叫
inQueueTimenumber进入队列时间戳
callDirectionnumber呼叫方向(1: 呼入 2: 呼出)
  • AgentAnswer

    座席应答 回传数据类型: Object
属性名类型含义
callerstring主叫
calledstring被叫
inQueueTimenumber进入队列时间戳
callDirectionnumber呼叫方向(1: 呼入 2: 呼出)
  • CalledRinging

    被叫振铃 回传数据类型: Object
属性名类型含义
callerstring主叫
calledstring被叫
inQueueTimenumber进入队列时间戳
callDirectionnumber呼叫方向(1: 呼入 2: 呼出)
  • CalledAnswer

    被叫应答 回传数据类型: Object
属性名类型含义
callerstring主叫
calledstring被叫
inQueueTimenumber进入队列时间戳
callDirectionnumber呼叫方向(1: 呼入 2: 呼出)
  • Conversation

    通话中 回传数据类型: Object
属性名类型含义
callerstring主叫
calledstring被叫
inQueueTimenumber进入队列时间戳
callDirectionnumber呼叫方向(1: 呼入 2: 呼出)
callTypestringnormal(正常呼叫),consult(咨询),transfer(转接)listen(监听),forceInsert(强插),intercept(拦截)
  • TransferCall

    发起转接, 只有在通话中才能发起 回传数据类型: null

  • TransferCalling

    转接中 回传数据类型: null

  • TransferCallFail

    转接失败 回传数据类型: null

  • Listen

    发起监听 回传数据类型: null

  • Listening

    监听中 回传数据类型: null

  • ListenFail

    监听失败 回传数据类型: null

  • ForceBreak

    强制断开通话 回传数据类型: null

  • ForceInsert

    强制插入通话 回传数据类型: null

  • ForceInserting

    强制插入通话中 回传数据类型: null

  • ForceInsertFail

    强制插入通话失败 回传数据类型: null

  • Intercept

    拦截通话 回传数据类型: null

  • Intercepting

    拦截通话中 回传数据类型: null

  • InterceptFail

    拦截失败 回传数据类型: null

  • 	话后
    	回传数据类型: `Object`
属性名类型含义
callerstring主叫
calledstring被叫
inQueueTimenumber进入队列时间戳
callDirectionnumber呼叫方向(1: 呼入 2: 呼出)
recordPathstring录音文件路径
hangupDirectionnumber挂机方向,0本端,1对端
beginTimenumber开始时间
ringTimenumber振铃时间
answerTimenumber应答时间
endTimenumber结束时间
causenumber挂机原因cause码
datanumber挂机原因说明
callTypestringnormal(正常呼叫),consult(咨询),transfer(转接)listen(监听),forceInsert(强插),intercept(拦截)
agentAutoIdlenumber是否开启自动空闲, 1 开启 0 关闭
agentAutoIdleTimenumber自动空闲间隔秒, agentAutoIdle0时不生效
  • Kick

    被踢出 回传数据类型: undefined

  • SipError

    话机异常, 当话机取消注册时触发, 同时座席会退出 回传数据类型: null

  • QueueInfo

    队列等待消息 回传数据类型: Object

属性名类型含义
groupIDnumber技能组
groupWaitNumbernumber当前技能组等待数量
isInQueuenumber1加入队列,0移出队列
handleAgentIDstring分配的座席工号
dataArray<Info>分配的座席工号
Info.callerstring主叫
Info.calledstring被叫
Info.groupIDnumber技能组ID
Info.inQueueTimenumber加入队列时间
  • 技能组信息 回传数据类型: Object

属性名类型含义
groupListArray<Group>座席信息集合
Group.idstring技能组ID
Group.namestring技能组名称
Group.typenumber技能组类型
  • 技能组信息 回传数据类型: Object

属性名类型含义
agentListArray<Agent>指定技能组下的空闲座席集合
Agent.agentIdstring座席工号
Agent.agentNumberstring座席工号
Agent.agentNamestring座席名称
  • Surveillance

    座席监控信息 回传数据类型: Object
属性名类型含义
infoListArray<AgentInfo>分配的座席工号
AgentInfo.companyIdnumber座席企业ID
AgentInfo.agentIDnumber座席ID
AgentInfo.agentNumberstring座席工号
AgentInfo.agentNamestring座席姓名
AgentInfo.nowStatestring当前状态
AgentInfo.operatingTimenumber当前状态维持时间毫秒数
AgentInfo.peerIdstring通话对端(非通话中为空)
AgentInfo.groupListArray<GroupInfo>座席所属技能组
GroupInfo.idstring座席所属技能组id
GroupInfo.namestring座席所属技能组名称
  • Exception

    UI操作异常事件 回传数据类型: Exception
属性名类型含义
versionstring当前SDK版本信息
messagestring错误描述信息
  • 异常处理

    异常通常产生自非法的数据, 配置, 参数和方法调用的时机与顺序, 目前可能需要捕获的异常有三个场景, 捕获这些异常可以提供给使用者更多提示信息。 1. 通过sdk句柄调用方法; 2. sdk自带UI使用过程中; 3. 发送命令之后, 来自远端回执的异常;

  • 调用SDK方法中的异常捕获

const weihuAgentSdk = new WeihuAgentSdk({...});
/**
  * 因为call方法需要传入一个被叫, 这里没有传入, 所以会抛出一个异常
  */
weihuAgentSdk.call();
/**
  * 捕获异常
  */
try {
	weihuAgentSdk.call();
} catch (e) {
	console.log(e.message); // 被叫不能为空
}
  • SDK提供UI使用过程中的异常捕获

  • 来自远端回执的异常捕获

    使用sdk自带UI过程中和来自远端回执的异常捕获方式相同, 由于方法不被开发人员调用, 所以不能直接使用try catch, 监听Exception事件捕获异常。
// <div id="sdk-box"></div>
const weihuAgentSdk = new WeihuAgentSdk({ el: '#sdk-box', ... });
/**
  * 操作控件, 不填写被叫号码的情况, 直接点击呼叫按钮
  *
  * 捕获异常
  */
  weihuAgentSdk.on('Exception', e => {
  	console.log(e.message); // 被叫不能为空
  })

进入话后状态时, 会携带causedata, 说明进入话后的原因, 以下是对照表:

枚举cause说明
NORMAL_CLEARING0正常结束
FILE PLAYED0正常结束
NONE0正常结束
OK0正常结束
SESSION_TIME_OUT901session超时
ORIGINATE_TIME_OUT902发起呼叫超时
UNALLOCATED_NUMBER1001主叫号码不可用
NO_ROUTE_TRANSIT_NET1002被叫号码不可用
NO_ROUTE_DESTINATION1003找不到被叫
NO_ROUTE1004找不到路由
CHANNEL_UNACCEPTABLE1006通话失败
CALL_AWARDED_DELIVERED1007呼叫前转
USER_BUSY1017用户忙
BUSY1017用户忙
NO_USER_RESPONSE1018被叫无响应
NO_ANSWER1019久叫不应
CAUSE4801016被叫未应答
SUBSCRIBER_ABSENT1020被叫号码无效
CALL_REJECTED1021拒绝应答
NUMBER_CHANGED1022号码改变
REDIRECTION_TO_NEW_DESTINATION1023重定向到新的号码
EXCHANGE_ROUTING_ERROR1025路由错误
DESTINATION_OUT_OF_ORDER1027呼叫受限
INVALID_NUMBER_FORMAT1028无效的号码格式
FACILITY_REJECTED1029被叫拒接
RESPONSE_TO_STATUS_ENQUIRY1030状态查询响应
NORMAL_UNSPECIFIED1031未指定错误
NORMAL_CIRCUIT_CONGESTION1034通信电路错误
NETWORK_OUT_OF_ORDER1038网络不可达
NORMAL_TEMPORARY_FAILURE1041临时故障
SWITCH_CONGESTION1042交换机繁忙
ACCESS_INFO_DISCARDED1043访问信息被丢弃
REQUESTED_CHAN_UNAVAIL1044请求不可用
PRE_EMPTED1045
FACILITY_NOT_SUBSCRIBED1050设备受限
OUTGOING_CALL_BARRED1052外呼阻塞
INCOMING_CALL_BARRED1054呼入阻塞
BEARERCAPABILITY_NOTAUTH1057承载能力未经授权
BEARERCAPABILITY_NOTAVAIL1058目前暂不提供承载能力
SERVICE_UNAVAILABLE1063服务不可用
UNKNOWN1063服务不可用
BEARERCAPABILITY_NOTIMPL1065没有权限使用该功能
USER_NOT_REGISTERED1066话机未注册
CHAN_NOT_IMPLEMENTED1067找不到路由
FACILITY_NOT_IMPLEMENTED1069设备不支持所请求的服务
SERVICE_NOT_IMPLEMENTED1079未实现所请求的服务
INVALID_CALL_REFERENCE1081当前网络不支持此功能
INCOMPATIBLE_DESTINATION1088不兼容的目的地
INVALID_MSG_UNSPECIFIED1095无效消息
MANDATORY_IE_MISSING1096消息不完整
MESSAGE_TYPE_NONEXIST1097无法识别的消息类型
WRONG_MESSAGE1098当前状态下不能处理该消息
IE_NONEXIST1099未识别的参数
INVALID_IE_CONTENTS1100编码未实现
WRONG_CALL_STATE1101消息与呼叫状态不兼容
RECOVERY_ON_TIMER_EXPIRE1102呼叫超时
MANDATORY_IE_LENGTH_ERROR1103参数不存在或未实现
PROTOCOL_ERROR1111协议错误
INTERWORKING1127已完成互通呼叫
NO_CALLNUM1128未获取到码号配置
SUCCESS0成功//1142
FILE NOT FOUND1401文件不存在
PLAYBACK ERROR1402放音失败
ORIGINATOR_CANCEL1487呼叫取消
CANCEL1487呼叫取消
CRASH1500紧急故障
SYSTEM_SHUTDOWN1501系统关闭
LOSE_RACE1502丢失呼叫
MANAGER_REQUEST1503强制挂机
BLIND_TRANSFER1600盲转
ATTENDED_TRANSFER1601咨询转
ALLOTTED_TIMEOUT1602分配超时
USER_CHALLENGE1603用户竞争
MEDIA_TIMEOUT1604媒体超时
PICKED_OFF1605被拦截
PROGRESS_TIMEOUT1607振铃超时
INVALID_GATEWAY1608网关不可用
GATEWAY_DOWN1609网关关闭
INVALID_URL1610错误的URL
INVALID_PROFILE1611错误的配置
NO_PICKUP1612没有摘机
SRTP_READ_ERROR1613SRTP读取错误
NO_SIPGATEWAY1614未获取到可用网关
INVALID_UUID_ERROR1615无效的uuid
Cannot stop record session!3000无法停止录音
No such channel!1004呼叫不存在
NONE0
NO_SUCH_FS1129找不到fs
NO_PNS3001未找到绑定的隐私号信息
NO_CALL_LOG3005未找到回拨信息
NO_PNS_ERROR3002隐私号绑定信息有误
DISPLAY_CALLER_EMPTY3003外显号码池为空
TEL_X_IS_NULL3004隐私号小号为空
INBOUND_BRIDGE_ERROR3100呼入转接失败
NO_REASON8888未找到该错误原因
EXECUTE_SERVICE_OFFLINE2002转接到的模块不在线
RS_FLOW_TIMEOUT2003机器人配置错误
RS_FLOW_BRIDGE_FAILURE2004机器人转接失败
RS_FLOW_RESPONSE_TIMEOUT2005机器人响应超时
RINGING_BUSY2101用户占线
RINGING_NOANSWER2102无人接听
LINE_BUSY2103网络忙
LINE_FAULT2104线路故障
STATUS_NOTINAREA2105不在服务区
STATUS_PAUSE2106暂停服务
STATUS_STOP2107停机
STATUS_UNABLECONNECT2108暂时无法接通
STATUS_SHUTDOWN2109关机
STATUS_STOPANDKEEP2110停机保号
STATUS_LIMITED2111呼叫受限
STATUS_WAITING2112呼叫等待
STATUS_TRANSFER2113呼叫转移
NUMBER_EMPTY2114空号
NUMBER_WRONG2115号码错误
NUMBER_INVALID2116号码无效
NUMBER_FOREIGN2117外地号码需加零
NUMBER_LOCAL2118本地不需加零
GLOBAL_BLACKLIST4001全局黑名单
GROUP_BLACKLIST4002技能组黑名单
1.1.47

2 months ago

1.1.45

3 months ago

1.1.41

4 months ago

1.1.44

3 months ago

1.1.43

4 months ago

1.1.42

4 months ago

1.1.39

5 months ago

1.1.34

7 months ago

1.1.38

5 months ago

1.1.37

6 months ago

1.1.36

6 months ago

1.1.35

7 months ago

1.1.29

9 months ago

1.1.28

9 months ago

1.1.30

8 months ago

1.1.33

7 months ago

1.1.32

8 months ago

1.1.31

8 months ago

1.1.16

11 months ago

1.1.15

11 months ago

1.1.14

11 months ago

1.1.19

11 months ago

1.1.18

11 months ago

1.1.17

11 months ago

1.1.23

10 months ago

1.1.22

10 months ago

1.1.21

10 months ago

1.1.20

10 months ago

1.1.27

9 months ago

1.1.26

9 months ago

1.1.25

9 months ago

1.1.24

10 months ago

1.0.3-5.80

1 year ago

1.1.1

1 year ago

1.0.3-5.79

1 year ago

1.1.9

1 year ago

1.1.8

1 year ago

1.1.7

1 year ago

1.1.6

1 year ago

1.1.5

1 year ago

1.1.4

1 year ago

1.1.3

1 year ago

1.1.12

12 months ago

1.0.3-5.75

1 year ago

1.1.11

12 months ago

1.0.3-5.76

1 year ago

1.1.10

1 year ago

1.0.3-5.78

1 year ago

1.0.3-5.71

1 year ago

1.0.3-5.72

1 year ago

1.0.3-5.73

1 year ago

1.1.13

12 months ago

1.0.3-5.69

1 year ago

1.0.3-5.53

1 year ago

1.0.3-5.50

1 year ago

1.0.3-5.51

1 year ago

1.0.3-5.52

1 year ago

1.0.3-5.48

1 year ago

1.0.3-5.49

1 year ago

1.0.3-5.17

2 years ago

1.0.3-5.18

2 years ago

1.0.3-5.19

2 years ago

1.0.3-5.46

1 year ago

1.0.3-5.47

1 year ago

1.0.3-5.42

1 year ago

1.0.3-5.43

1 year ago

1.0.3-5.44

1 year ago

1.0.3-5.45

1 year ago

1.0.3-5.40

1 year ago

1.0.3-5.41

1 year ago

1.0.3-5.39

1 year ago

1.0.3-5.35

1 year ago

1.0.3-5.36

1 year ago

1.0.3-5.37

1 year ago

1.0.3-5.38

1 year ago

1.0.3-5.31

1 year ago

1.0.3-5.32

1 year ago

1.0.3-5.33

1 year ago

1.0.3-5.34

1 year ago

1.0.3-5.28

1 year ago

1.0.3-5.29

1 year ago

1.0.3-5.24

2 years ago

1.0.3-5.25

1 year ago

1.0.3-5.26

1 year ago

1.0.3-5.27

1 year ago

1.0.3-5.20

2 years ago

1.0.3-5.21

2 years ago

1.0.3-5.22

2 years ago

1.0.3-5.23

2 years ago

1.0.3-5.13

2 years ago

1.0.3-5.14

2 years ago

1.0.3-5.15

2 years ago

1.0.3-5.16

2 years ago

1.0.3-5.10

2 years ago

1.0.3-5.11

2 years ago

1.0.3-5.12

2 years ago

1.0.3-5.4

2 years ago

1.0.3-5.5

2 years ago

1.0.3-5.8

2 years ago

1.0.3-5.9

2 years ago

1.0.3-5.6

2 years ago

1.0.3-5.7

2 years ago

1.0.19

2 years ago

1.0.2

2 years ago

1.0.3-5.1

2 years ago

1.0.18

2 years ago

1.0.1

2 years ago

1.0.17

2 years ago

1.0.16

2 years ago

1.0.3-5.2

2 years ago

1.0.3-5.3

2 years ago

1.0.9

2 years ago

1.0.8

2 years ago

1.0.7

2 years ago

1.0.6

2 years ago

1.0.5

2 years ago

1.0.4

2 years ago

1.0.3

2 years ago

1.0.22

2 years ago

1.0.21

2 years ago

1.0.20

2 years ago

1.0.26

2 years ago

1.0.25

2 years ago

1.0.24

2 years ago

1.0.23

2 years ago

1.0.29

2 years ago

1.0.28

2 years ago

1.0.27

2 years ago

1.0.33

2 years ago

1.0.11

2 years ago

1.0.10

2 years ago

1.0.31

2 years ago

1.0.30

2 years ago

1.0.15

2 years ago

1.0.14

2 years ago

1.0.35

2 years ago

1.0.13

2 years ago

1.0.34

2 years ago

1.0.12

2 years ago

1.0.0

3 years ago