###消息、会话、聊天、评价、留言
环信是北京易掌云峰科技有限公司旗下一家企业级服务软件提供商,环信成立于2013年4月,并于2016年荣膺“Gartner 2016 Cool Vendor”。产品有国内上线最早规模最大的即时通讯云平台——环信即时通讯云,移动端最佳实践的全媒体智能云客服平台—环信移动客服。截至2016年上半年,环信即时通讯云共服务了82149家App客户,环信移动客服共服务了29437家企业用户.
主要产品:
环信移动客服——全媒体智能云客服倡导者。
环信即时通讯云——国内最大的即时通讯云PaaS平台。
客户互动云——移动端最佳实践的全媒体智能云客服平台。
本插件封装了环信客户互动云SDK,在注册登录类接口基础上,扩展添加了 UI 类接口,适用于对 UI 设计要求不高的项目。可直接调用相关接口弹出对话页面,真正实现了敏捷开发。
1. 注册
3. 客户端集成(插件使用)
使用此插件之前必须先配置 config 文件,配置方法如下:
<feature name="UIEaseCEC">
<param name="appKey" value="1154170221178369#apicloud" />
<param name="ios_apnsCertName" value="81qz3dBYB5q2nGji4IYrawr1" />
<param name="tenantId" value="59105" />
<param name="androidMiPushAppid" value="mipushappid" />
<param name="androidMiPushAppKey" value="mipushappkey" />
</feature>
字段描述:
appKey:区别 APP 的标识,参考开发者注册及管理后台。
ios_apnsCertName: iOS 中推送证书名称,参考制作与上传推送证书。如果不需要实现离线推送功能,请忽略此字段。
tenantId:租户ID,参考开发者注册及管理后台。
androidMiPushAppid:小米推送appid,(可选)
androidMiPushAppKey:小米推送appKey,(可选)
在android平台需要配置(iOS平台忽略此步骤)
<meta-data
name="com.huawei.hms.client.appid"
value="appid=10663060" />
value:为华为推送appid 在华为开发者平台获取
android平台集成发送位置功能注意事项(集成百度地图)
本插件的聊天界面有发送位置的功能,如要正常使用该功能,需要到百度地图的开发者平台注册应用,并申请appKey.并配置到config文件中。iOS平台定位功能不收本配置影响
配置示例:
<feature name="bMap">
<param name="android_api_key" value="WP99x2mSUWEysZxUaMh0GiGCYhBV8CQI" />
<param name="ios_api_key" value="81qz3dBYB5q2nGji4IYrawr1" />
</feature>
字段描述:
本文主要介绍了使用环信 IM 时,何时会收到远程推送、如何使用远程推送、如何获取远程推送的内容。
环信 SDK 根据 iOS App 运行的特性,主要有以下三种运行状态:
1、 当App在前台可见的时候,SDK处于前台活跃状态,此时是使用SDK长连接(addMessageListener接口 receive事件)接收消息。
2、 当App进入后台且在2分钟之内的时候,SDK处于后台活跃状态,此时是使用SDK长连接接收消息(addMessageListener接口 receive事件)。此时收到的消息会,插件会通过弹出本地通知的形式提醒用户,用户单击通知提示会启动该App。开发者亦可通过 setLocalNotification 接口设置此时是否弹出本地通知的提示。
3、 当App进入后台超过2分,被系统挂起,此时SDK处于不活跃状态,或者是主动把App进程杀死,此时如果有新消息,是通过苹果的APNs服务进行提醒的。用户点击通知提示框,开发者可通过 api.addEventListener 监听获取推送消息,详情参考下文。当App再次启动,SDK会去服务器拉取不活跃期间的消息。
集成推送功能流程如下文所示。此过程中涉及到的 AppID 即为 Bundle Identifie,与 YonBuilder移动开发 平台上的包名是同一个东西,在 YonBuilder移动开发 平台上应用的概览里可以查看。
登录苹果开发者中心申请推送证书,本过程操作详情参考配置环信推送证书
将上一步生成的 p12 证书上传到环信:登录环信管理后台,找到要上传证书的Appkey,点击进入详情。选择“推送证书”,然后选择“iOS”,为证书起名,并记住名称,并配置在config.xml文件中(详情参考上文config 文件配置方法)。选择上传证书,将上一步中生成的P12文件上传,并设置导出时设置的密码。选择证书类型,此处是“开发环境”(如果之前用的是production,则此处应该选择生产)。填写应用包名,应为bundle id,点击上传,完成上传证书操作。本过程操作详情参考上传环信推送证书
将 1 过程中生成的 provisioning profile 文件和证书上传 YonBuilder移动开发 平台,即可在 YonBuilder移动开发 平台应用打包出 ipa 安装包并安装(正式版发布到苹果商店,通过苹果商店下载安装)
以上步骤都已经实现后,还需要使用您 App 的用户允许通知,才能收到远程推送。您可以在设备的设置应用中,查看当前App是否允许通知。
点击通知栏的远程推送时,如果此时 App 已经被系统冻结,则YonBuilder移动开发会将本次推送的内容通过事件监听回调的方式交给开发者。具体使用如下:
api.addEventListener({
name: 'noticeclicked'
}, function(ret) {
if (ret && ret.value) {
var type = ret.type;//0YonBuilder移动开发收到的推送内容,1插件开发者自定义的
var result = ret.value;//推送内容
}
})
value数据格式如下:
{
“localNotification”:false,//是否是本地通知,若为true则下文数据格式同addMessageListener接口监听receive事件回调的数据格式
"aps":{
"alert":{
"body":"您有一条新消息" // 消息内容
},
"badge":1, // 角标数
"sound":"default" // 提示音
},
"e":"自定义推送扩展",//自定义推送扩展
"f":"6001", // 消息发送方
"t":"6006", // 消息接收方
"m":"373360335316321408", // 消息id
"g":"1421300621769" // 群组id(如果是单聊则没有该字段)
}
如果 App 当前为活跃状态且未被系统冻结(按home键2分钟内app在后台运行状态),则您可通过在 addMessageListener 接口中监听 receive 事件捕获该消息,详情参考 addMessageListener 接口说明。此时若允许本地通知,则插件会弹出本地通知的提示框,用户点击该提示框,iOS系统会启动本App,同时api.addEventListener也会受到消息。
证书到期后,要更换新的推送证书,需要在环信管理后台将旧的删除,之后重新上传,上传时的命名要与旧证书的命名一致。一个appkey下可以传多个证书,这就可以实现夸App聊天,在不同App中初始化sdk的时候,指定不同的推送证书,每个证书对应当前App的bundle id,这样,用户在登录不同的App的时候就会绑定到不同的推送证书,从而实现夸App的聊天和推送。
注意:本插件 iOS 平台上最低适配系统版本为 iOS 8.0
easeRegister({params},callback(ret, err))
username:
password:
ret:
{
status: true //布尔类型;是否注册成功,true|false
}
err:
{
code: 1, //数字类型;错误码
msg: '' //字符串类型;错误信息
}
var UIEaseCEC = api.require('UIEaseCEC');
UIEaseCEC.easeRegister({
username: '',
password: ''
},function(ret, err) {
if (ret.status) {
api.alert({ msg:'注册成功'});
} else {
api.alert({ msg:JSON.stringify(err)});
}
});
iOS系统,Android系统
可提供的 1.0.0 及更高版本
# **login**登录接口
login({params},callback(ret, err))
username:
password:
ret:
{
status: true //布尔类型;是否登录成功,true|false
}
err:
{
code: 1, //数字类型;错误码
msg: '' //字符串类型;错误信息
}
var UIEaseCEC = api.require('UIEaseCEC');
UIEaseCEC.login({
username: '',
password: ''
},function(ret, err) {
if (ret.status) {
api.alert({ msg:'登录成功'});
} else {
api.alert({ msg:JSON.stringify(err)});
}
});
iOS系统,Android系统
可提供的 1.0.0 及更高版本
# **logout**退出登录
logout({params},callback(ret, err))
bIsUnbindDeviceToken:
ret:
{
status: true //布尔类型;是否成功退出登录,true|false
}
err:
{
code: 1, //数字类型;错误码
msg: '' //字符串类型;错误信息
}
var UIEaseCEC = api.require('UIEaseCEC');
UIEaseCEC.logout(function(ret, err) {
if (ret.status) {
api.alert({ msg:'退出登录成功'});
} else {
api.alert({ msg:JSON.stringify(err)});
}
});
iOS系统,Android系统
可提供的 1.0.0 及更高版本
# **addConnectionListener**添加网络监听,可以显示当前是否连接服务器
有以下几种情况, 会引起该方法的调用:
addConnectionListener(callback(ret))
ret:
{
state: 'connected' //字符串类型;网络连接状态,取值范围如下:
//connected:已连接
//disconnected:未连接
//accountDidRemove:当前登录账号已经被从服务器端删除
//accountDidLoginFromOtherDevice:当前登录账号在其它设备登录
//userDidForbidByServer:服务被禁用
//userAccountDidForcedToLogout:当前登录账号被强制退出时会收到该回调,有以下原因:1.密码被修改 2.登陆设备数过多;
}
var UIEaseCEC = api.require('UIEaseCEC');
UIEaseCEC.addConnectionListener(function(ret) {
api.alert({msg: JSON.stringify(ret)});
});
iOS系统,Android系统
可提供的1.0.0及更高版本
# **addMessageListener**添加消息相关事件监听
addMessageListener({params}, callback(ret, err))
name:
ret:
{
messages: [] //数组类型;仅当 name 为 receive 时本参数有值,消息组成的数组,消息详情参考附录:消息内容
cmdMessages: [] //数组类型;仅当 name 为 cmdReceive 时本参数有值,cmd消息组成的数组,消息详情参考附录:消息内容
recallMessageIds:[] //数组类型;仅当 name 为 msgDidRecall 时本参数有值,撤回消息的数组
message:{} //字符;仅当 name 为 msgChange 时本参数有值,发生变化的消息,消息详情参考附录:消息内容
attachmentMessage:{} //字符;仅当 name 为 msgAttachmentStatus 时本参数有值,发生变化的消息,消息详情参考附录:消息内容
waitCount: //字符;仅当 name 为 waitCount 时本参数有值,待接入排队人数
agentInput:'' //字符;仅当 name 为 agentInput 时本参数有值,坐席输入状态变化内容
isPushMsg: false //布尔类型;仅当 name 非 receive 时本参数有值。表示是否是远程推送而来的消息,本参数仅在iOS平台有效
}
err:
{
code: , //数字类型;错误码
msg: '' //字符串类型;错误信息
}
var UIEaseCEC = api.require('UIEaseCEC');
UIEaseCEC.addMessageListener({
name: 'receive'
}, function(ret) {
if (ret.messages) {
api.alert({msg:JSON.stringify(ret.messages)});
}
});
iOS系统,Android系统
可提供的1.0.0及更高版本
# **chat**根据IM服务号创建并打开聊天页面
chat({params})
conversationId:
projectId:
navigationBar:
{
titleColor: '#fff', //字符串类型;标题文字颜色;默认:#000
bgColor: '#d6d6d6', //字符串类型;导航条背景色;默认:#d1d1d1
btnColor: '#fff', //字符串类型;导航条按钮色;默认:#fff(android不支持此参数)
navigationBarBg:'' //字符串类型;导航条背景图片;如果此参数有值,将忽略bgColor;默认值:无
}
avatar:
{
local:'', //(可选项)字符串类型;单聊时用户头像地址,要求本地路径(fs://,widget://)
remote:'' //(可选项)字符串类型;单聊时对方的用户头像地址,要求本地路径(fs://,widget://)
}
nickname:
{
local:'nickname',
remote:'nickname'
}
Info:
{
title:'', //标题
orderTitle:'', //订单标题;仅type为order时有效
price:'nickname', //价格
desc:'nickname', //名称
imageUrl:'', //图片的URL,不支持本地路径
itemUrl:'', //商品的URL链接
type:'order' //发送商品的类型;取值如下:
// order:订单,自动发送
// track:商品不自动发送,点击发送按钮后发送
}
var UIEaseCEC = api.require('UIEaseCEC');
UIEaseCEC.chat({
conversationId: '123',
text: {
size: 15,
color: '#000'
},
avatar: {
size: 40,
corner: 20
},
});
iOS系统,Android系统
可提供的 1.0.0 及更高版本
# **sendText**发送文本消息
sendText({params},callback(ret,err))
conversationId:
agentInfo:
queueInfo:
text:
ext:
ret:
{
status: true, //布尔类型;是否发送成功,true|false
message: {} //JSON 对象;发送的消息,详情参考附录:消息内容
}
err:
{
code: , //数字类型;错误码
msg: '' //字符串类型;错误信息
}
var UIEaseCEC = api.require('UIEaseCEC');
UIEaseCEC.sendText({
conversationId: '',
text: 'YonBuilder移动开发 hello',
},function(ret,err) {
if(ret.status)
api.alert({ msg:JSON.stringify(ret)});
else
api.alert({ msg:JSON.stringify(err)});
});
iOS系统,Android系统
可提供的 1.0.0 及更高版本
# **sendImage**发送图片消息
sendImage({params},callback(ret,err))
conversationId:
path:
agentInfo:
queueInfo:
ext:
ret:
{
status: true, //布尔类型;是否发送成功,true|false
message: {} //JSON 对象;发送的消息,详情参考附录:消息内容
}
err:
{
code: , //数字类型;错误码
msg: '' //字符串类型;错误信息
}
var UIEaseCEC = api.require('UIEaseCEC');
UIEaseCEC.sendImage({
conversationId: '',
path: 'widget://res/abc.png',
},function(ret,err) {
if(ret.status)
api.alert({ msg:JSON.stringify(ret)});
else
api.alert({ msg:JSON.stringify(err)});
});
iOS系统,Android系统
可提供的 1.0.0 及更高版本
# **sendLocation**发送位置消息
sendLocation({params},callback(ret,err))
conversationId:
agentInfo:
queueInfo:
address:
latitude:
longitude:
ext:
ret:
{
status: true, //布尔类型;是否发送成功,true|false
message: {} //JSON 对象;发送的消息,详情参考附录:消息内容
}
err:
{
code: , //数字类型;错误码
msg: '' //字符串类型;错误信息
}
var UIEaseCEC = api.require('UIEaseCEC');
UIEaseCEC.sendLocation({
conversationId: '',
address: '北京市天安门',
latitude: ,
longitude: ,
},function(ret,err) {
if(ret.status)
api.alert({ msg:JSON.stringify(ret)});
else
api.alert({ msg:JSON.stringify(err)});
});
iOS系统,Android系统
可提供的 1.0.0 及更高版本
# **sendVoice**发送声音消息
sendVoice({params},callback(ret,err))
conversationId:
path:
length:
agentInfo:
queueInfo:
ext:
ret:
{
status: true, //布尔类型;是否发送成功,true|false
message: {} //JSON 对象;发送的消息,详情参考附录:消息内容
}
err:
{
code: , //数字类型;错误码
msg: '' //字符串类型;错误信息
}
var UIEaseCEC = api.require('UIEaseCEC');
UIEaseCEC.sendVoice({
conversationId:'',
path: 'widget://res/abc.mp3',
length:6
},function(ret,err) {
if(ret.status)
api.alert({ msg:JSON.stringify(ret)});
else
api.alert({ msg:JSON.stringify(err)});
});
iOS系统,Android系统
可提供的 1.0.0 及更高版本
# **sendControl**发送透传消息
sendControl({params},callback(ret,err))
conversationId:
action:
agentInfo:
queueInfo:
ext:
ret:
{
status: true, //布尔类型;是否发送成功,true|false
message: {} //JSON 对象;发送的消息,详情参考附录:消息内容
}
err:
{
code: , //数字类型;错误码
msg: '' //字符串类型;错误信息
}
var UIEaseCEC = api.require('UIEaseCEC');
UIEaseCEC.sendControl({
conversationId: '',
action:'',
ext: {}
},function(ret,err) {
if(ret.status)
api.alert({ msg:JSON.stringify(ret)});
else
api.alert({ msg:JSON.stringify(err)});
});
iOS系统,Android系统
可提供的 1.0.0 及更高版本
# **sendVisitorInfo**发送访客信息
sendVisitorInfo({params},callback(ret,err))
conversationId:
info:
{
name:'', //名字
qq:'', //qq
phone:'', //电话
companyName:'', //公司
nickName:'', //昵称
email:'', //邮箱
desc:'order'
}
agentInfo:
queueInfo:
ext:
ret:
{
status: true, //布尔类型;是否发送成功,true|false
message: {} //JSON 对象;发送的消息,详情参考附录:消息内容
}
err:
{
code: , //数字类型;错误码
msg: '' //字符串类型;错误信息
}
var UIEaseCEC = api.require('UIEaseCEC');
UIEaseCEC.sendVisitorInfo({
conversationId: '',
info{},
ext: {}
},function(ret,err) {
if(ret.status)
api.alert({ msg:JSON.stringify(ret)});
else
api.alert({ msg:JSON.stringify(err)});
});
iOS系统,Android系统
可提供的 1.0.0 及更高版本
# **sendVisitorTrack**发送轨迹消息
sendVisitorTrack({params},callback(ret,err))
conversationId:
info:
{
title:'', //标题
price:'nickname', //价格
desc:'nickname', //名称
imageUrl:'', //图片的URL,不支持本地路径
itemUrl:'', //商品的URL链接
}
agentInfo:
queueInfo:
ext:
ret:
{
status: true, //布尔类型;是否发送成功,true|false
message: {} //JSON 对象;发送的消息,详情参考附录:消息内容
}
err:
{
code: , //数字类型;错误码
msg: '' //字符串类型;错误信息
}
var UIEaseCEC = api.require('UIEaseCEC');
UIEaseCEC.sendVisitorTrack({
conversationId: '',
info{},
ext: {}
},function(ret,err) {
if(ret.status)
api.alert({ msg:JSON.stringify(ret)});
else
api.alert({ msg:JSON.stringify(err)});
});
iOS系统,Android系统
可提供的 1.0.0 及更高版本
# **sendOrder**发送订单消息
sendOrder({params},callback(ret,err))
conversationId:
info:
{
title:'', //标题
orderTitle:'', //订单标题
price:'nickname', //价格
desc:'nickname', //名称
imageUrl:'', //图片的URL,不支持本地路径
itemUrl:'', //商品的URL链接
}
agentInfo:
queueInfo:
ext:
ret:
{
status: true, //布尔类型;是否发送成功,true|false
message: {} //JSON 对象;发送的消息,详情参考附录:消息内容
}
err:
{
code: , //数字类型;错误码
msg: '' //字符串类型;错误信息
}
var UIEaseCEC = api.require('UIEaseCEC');
UIEaseCEC.sendOrder({
conversationId: '',
info{},
ext: {}
},function(ret,err) {
if(ret.status)
api.alert({ msg:JSON.stringify(ret)});
else
api.alert({ msg:JSON.stringify(err)});
});
iOS系统,Android系统
可提供的 1.0.0 及更高版本
# **loadMessageFromDB**从数据库中获取消息,获取到的消息是startMsgId之前或者之后的pagesize条消息;(仅ios支持)
loadMessageFromDB({params},callback(ret,err))
conversationId:
startMsgId:
count:
direction:
ret:
{
status:true //布尔类型;是否成功
messages: [] //数组对象;返回会话信息,详细内容参考附件:消息内容
}
err:
{
code: , //数字类型;错误码
msg: '' //字符串类型;错误信息
}
var UIEaseCEC = api.require('UIEaseCEC');
UIEaseCEC.loadMessageFromDB({
conversationId: '',
},function(ret) {
if(ret.status)
api.alert({ msg:JSON.stringify(ret)});
});
iOS系统,Android系统
可提供的 1.0.0 及更高版本
# **loadConversastions**获取所有会话
loadConversastions(callback(ret))
ret:
{
status:true, //布尔类型;是否成功
conversastions: [] //数组对象;返回会话信息,详细内容参考附件:会话信息
}
var UIEaseCEC = api.require('UIEaseCEC');
UIEaseCEC.loadConversastions(function(ret) {
if(ret.status)
api.alert({ msg:JSON.stringify(ret)});
});
android系统
可提供的 1.0.0 及更高版本
# **deleteConversation**删除一条会话
deleteConversation({params})
conversationId:
isMessage:
var UIEaseCEC = api.require('UIEaseCEC');
UIEaseCEC.deleteConversation({
conversationId: '',
});
iOS系统,Android系统
可提供的 1.0.0 及更高版本
# **deleteMessage**删除消息记录
deleteMessage({params})
conversationId:
messageId:
var UIEaseCEC = api.require('UIEaseCEC');
UIEaseCEC.deleteMessage({
conversationId: '',
});
iOS系统,Android系统
可提供的 1.0.0 及更高版本
# **getMessagesCount**获取会话未读消息数
getMessagesCount({params},callback(ret))
conversationId:
ret:
{
count: //数字;未读消息数
}
var UIEaseCEC = api.require('UIEaseCEC');
UIEaseCEC. getMessagesCount({
conversationId:''
},function(ret) {
if(ret.status)
api.alert({ msg:JSON.stringify(ret)});
});
android系统
可提供的 1.0.0 及更高版本
# **markAllMessagesAsRead**未读消息数清零
markAllMessagesAsRead({params})
conversationId:
var UIEaseCEC = api.require('UIEaseCEC');
UIEaseCEC.markAllMessagesAsRead({
conversationId:''
});
iOS系统,Android系统
可提供的 1.0.0 及更高版本
# **evaluation**评价会话
evaluation({params},callback(ret,err))
conversationId:
text:
score:
ret:
{
status:true //布尔;评价结果
message: {} //JSON 对象;评价的消息,详情参考附录:消息内容
}
err:
{
code: , //数字类型;错误码
msg: '' //字符串类型;错误信息
}
var UIEaseCEC = api.require('UIEaseCEC');
UIEaseCEC.evaluation({
conversationId:'',
text''
},function(ret) {
if(ret.status)
api.alert('成功');
});
iOS系统,Android系统
可提供的 1.0.0 及更高版本
# **getLeaveMsgs**获取所有留言
getLeaveMsgs({params},callback(ret,err))
conversationId:
projectId:
page:
pageSize:
ret:
{
first:1, //布尔类型;是否是第一页
last:1, //布尔类型;是否是最后一页
number:1, //数字类型;当前页数
numberOfElements:1, //数字类型;当前页留言数量
size:1, //数字类型;每一页数量
totalElements:1, //数字类型;留言总数量
totalPages:1, //数字类型;总页数
entities:[{
content:'', //字符类型;留言内容
created_at:'', //字符类型;创建时间
id:666666, //数字类型;ID
origin_type:'', //字符类型;来源类型
subject:'', //字符类型;主题
updated_at:'', //字符类型;来更新时间
version:0, //数字类型;版本
creator:{
id:'', //字符类型;字符类型;ID
name:'', //字符类型;名字
type:'', //字符类型;类型
username:'', //字符类型;名字
},
status:{ //JSON 对象;状态
code:'',
name:'',
id:'',
version:'',
}
}]
}
err:
{
code: , //数字类型;错误码
msg: '' //字符串类型;错误信息
}
var UIEaseCEC = api.require('UIEaseCEC');
UIEaseCEC.getLeaveMsgs({
conversationId:'',
projectId:''
},function(ret) {
if(ret.status)
api.alert({ msg:JSON.stringify(ret)});
});
iOS系统,Android系统
可提供的 1.0.0 及更高版本
# **createLeaveMsg**创建新留言
createLeaveMsg({params},callback(ret,err))
conversationId:
projectId:
Info:
{
name:'', //名字
qq:'', //qq
phone:'', //电话
companyName:'', //公司
avatar:'', //头像地址
email:'', //邮箱
desc:'order'
}
Leave:
{
subject:'', //主题
content:'', //内容
}
ret:
{
status:true //布尔;是否创建成功
}
err:
{
code: , //数字类型;错误码
msg: '' //字符串类型;错误信息
}
var UIEaseCEC = api.require('UIEaseCEC');
UIEaseCEC.createLeaveMsg({
conversationId:'',
projectId:'',
Info:{
name:'', //名字
qq:'', //qq
phone:'', //电话
companyName:'', //公司
avatar:'', //头像地址
email:'', //邮箱
desc:'order'
},
Leave:{
subject:'', //主题
content:'', //内容
}
},function(ret) {
if(ret.status)
api.alert({ msg:JSON.stringify(ret)});
});
iOS系统,Android系统
可提供的 1.0.0 及更高版本
# **getLeaveMsgDetail**获取留言详情
getLeaveMsgDetail({params},callback(ret,err))
conversationId:
projectId:
tickedId:
ret:
{
content:'', //字符类型;留言内容
created_at:'', //字符类型;创建时间
id:666666, //数字类型;ID
origin_type:'', //字符类型;来源类型
subject:'', //字符类型;主题
updated_at:'', //字符类型;来更新时间
version:, //数字类型;版本
creator:{
id:'', //字符类型;字符类型;ID
name:'', //字符类型;名字
type:'', //字符类型;类型
username:'', //字符类型;名字
},
status:{ //JSON 对象;状态
code:'',
name:'',
id:'',
version:'',
},
assignee:{ //JSON 对象;受理人信息
agentNumber:'',
avatar:'',
id:'',
name:'',
phone:'',
type:'',
username:'',
}
}
err:
{
code: , //数字类型;错误码
msg: '' //字符串类型;错误信息
}
var UIEaseCEC = api.require('UIEaseCEC');
UIEaseCEC.getLeaveMsgDetail({
conversationId:'',
tickedId:'',
projectId:''
},function(ret) {
if(ret.status)
api.alert({ msg:JSON.stringify(ret)});
});
iOS系统,Android系统
可提供的 1.0.0 及更高版本
# **getLeaveMsgComments**获取一个留言的所有评论
getLeaveMsgComments({params},callback(ret,err))
conversationId:
projectId:
tickedId:
page:
pageSize:
ret:
{
first:1, //布尔类型;是否是第一页
last:1, //布尔类型;是否是最后一页
number:1, //数字类型;当前页数
numberOfElements:1, //数字类型;当前页留言数量
size:1, //数字类型;每一页数量
totalElements:1, //数字类型;评论总数量
totalPages:1, //数字类型;总页数
entities:[{
content:'', //字符类型;评论内容
created_at:'', //字符类型;创建时间
id:666666, //数字类型;ID
subject:'', //字符类型;主题
updated_at:'', //字符类型;来更新时间
version:0, //数字类型;版本
creator:{
id:'', //字符类型;字符类型;ID
name:'', //字符类型;名字
type:'', //字符类型;类型
username:'', //字符类型;用户名
agentNumber:'',
phone:'',
avatar:'',
},
attachments:{ //JSON 对象;附件信息
name:'',
type:'',
url:'',
}
}]
}
err:
{
code: , //数字类型;错误码
msg: '' //字符串类型;错误信息
}
var UIEaseCEC = api.require('UIEaseCEC');
UIEaseCEC.getLeaveMsgComments({
conversationId:'',
projectId:'',
tickedId:''
},function(ret) {
if(ret.status)
api.alert({ msg:JSON.stringify(ret)});
});
iOS系统,Android系统
可提供的 1.0.0 及更高版本
# **createLeaveMsgComment**给一个留言添加评论
createLeaveMsgComment({params},callback(ret,err))
conversationId:
projectId:
Info:
{
name:'', //名字
qq:'', //qq
phone:'', //电话
companyName:'', //公司
avatar:'', //头像地址
email:'', //邮箱
desc:'order'
}
Leave:
{
subject:'', //主题
content:'', //内容
replyId:'' //回复那条评论的id
}
ret:
{
status:true //布尔;是否创建成功
}
err:
{
code: , //数字类型;错误码
msg: '' //字符串类型;错误信息
}
var UIEaseCEC = api.require('UIEaseCEC');
UIEaseCEC.createLeaveMsgComment({
conversationId:'',
projectId:'',
{
name:'', //名字
qq:'', //qq
phone:'', //电话
companyName:'', //公司
avatar:'', //头像地址
email:'', //邮箱
desc:'order'
},
{
subject:'', //主题
content:'', //内容
}
},function(ret) {
if(ret.status)
api.alert({ msg:JSON.stringify(ret)});
});
iOS系统,Android系统
可提供的 1.0.0 及更高版本
# **getWorkStatus**获取工作状态
getWorkStatus({params},callback(ret,err))
conversationId:
ret:
{
status:true //布尔;是否获取成功
isWork:true //布尔;是否工作中
}
err:
{
code: , //数字类型;错误码
msg: '' //字符串类型;错误信息
}
var UIEaseCEC = api.require('UIEaseCEC');
UIEaseCEC.getWorkStatus({
conversationId:''
},function(ret) {
if(ret.status)
api.alert({ msg:JSON.stringify(ret)});
});
iOS系统,Android系统
可提供的 1.0.0 及更高版本
# **setLocalNotification**开启关闭本地通知
开启本地通知后,app在后台运行时通过长连接收到消息时会弹出提示。此时用户点击提示后,iOS系统会启动app,开发者可在api.addEventListener接口获取消息内容,详情参考概述。
setLocalNotification({params})
enable:
title:
var UIEaseCEC = api.require('UIEaseCEC');
UIEaseCEC.setLocalNotification({
enable: true,
title: '您有一条新的消息'
});
iOS系统
可提供的 1.0.0及更高版本
# **setPushOption**设置推送全局属性
setPushOption({params},callback(ret))
displayName:
displayStyle:
noDisturbStatus:
noDisturbingStartH:
noDisturbingEndH:
ret:
{
status: true //布尔类型;是否设置成功,true|false
}
err:
{
code: 1, //数字类型;错误码
msg: '' //字符串类型;错误信息
}
var UIEaseCEC = api.require('UIEaseCEC');
UIEaseCEC.setPushOption({
displayName: '',
displayStyle: '',
noDisturbStatus:'',
noDisturbingStartH:,
noDisturbingEndH:
},function(ret, err) {
if (ret.status) {
api.alert({ msg:'设置'});
} else {
api.alert({ msg:JSON.stringify(err)});
}
});
iOS系统
可提供的 1.0.0及更高版本
# **setApnsNickname**设置推送昵称
setApnsNickname({params},callback(ret))
nickname:
ret:
{
status: true //布尔类型;是否设置成功,true|false
}
err:
{
code: 1, //数字类型;错误码
msg: '' //字符串类型;错误信息
}
var UIEaseCEC = api.require('UIEaseCEC');
UIEaseCEC.setApnsNickname({
nickname: ''
},function(ret, err) {
if (ret.status) {
api.alert({ msg:'设置'});
} else {
api.alert({ msg:JSON.stringify(err)});
}
});
iOS系统
可提供的 1.0.0及更高版本
{
messageId:'' //消息ID
conversationId: 'cmd', //所属会话的唯一标识符
direction:'', //消息方向
//取值如下:
//send:发送
//receive:接受
from: '', //消息的发送方
to: '', //消息的接收方
messageTime: , //时间戳,服务器收到此消息的时间
messageStatus:'', //消息状态
//取值如下:
//pending:发送未开始
//delivering:正在发送
//successed:发送成功
//failed:发送失败
ext:{}, //扩展消息,由用户自定义
body: {} //JSON 对象;消息体(消息包含的内容),,详情参考附录:消息体内容
}
{
"attributes": {
"weichat": {
"nameValuePairs": {
"msg_id_for_ack": "14b4390f-6391-4feb-9d9c-5167a5cd5fe8"
},
"extern":"" //扩展消息,由用户自定义
}
},
"body": { //JSON 对象;消息体(消息包含的内容),,详情参考附录:消息体内容
"emaObject": {
"type": 0, //消息体类型;0/文字,1/图片,2/视频,3/位置,4/语音,5/文件,6/命令消息
"nativeHandler": -1047580424
}
},
"direct": "SEND", //消息方向; 取值范围:send/发送,receive/收到
"error": 0, //错误码
"from": "user1", //用户
"imMsgId": "550818067349772788",
"isAcked": false,
"isDelivered": false, //是否被收到
"isListened": false, //是否被监听
"kefuReceived": false, //是否收到
"msgId": "14b4390f-6391-4feb-9d9c-5167a5cd5fe8", ///消息id(每条消息都会生成唯一的一个id)
"msgTime": 1545812125166, //发送时间
"status": "SUCCESS", //发送是否成功
"to": "kefuchannelimid_969138", //客服 服务号
"type": "TXT" //发送内容
}
{
type: '', //字符串类型;消息体的类型,取值范围如下:
//text:文本类型
//image:图片类型
//video:视频类型
//location:位置类型
//voice:语音类型
//file:文件类型
//cmd:命令类型
...: ... //消息体除type外的其它内容,详情参考附录:消息体-文本、图片、视频、位置、语音、文件、命令
}
### **消息体-文本**
{
type: 'text',
text: '' //字符串类型;文本内容
}
### **消息体-图片**
{
type: 'image',
displayName: '', //字符串类型;附件的显示名
localPath: '', //字符串类型;附件的本地路径
remotePath: '', //字符串类型;附件在服务器上的路径
secretKey: '', //字符串类型;附件的密钥, 下载附件时需要密匙做校验
fileLength: , //数字类型;附件的大小, 以字节为单位
downloadStatus: '', //字符串类型;附件的下载状态,取值范围如下:
//downloading:正在下载
//successed:下载成功
//failed:下载失败
//pending:准备下载
thumbnailDownloadStatus: '',//字符串类型;缩略图下载状态,取值范围如下:
//downloading:正在下载
//successed:下载成功
//failed:下载失败
//pending:准备下载
size: { // JSON 对象;图片大小
width: , //数字类型;图片的宽
height: //数字类型;图片的高
},
compressionRatio: , //数字类型;设置发送图片消息时的压缩率,1.0时不压缩,默认值是0.6,如果设置了小于等于0的值,则使用默认值
thumbnailDisplayName: '', //字符串类型;缩略图的显示名
thumbnailLocalPath: '', //字符串类型;缩略图的本地路径
thumbnailRemotePath: '', //字符串类型;缩略图在服务器的路径
thumbnailSecretKey: '', //字符串类型;缩略图的密钥, 下载缩略图时需要密匙做校验
thumbnailSize: { // JSON 对象;缩略图片大小
width: , //数字类型;图片的宽
height: //数字类型;图片的高
},
thumbnailFileLength: //数字类型;缩略图文件的大小, 以字节为单位
}
### **消息体-视频**
{
type: 'video',
duration: '', //数字类型;视频时长, 秒为单位
displayName: '', //字符串类型;附件的显示名
localPath: '', //字符串类型;附件的本地路径
remotePath: '', //字符串类型;附件在服务器上的路径
secretKey: '', //字符串类型;附件的密钥, 下载附件时需要密匙做校验
fileLength: , //数字类型;附件的大小, 以字节为单位
downloadStatus: '', //字符串类型;附件的下载状态,取值范围如下:
//downloading:正在下载
//successed:下载成功
//failed:下载失败
//pending:准备下载
thumbnailLocalPath: '', //字符串类型;缩略图的本地路径
thumbnailRemotePath: '', //字符串类型;缩略图在服务器的路径
thumbnailSecretKey: '', //字符串类型;缩略图的密钥, 下载缩略图时需要密匙做校验
thumbnailSize: { // JSON 对象;缩略图片大小
width: , //数字类型;图片的宽
height: //数字类型;图片的高
},
thumbnailDownloadStatus: '',//字符串类型;缩略图下载状态,取值范围如下:
//downloading:正在下载
//successed:下载成功
//failed:下载失败
//pending:准备下载
}
### **消息体-位置**
{
type: 'location',
address: '', //字符串类型;地址信息
latitude: , //数字类型;纬度
longitude: //数字类型;经度
}
### **消息体-语音**
{
type: 'voice',
duration: '', //数字类型;语音时长, 秒为单位
displayName: '', //字符串类型;附件的显示名
localPath: '', //字符串类型;附件的本地路径
remotePath: '', //字符串类型;附件在服务器上的路径
secretKey: '', //字符串类型;附件的密钥, 下载附件时需要密匙做校验
fileLength: , //数字类型;附件的大小, 以字节为单位
downloadStatus: '' //字符串类型;附件的下载状态,取值范围如下:
//downloading:正在下载
//successed:下载成功
//failed:下载失败
//pending:准备下载
}
### **消息体-文件**
{
type: 'file',
displayName: '', //字符串类型;附件的显示名
localPath: '', //字符串类型;附件的本地路径
remotePath: '', //字符串类型;附件在服务器上的路径
secretKey: '', //字符串类型;附件的密钥, 下载附件时需要密匙做校验
fileLength: , //数字类型;附件的大小, 以字节为单位
downloadStatus: '' //字符串类型;附件的下载状态,取值范围如下:
//downloading:正在下载
//successed:下载成功
//failed:下载失败
//pending:准备下载
}
### **消息体-命令**
{
type: 'cmd',
action: '', //字符串类型;命令内容
}
### **会话信息-ios**
{
conversationId: 'cmd', //会话唯一标识
unreadMessagesCount:6, //会话未读消息数量
latestMessage:{} //会话最新一条消息;内容参考消息信息
}
[
{
"conversationId": "", //字符串类型;服务号
"messages": [] , //JSON数组;每条消息内容,详情可查看消息内容
"msgCount": , //数字类型;消息总数
"unreadMsgCount": //数字类型;未读消息数
"mOfficialAccount":{ //JSON对象类型;客服账号信息
“id”:"", //字符串类型;账号id
"name":"", //字符串类型;name
"type":"" //字符串类型;类型
}
},
]