注册
环信即时通讯云

环信即时通讯云

单聊、群聊、聊天室...
环信开发文档

环信开发文档

Demo体验

Demo体验

场景Demo,开箱即用
RTE开发者社区

RTE开发者社区

汇聚音视频领域技术干货,分享行业资讯
技术讨论区

技术讨论区

技术交流、答疑
资源下载

资源下载

收集了海量宝藏开发资源
iOS Library

iOS Library

不需要辛辛苦苦的去找轮子, 这里都有
Android Library

Android Library

不需要辛辛苦苦的去找轮子, 这里都有

【环信集成笔记】进阶篇-android环信昵称头像解决方法

当你刚刚集成环信的时候,在和自己android组的小伙伴玩的不亦乐乎的时候,当你过完这把瘾的时候,那么接下来,你就要考虑的是怎么让这个头像显示的是自己想要的头像,怎么让昵称显示自己的昵称..... 那么接下来,我来告诉大家,怎么解决昵称头像的问题, 首先,...
继续阅读 »
当你刚刚集成环信的时候,在和自己android组的小伙伴玩的不亦乐乎的时候,当你过完这把瘾的时候,那么接下来,你就要考虑的是怎么让这个头像显示的是自己想要的头像,怎么让昵称显示自己的昵称.....

那么接下来,我来告诉大家,怎么解决昵称头像的问题,

首先,这篇文章是接在我大表哥江南孤鹜在im社区写的一篇文章之后写的,上个链接地址 Android获取昵称头像接下来,我对此文章做些补充:

我看到有些人在问,这个方法放在哪里?


1.png


好吧,大表哥没说出来,这个放在UserApiModel里面

那么接下来,大表哥写的是这样的,利用扩展消息去获取头像昵称,在这里我提醒下大家,要判断这个头像是自己的还是好友的

2.png


怎么判断呢,作为新手的我们,我推荐使用shareprefences在登陆的时候保存下自己的头像昵称,然后再这里获取,并且设置给扩展


3.png


在demohelper里面有个getuserinfo方法

4.png


这里就是把获取到的头像昵称设置给环信,然后显示出来,这里最重要,切记不要写错。

那么,到此为止,其实都说完了,可是,毕竟是一个延伸,怎么可能就此结束,接下来给大家看下,请求数据,然后设置给数据库


5.png


请求的过程我就不写了,这个大家都会,获取到username,id,logo,之后先要把头像,昵称存到userdao里面,如果userdao是环信的一个数据库,这个大家自己看看demo的代码就知道了,设置到这里,是为了在联系人列表里面显示,UserInfoCacheSvc.createOrUpdate(id,username,logo_img);这句就是把头像昵称放到大表哥写的数据库里面

最后,补充一下,忘记说了,导入框架

6.png


好了,这样就结束了,如果有什么还不明白,就加入大表哥粉丝群(环信IM互帮互助群 340452063),我会帮你解答一切问题 收起阅读 »

环信刘俊彦演讲预告:《下一代客户服务软件的三大核心驱动力》

  由CTI论坛主办的2016中国客户体验创新大会将于10月13日在北京辽宁大厦隆重举行,本次会议得到中国通信企业协会增值服务专业委员会的的有力指导和大力支持。环信创始人刘俊彦兼CEO将出席此次会议并发表主题演讲《下一代客户服务软件的三大核心驱动力》。 ...
继续阅读 »
  由CTI论坛主办的2016中国客户体验创新大会将于10月13日在北京辽宁大厦隆重举行,本次会议得到中国通信企业协会增值服务专业委员会的的有力指导和大力支持。环信创始人刘俊彦兼CEO将出席此次会议并发表主题演讲《下一代客户服务软件的三大核心驱动力》。


20160927103933221.jpg



  刘俊彦毕业于英国伦敦国王学院。17年研发经验;先后任职IONA,RedHat; 重度开源软件参与者。JBOSS ESB, SOA-P、Apache CXF、JBOSS Drools、jBPM 等开源项目committer;专注于高并发消息中间件,实时消息系统,异构分布式企业系统集成,应用服务器。

  环信移动客服——全媒体智能云客服倡领者,于2016年荣膺“Gartner 2016 Cool Vendor”。环信支持全媒体接入,包括网页在线客服、社交媒体客服(微博、微信)、APP内置客服和呼叫中心等多种渠道均可一键接入。基于环信业界领先的IM长连接技术保证消息必达,并通过智能客服机器人技术降低人工客服工作量。同时,基于人工智能和大数据挖掘的客户旅程透析产品"环信客户声音"能够帮助企业优化运营,提高跨渠道客服体验。截至2016年上半年,环信移动客服共服务了29437家企业用户,根据易观发布的《中国SaaS客服市场专题研究报告》显示,环信移动客服在SaaS移动端客服用户覆盖占比高达77.4%。
  收起阅读 »

使用AndroidStudio开发测试Java程序实现直接运行main方法

前言 自动Google发布了AndroidStudio1.5之后,现在经常使用AndroidStudio开发程序了,在习惯了他的强大之后已经深深的把Eclipse给抛弃了,现在就算有Eclipse的项目也直接导入到AndroidStudio里去查看;不过...
继续阅读 »
前言

自动Google发布了AndroidStudio1.5之后,现在经常使用AndroidStudio开发程序了,在习惯了他的强大之后已经深深的把Eclipse给抛弃了,现在就算有Eclipse的项目也直接导入到AndroidStudio里去查看;不过在有时候发现Eclipse比AndroidStudio还是有一点儿有时的,就是在有时候突然有个小想法,或者想测试小段计算的代码,这个时候也还必须连上手机去运行程序才行,这让我一直很苦恼;

不过后来发现,原来可以通过另外一种方式实现运行java类的main方法,不过在刚开始的测试过程中一直有问题,最近更新了下SDK突然想起来试下,发现成功了,这里记录下,给大家一个参考;

开始

首先如果想实现在AndroidStudio上运行java类,必须有个正常的项目,他是不能直接使用的,有了正常的AndroidStudio项目之后我们就可以在项目上新建一个Module;
步骤:

右击项目->New->Module

672606-24f2898456598067.png


然后在弹出界面选择Java Library

672606-365f48088e0d5f1a.png


然后填写Libarary的信息就行了

672606-6c77411cb7a8b07b.png


 
开始编写Java代码

基础我们都已经做好了,下边就可以开始进行编码测试了,这个编码都要在刚才创建的Library下进行,这样就可以像在Eclipse里进行一样了

创建完成之后就是下边这样,我们的java代码都是在这个library下编写测试;

672606-06220a0c7178bde4.png


首先我们要写一个main方法,并在里边输出一句话
/**
* 我们java library 的额第一个类
*/
public class MLMain {

/**
* java类的 main方法,可以直接 run
* @param args
*/
public static void main(String[] args) {
System.out.print("hello java library!");
}
}
然后我们可以直接右击当前类,点击Run'MLMain.main()'

672606-17ad9248a06147d3.png


可以看到控制台输出了我们打印的那句话

672606-08b83c3b1d11b612.png


结束语

OK了,以后我们就可以愉快的在AndroidStudio中测试java代码了!O(∩_∩)O~
希望这篇文章能对大家有所帮助!
 
作者:lzan13 收起阅读 »

【环信集成笔记】进阶篇-EaseUI集成以及会话列表开发

有人说环信需要服务器和iOS端配合,其实可以两种方式: 1.全有iOS端和环信交互。2.让服务器替我们保存环信密码。 先不说方式,先教大家如何集成。环信里有一个自带已经弄好的EaseUI,如果你对页面的要求不是很大,那就用环信自带的EaseUI开发...
继续阅读 »
有人说环信需要服务器和iOS端配合,其实可以两种方式:

1.全有iOS端和环信交互。2.让服务器替我们保存环信密码。

先不说方式,先教大家如何集成。环信里有一个自带已经弄好的EaseUI,如果你对页面的要求不是很大,那就用环信自带的EaseUI开发。我使用的就是环信的EaseUI。为了不影响项目,你先导入需要的系统框架。我使用的是即时通讯V2版本。

集成准备前请看他们的官网文档介绍。http://docs.easemob.com/start/300iosclientintegration/20iossdkimport

是即时通讯V3,请按照他去添加对应的库!没有安全感的可以全部添加!只要你不限工程大,麻烦就可以。

添加完成以后。下载他的SDK,有几种文件需要你拖进来。
1.EaseUIResource.bundle

2.gifimage(包含文件:EMGifImage.h以及.m)

3.EaseMobSDK

4.EaseUI(包括子目录:include,lib,resources*请注意里面不是图片是库,XMPP框架。 )

5.Resource(环信的图片文件夹)

6.ChatViewController(你可以用他们示范demo里拖,这个类就是对话类)

7.CystomizableCell

8.PrefixHeader.pch

9.Localizable.strings
如果还是少了什么东西不知道怎么加,请加我QQ:1119718338,我给你发送所有需要的文件,前提请注意加好友时候留言清楚。
如果你前面有一个会话列表页面,例如下图:

1240.png


如果你也有一个消息页面的话,如果没有什么太多内容,我建议放弃你自己自定义的TableViewCell,因为EaseUI 里有已经写好的消息页面:EaseConversationListViewController

这个页面不用改动太多。如果你发现这个页面为什么不用登录环信账号,环信是这样的:你在AppDelegate登录。

登录的demo为:
[[EaseMob sharedInstance].chatManager asyncLoginWithUsername:@“用户的环信账号” password:@“用户的环信密码” completion:^(NSDictionary *loginInfo, EMError *error) {

NSLog(@"error====%@",error);

if (!error)

{

NSLog(@"登录成功");

NSLog(@"===%@",loginInfo);

//获取数据库中数据

[[EaseMob sharedInstance].chatManager loadDataFromDatabase];

}

} onQueue:nil];
当然有登录就有注册

[[EaseMob sharedInstance].chatManager asyncRegisterNewAccount:phone.text password:password2.text withCompletion:^(NSString *username, NSString *password, EMError *error) {

NSLog(@"error====%@",error);

if (!error)

{

NSLog(@"注册成功");

NSLog(@"===%@",loginInfo);

}

} onQueue:nil];


1.只用iOS和环信交互:在你app注册会员的时候,注册成功获得返回值,正确的返回值内去注册环信账号,而环信账号就是用户注册你app的账号,密码需要写死,例如:123456,那么无论谁注册,传给环信的密码都是123456。这样方便登录。如果环信返回给你是注册成功,那么你需要在成功里创建NSUserDeafults存储你的环信账号,密码就不用存了。并且调用环信登录方法。如果不在AppDelegate里写登录,你的APP如果退出了,下次打开就没用了,所以必须时时刻刻登录。所以你需要在AppDelegate登录,账号就是你本地存储的账号。密码还是死的。如果正常流程来说就是:

1.注册自己APP账号-成功-注册环信账号,密码为死的-成功-登录环信账号。

2.登录自己APP账号-成功-登录环信

3.AppDelegate存储账号。



2.让iOS,服务器,环信交互:通过上面的那种方式,跟服务器唯一交互的就是密码,你需要在用户注册你自己产品的时候,密码也注册环信。注册成功,将密码post给服务器,登录的时候成功,服务器不光返回error,msg,还要加一个环信的password,这样你拿到password 可以再进行登录。当然注册的时候Phone和Password需都需要存储,方便在AppDelegate入口类登录。

1.注册自己APP账号-成功-注册环信账号,密码为注册APP的密码-成功-Post密码给服务器-成功-登录环信账号。

2.登录自己APP账号-成功-拿到服务器返回的Password,登录环信账号-成功。

3.AppDelegate存储账号和密码


除了上面两种方式,还有一种就是环信有一个会记录的方法,除了注销会一直存在。怎么简单怎么来。
 
OK,注册成功,我们继续讨论:EaseConversationListViewController

如果你的页面换成了EaseConversationListViewController,那么你不需要做任何操作都可以获取到最新数据,但是你需要点击进入会话页面。

1039815-3ecd18bb8205386e.jpg


ChatViewController 就是你的会话列表页,关于ChatViewController * chatVc = [[ChatViewController alloc]initWithConversationChatter:model.title conversationType:eConversationTypeChat];

1.model.title 这个会话列表的用户名,你也可以写死。

2.eConversationTypeChat,枚举,这是单人会话,还有群聊等等。


有了这个就可以传到会话列表页了。

会话列表就不多说了,没有这个文件我直接发给你好了。

对了有人会出现这种情况,如下图:


1039815-44d6a06e34d36547.png


是否发现重复消息。[self tableViewDidTriggerHeaderRefresh]; 检查一下这个方法是不是在chatViewController 和EaseMessageViewCOntroller 的ViewDidLoad 里面都调用了,看如果都有,随便删除一个这个方法。就ok了!
 
关于头像昵称如何能做成活的,思路是:环信有一个方法,可以获取消息列表的信息。

1039815-451bc4398ac8a957.png


这个方法就在你的根视图里拿出来。能获取到所有消息的环信的账号,如果你们注册的环信账号是手机号的。第一次发请求的话给服务器依次发送这个手机号,获取他的昵称和头像,然后存到本地。下次再次发请求的时候之前获取一下这个信息,有的话直接拿,没有的话就发送请求。
 
现在我在研究如何改变会话列表的名字和头像,因为有些产品的需要,不能展示账号或者手机号,所以如果你还有不懂得地方你加我好友QQ:1119718338,欢迎一起交流。当然如果您觉得对您有帮助,请点赞或打赏!谢谢!
  收起阅读 »

架构师的技术领导力之路:看环信一乐聊些什么

小欧有话说: 全球技术领导力峰会(GTLC)30日【Tim会客厅】环节,迎来了EGO北京分会第2小组的3名成员——环信首席架构师梁宇鹏、爱因互动联合创始人兼CTO洪强宁、当当架构部总监史海峰,一起聊聊他们的技术领导力之路。 主持人(左一):杨卫华(...
继续阅读 »
小欧有话说:

全球技术领导力峰会(GTLC)30日【Tim会客厅】环节,迎来了EGO北京分会第2小组的3名成员——环信首席架构师梁宇鹏、爱因互动联合创始人兼CTO洪强宁、当当架构部总监史海峰,一起聊聊他们的技术领导力之路。

T101[HINFCBC8_@{[OUFYQ.png


主持人(左一):杨卫华(Tim Yang),新浪微博研发副总经理

从技术人到领导者
Tim:大家先做一个简单的自我介绍吧!


梁宇鹏:在技术圈大家都叫我一乐,我来自环信,这是一家做即时通讯云服务和全媒体智能客服的公司,我是环信的首席架构师,同时也兼任IM事业部技术总监,负责即时通讯云服务产品线。

史海峰:我现在在当当负责架构部,之前在神州数码和亚信做电信业务系统集成,做过七年北京移动的项目,来到当当四年多,如果大家是北京移动的号码或者在当当买过书的话,都是我的衣食父母。

洪强宁:我之前在豆瓣网做首席架构师,2014年到了宜信做首席架构师,现在创业,和豆瓣首席科学家王守崑一起创办了爱因互动。

Tim:各位从刚毕业到目前的位置,其中有哪些难忘的事情或者关键的事情?怎么能够成为像你们这样的“老司机”?
梁宇鹏:我在微博工作了几年,Tim是我的老领导,在微博负责聊天、通讯系统,一开始我也是一心钻研技术,当时整个IM系统即将到达千万级的时候,大家都想做一个酷一点的中间件,这个方案当时出了好几版,一到这儿被枪毙了。当时Facebook做了一个通讯中间件,我当时很不理解,每天拉着Tim讨论,“这个东西业界肯定还缺,而且我们一定需要,就想做这个东西,为什么不能做?”讨论了半天,后来Tim问我一句话,“你觉得现在的系统能不能搞得定?”我说“能搞定”,他其实也将信将疑,说“你证明一下现在的系统搞得定”,我证明完之后,这个中间件没有下文了,觉得现在系统没有问题了,不需要做中间件。

@B7}9}J@{C(2Y_@2OFFZ4`I.png


后来想起来这是对我影响比较大的一点,从那之后,不再单纯地去追求做一个能写很酷的中间件的技术人员,会换个角度来思考我们团队需要什么样的东西,或者当前的团队能做到什么样的程度,如果能做到足够好,那么就去想这是不是你最需要做的。我觉得这个事情对我触动很大,当时整个观念都变化了,中间的沟通过程也是比较痛苦的,因为当时我每天都觉得我有一个理想,我要去实现,然而并没有得到支持。

现在在环信做的通讯协议、IM协议,这是原来我们也想做的。2012年移动互联网来了之后,都要做面向移动互联网的IM协议。除了中间件,还有很多可以做,比如现在做的跨全球远距离数据同步的后端系统等等。我不觉得我放弃了追求,而应该是自身的一次蜕变,因为我知道有很多技术可以做,而且也可以跟业务结合起来。

Tim:从我的角度补充一下,作为一个技术人,在大部分环境里面,你要做的事情很多时候确实是够用就行了,大家可能听说过很多反面的情况,一些技术负责人做了不恰当的决策,导致整个技术团队陷在泥潭里面,最终产品没出来,而且大家很累,也没有成就感。

梁宇鹏:我们做微博的时候,Twitter天天宕机,技术体系转来转去,折腾了好多轮。在技术人员心中,大家就觉得技术氛围很好,也很愿意折腾。我觉得我们微博这块虽然技术上走得慢一点或者走得很稳健,但是在服务质量上业界都看得见。我现在比较理解了,我会告诉大家什么先不要做,先把最主要的事情做完。

史海峰:我说一点,希望对在座的各位有一点借鉴意义。因为我之前是做电信软件的,现在在当当,从传统IT转到互联网这个过程还是挺痛苦,也挺刺激的。刚到互联网公司,对于常用技术、架构、场景,包括电商这一套业务都不是特别了解。而且大家都知道,互联网公司人员流动大,没有什么文档,很难快速切入。我凭着一些坚持,找各种机会去了解,有时候厚着脸皮跟人聊,哪怕他不愿意搭理你,最后发现自己应该是有一些钝感力,就这样坚持下来,让大家认可了我,在当当也待了下来,还算是转型成功。总结一下,就是坚持做一些别人做不了或者说不愿意做的事情。

洪强宁:坚持很重要。怎么成为“老司机”?我是足够老了,开始进入IT这个行业大概是上小学时,找了一本书开始自学,那时候就决定自己要做一个程序员。大学毕业后,终于找到了一个正式的程序员工作。最开始是做嵌入式系统,也是在那个时候接触到Python这个语言,也很喜欢,在Python社区也很活跃,2005年豆瓣的创始人给我发了封邮件,问我要不要一起干,我就过来了。随着豆瓣规模越来越大,我的重心慢慢转移到平台这个层面,在这个层面学到了很多东西,也得到了架构师的头衔。

另外一个转变,是我从豆瓣离职,到了宜信担任首席架构师,眼界得到了提高,看到了不一样的公司中不同的管理方法,从这个时候开始对管理产生了兴趣,也诞生了我要亲手创造一个伟大的公司的想法。今年6月份,终于开始创业,这对我来说是人生的一个大转变。但是不管怎样,最重要的是坚持。我一直觉得技术是能够改变世界的,我能够通过自己的手去让这个世界变得更美好一些,这是值得奋斗一生的事情。

Tim:从技术人到领导者,你们的心态发生了哪些变化?

梁宇鹏:原来觉得自己加一加班或者自己熬一下夜,这个程序就做完了,现在要调整自己,如果他们觉得做不完,你要不要接受这个状态,能不能补救,而不是推着他们一定要这样做。总之就是,知道什么不要做,知道什么你做不到。

史海峰:我来总结的话,就是“以德服人”。一乐说得特别好,以前面对的更多是机器,都是标准化的,现在面对的是一个团队,每个人都不一样,领导一个团队的话,不要求在每个技术领域都比团队成员强,最重要的是在最基本的素质和为人上超过他们,对自己的要求要比对他们的要求更高,要学会控制自己。

领导者有时候的一些方式方法,大家未必会接受的,这样实施起来会有一些抵触情绪,需要领导者更好地琢磨怎么去调整,最好的办法就是以身作则。

~4SN[U8EC0@KYSE2{R2E95F.png


洪强宁:我给所有的技术人的建议是保持不断学习,但是如果是技术管理者这个群体,我的建议可能更加务实一点,就是做好授权这一件事情,不要把所有事情都把握在自己手上,把权力下放到团队去,给他们更多的自由度,创业公司效率为什么比大公司高很多,很重要的原因是创业公司几个人一碰头就可以把这个事情决定了,大公司要层层上报,最后可能就不了了之了。把权力下放,找到合适的人让他放手去做,团队成长得会更快,你也可以拥有一些得力的助手。
  • 首席架构师之路


Tim:在座的几位都是非常优秀的架构师,你们典型的一天是怎么度过的?都做了哪些事情?


梁宇鹏:我一天最重要的两件事情,一是跟大家梳理架构,康威定律指出,公司的组织架构能够反映出公司产品的技术架构,如果我们的架构比较落后,那么瓶颈在我身上,因为只有我一个人能够把这个事情搞清楚,其他人都不明白,那么工作就没办法进行。所以我想的最多的事情就是组织尽量多的人,大家一起来讨论这个架构,最终大家就都了解这个架构,了解每个组件以及服务的权衡点在哪,就可以自己来设计这个服务。有很多创业公司的增长是非常快速的,如果没有一个很好的基础,那么流量来了的时候,大家压力就很大。架构能否撑得住,这个对我来说是最焦虑的。

Tim:作为首席架构师,跟其他架构师怎么分工呢?

梁宇鹏:为什么叫首席呢?因为每个人都有架构的思路和想法,我们团队至少一半以上可以做架构的,我来做的话,可能只是把大家的想法汇总起来,把大家不一致的观点组合起来找到一个一致的想法。

大家一定要达成一致,达不成一致这个架构其实没有任何价值,我觉得重要的是我让大家在有争执的时候,我们选择一个大家都能同意的点来开始做,这是我做的事情,还算比较重要的一部分。

史海峰:声明一下,当当还没有首席架构师,我主要的工作还是参与一些项目的架构设计,也会评审一些设计方案。我比较关注的问题是,如果在会议或者邮件中遇到一些不是特别了解的情况时,尽可能跟当事人当面沟通;技术债我都会记下来,很多东西都是我们来不及做或者说只是知道了然而怎么解决我们也不清楚,这种情况下,我就记下来,自己回头有时间再看一看。将来再遇到其他项目的时候,可能顺手能把这个事情解决了,这样能达到一石二鸟的效果,这是我比较关注的事情。

洪强宁:在豆瓣期间,刷豆瓣是我工作的一部分,因为豆瓣所有工程师,页面右上角会出现渲染时间,而且会有颜色标注。我每天关注的点就是一些关键的指标,我在豆瓣负责平台部门,我会关注性能指标、可用性指标,从中发现是不是存在问题。同时作为首席架构师,业务部门对于平台所有的需求,最后汇集到我这儿来,我会判断是否需要对架构做调整,更好地支持业务。在这个基础上,我会设计下一步的架构发展。我的原则是,作为架构师,可以超前设计一点,但是不要超前太多,有一定的冗余量,等到流量突然增加的时候,可以应付得了。

Tim:洪教授曾经是豆瓣的首席架构师,能不能介绍一个由你作为首席架构师发挥重要作用的产品或者技术?
洪强宁:我在豆瓣主持的其中一个比较大的项目是豆瓣的服务化,豆瓣最早期的时候是一套代码,一个代码仓库,所有的产品都是应用这一套代码。随着业务的发展,这个代码量越来越大,峰值的时候50万行,会出现各种各样的问题,当时判断这种方式是不能持久的。我主持做了服务化的拆分,也设计了一些服务化的框架、辅助的工具,这差不多是我在豆瓣做的工作中,对于整个豆瓣的发展影响最大的事情。

111.png


技术与管理的平衡

Tim:对于技术领导者这样的角色,你们认为最重要的素质或者能力是什么?

梁宇鹏:对我来讲,心态特别重要,之前无论是做技术、做架构、还是写技术组件的代码,面对的都是机器,如果要做一个技术领导者,需要面对的是人,你就要调整自己好自己的状态,你面对的这帮兄弟们,他们的状态不像机器一样恒定,有些时候他的状态可能随着他的心情或者生活状态发生变化。

我经常用跑步来举例子,我跟团队很多兄弟一起跑,跑步这件事情,你会对自己能跑多远有一个期望,假设现在能跑10公里,那么跑马拉松就会有非常大的压力,对于技术人也一样,如果他自己觉得只能跑10公里,那么把他推到马拉松的级别,他可能会直接跟你决裂。所以最重要的是随时观察团队成员的状态,他们现在能到什么级别,你再去往前推动,而不是像机器一样,让他们发挥出100%的性能。

Tim:如何从一个写代码的角色转变到一个技术领导者的角色?怎么把握这两者之间的平衡?

梁宇鹏:我只能试着去平衡,因为我觉得写代码的时候应该是大多数技术人员心情最平静的时候,或者说最高兴的时候。真正去管人的时候,你会发现有太多的不确定性,可能相当于遇到了一段读不懂,但是永远有bug的代码,没办法,只能试着适应他,把他当成一个库来调用,我没有太好的经验。但是对我个人来讲,如果遇到问题,我会通过跑步去换一个环境,可能只是半个小时、1个小时,但回来之后能够静下心来。

史海峰:首先,一部分的同学是被动地被提到了一个管理岗位,很可能你的领导离职了或者去了更高的职位,由你来带团队。基本上最简单的是模仿,毕竟当过下属,你知道你的上级是怎么安排任务,怎么去跟踪,需要关注哪些点,这是最初的。

第二点,后来慢慢关注了一些方式方法,成熟的管理理论或者解决问题的方法论,你会发现很多东西有人已经琢磨得非常明白,只是自己之前没关注不了解。

第三点,做技术的人离开安全区的时候,都会有一个想法——我以后不能全天写代码了,我的竞争力在哪里。这要靠时间,靠团队协作,靠实践,慢慢去调整你的认识,你会发现团队能做更大事情的,你在其中做一个核心角色,这样才会更有价值。

洪强宁:我最开始的时候就是一个非常标准的程序员,什么事情都自己做,很快发现最后所有的事情都堆在你手上,忙得要死,你的团队其实工作并不饱和,这时你会逼迫自己去改变这个问题,我找到了方法,就是把自己的重心从实现变成设计,并且进行分解,分解出来的任务并行开发。从这个阶段开始,我的工作职责慢慢从实践者变成了管理者。

这个过程需要特别注意的是,要克制自己,比如你看到一个技术难题,特别想自己解决,结果陷入问题当中导致项目延期。另一方面,即使成为一个管理者,也不应该放弃技术,架构师还是要写代码的,因为这样才能知道你设计的东西是不是真正适合开发。随着管理的工作越来越多,真正写代码的时候,你给自己安排的代码任务不能成为别人的阻碍,像我现在写的代码更多的是一些偏研究性的代码,偏提升效率的工具,还有一些打杂性的工作,没人做的事情我来做,这样既可以不阻碍团队的开发效率,也不至于丧失对代码的理解。
 
本文由EGO原创首发,请获取授权后转载,完整演讲PPT下载请戳“阅读原文”
 
关于全球技术领导力峰会(GTLC)

由极客邦旗下高端技术人社交网络EGO举办,旨在聚集国内一线技术领导者,共同分享、探讨技术管理、技术领导过程中的最佳实践,为参会者打造一个高质量的交流、学习平台。本次大会由超高性价比CDN又拍云独家冠名赞助。

阅读原文 收起阅读 »

Android混淆那些事,看这篇就够了

简介 作为Android开发者,如果你不想开源你的应用,那么在应用发布前,就需要对代码进行混淆处理,从而让我们代码即使被反编译,也难以阅读。混淆概念虽然容易,但很多初学者也只是网上搜一些成型的混淆规则粘贴进自己项目,并没有对混淆有个深入的理解。本篇文章的目的...
继续阅读 »
简介

作为Android开发者,如果你不想开源你的应用,那么在应用发布前,就需要对代码进行混淆处理,从而让我们代码即使被反编译,也难以阅读。混淆概念虽然容易,但很多初学者也只是网上搜一些成型的混淆规则粘贴进自己项目,并没有对混淆有个深入的理解。本篇文章的目的就是让一个初学者在看完后,能在不进行任何帮助的情况下,独立写出适合自己代码的混淆规则。

说在前面

这里我们直接用Android Studio来说明如何进行混淆,Android Studio自身集成Java语言的ProGuard作为压缩,优化和混淆工具,配合Gradle构建工具使用很简单,只需要在工程应用目录的gradle文件中设置minifyEnabled为true即可。然后我们就可以到proguard-rules.pro文件中加入我们的混淆规则了。
android {
...
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
以上示例代码表示对release版本就行混淆处理。下面我们先来简介下ProGuard的三大作用,并简要说明下它们常用的命令。

ProGuard作用

压缩(Shrinking):默认开启,用以减小应用体积,移除未被使用的类和成员,并且会在优化动作执行之后再次执行(因为优化后可能会再次暴露一些未被使用的类和成员)。
-dontshrink 关闭压缩
优化(Optimization):默认开启,在字节码级别执行优化,让应用运行的更快。
-dontoptimize  关闭优化
-optimizationpasses n 表示proguard对代码进行迭代优化的次数,Android一般为5
混淆(Obfuscation):默认开启,增大反编译难度,类和类成员会被随机命名,除非用keep保护。
-dontobfuscate 关闭混淆
混淆后默认会在工程目录app/build/outputs/mapping/release下生成一个mapping.txt文件,这就是混淆规则,我们可以根据这个文件把混淆后的代码反推回源本的代码,所以这个文件很重要,注意保护好。原则上,代码混淆后越乱越无规律越好,但有些地方我们是要避免混淆的,否则程序运行就会出错,所以就有了下面我们要教大家的,如何让自己的部分代码避免混淆从而防止出错。

基本规则

先看如下两个比较常用的命令,很多童鞋可能会比较迷惑以下两者的区别。
-keep class cn.hadcn.test.**
-keep class cn.hadcn.test.*
一颗星表示只是保持该包下的类名,而子包下的类名还是会被混淆;两颗星表示把本包和所含子包下的类名都保持;用以上方法保持类后,你会发现类名虽然未混淆,但里面的具体方法和变量命名还是变了,这时如果既想保持类名,又想保持里面的内容不被混淆,我们就需要以下方法了

-keep class cn.hadcn.test.* {*;}

在此基础上,我们也可以使用Java的基本规则来保护特定类不被混淆,比如我们可以用extend,implement等这些Java规则。如下例子就避免所有继承Activity的类被混淆

-keep public class * extends android.app.Activity

如果我们要保留一个类中的内部类不被混淆则需要用$符号,如下例子表示保持ScriptFragment内部类JavaScriptInterface中的所有public内容不被混淆。
-keepclassmembers class cc.ninty.chat.ui.fragment.ScriptFragment$JavaScriptInterface {
public *;
}
再者,如果一个类中你不希望保持全部内容不被混淆,而只是希望保护类下的特定内容,就可以使用
<init>;     //匹配所有构造器
<fields>; //匹配所有域
<methods>; //匹配所有方法方法
你还可以在<fields>或<methods>前面加上private 、public、native等来进一步指定不被混淆的内容,如
-keep class cn.hadcn.test.One {
public <methods>;
}
表示One类下的所有public方法都不会被混淆,当然你还可以加入参数,比如以下表示用JSONObject作为入参的构造函数不会被混淆
-keep class cn.hadcn.test.One {
public <init>(org.json.JSONObject);
}
有时候你是不是还想着,我不需要保持类名,我只需要把该类下的特定方法保持不被混淆就好,那你就不能用keep方法了,keep方法会保持类名,而需要用keepclassmembers ,如此类名就不会被保持,为了便于对这些规则进行理解,官网给出了以下表格
保留    防止被移除或者被重命名    防止被重命名
类和类成员    -keep    -keepnames
仅类成员    -keepclassmembers    -keepclassmembernames
如果拥有某成员,保留类和类成员    -keepclasseswithmembers    -keepclasseswithmembername移除是指在压缩(Shrinking)时是否会被删除。以上内容时混淆规则中需要重点掌握的,了解后,基本所有的混淆规则文件你应该都能看懂了。再配合以下几点注意事项,

注意事项

1,jni方法不可混淆,因为这个方法需要和native方法保持一致;
-keepclasseswithmembernames class * { # 保持native方法不被混淆    
native <methods>;
}
2,反射用到的类不混淆(否则反射可能出现问题);

3,AndroidMainfest中的类不混淆,所以四大组件和Application的子类和Framework层下所有的类默认不会进行混淆。自定义的View默认也不会被混淆;所以像网上贴的很多排除自定义View,或四大组件被混淆的规则在Android Studio中是无需加入的;

4,与服务端交互时,使用GSON、fastjson等框架解析服务端数据时,所写的JSON对象类不混淆,否则无法将JSON解析成对应的对象;

5,使用第三方开源库或者引用其他第三方的SDK包时,如果有特别要求,也需要在混淆文件中加入对应的混淆规则;

6,有用到WebView的JS调用也需要保证写的接口方法不混淆,原因和第一条一样;

7,Parcelable的子类和Creator静态成员变量不混淆,否则会产生Android.os.BadParcelableException异常;
-keep class * implements Android.os.Parcelable { # 保持Parcelable不被混淆            
public static final Android.os.Parcelable$Creator *;
}
8,使用enum类型时需要注意避免以下两个方法混淆,因为enum类的特殊性,以下两个方法会被反射调用,见第二条规则。
-keepclassmembers enum * {  
public static ** values();
public static ** valueOf(java.lang.String);
}
写在最后

发布一款应用除了设minifyEnabled为ture,你也应该设置zipAlignEnabled为true,像Google Play强制要求开发者上传的应用必须是经过zipAlign的,zipAlign可以让安装包中的资源按4字节对齐,这样可以减少应用在运行时的内存消耗。

作者简介
彭涛(@彭涛me) 致力于让技术变得易懂且有趣
GitHub地址:https://github.com/CPPAlien 收起阅读 »

《全媒体客户中心管理》读书沙龙,南京-杭州-合肥三站齐发

9月27日-29日,《全媒体客户中心管理》读书沙龙,南京-杭州-合肥三站齐发,小伙伴还在等什么! 《全媒体客户中心管理》读书沙龙——南京站 2016-09-27 14:00南京市秦淮区莫愁路329号117号楼101市室 《全媒体客户中心管理》读书沙龙——合...
继续阅读 »

南京-杭州-合肥三站合一.jpg


9月27日-29日,《全媒体客户中心管理》读书沙龙,南京-杭州-合肥三站齐发,小伙伴还在等什么!

《全媒体客户中心管理》读书沙龙——南京站
  • 2016-09-27 14:00
  • 南京市秦淮区莫愁路329号117号楼101市室
 《全媒体客户中心管理》读书沙龙——合肥站
  • 2016-09-28 14:00
  • 合肥市蜀山电子商务产业园3期2号楼3楼党政服务中心
 《全媒体客户中心管理》读书沙龙——杭州站
  • 2016-09-29 14:00
  • 杭州市江干区钱潮路369智谷人才广场7楼

 
活动介绍:

   8月3日,国内第一本“全媒体”客服学术著作《全媒体客户中心管理》读书沙龙将在包括北上广深等全国十大城市陆续举办。环信作为国内全媒体智能SaaS客服的倡领者一直致力于推动整个中国SaaS客服行业的发展,给企业提供最具效率和最佳用户体验的客服产品及服务。此次和客服行业权威媒体《客户世界》以及行业专家一起联合推出《全媒体客户中心管理》一书,环信提供了在全媒体客服领域包括产品技术和客户运营方面大量的最佳实践及成功案例。同时,环信参与了从前期图书主题的设定、相关最佳实践和成功案例的准备、中期文档图表的梳理、后期出版环节的编审和呈现,一直到各地读书沙龙的组织工作,目的也是推动整个SaaS客服行业和企业用户少走弯路,加速企业用户的信息化和用户体验进程,让呼叫中心(客户中心)提速迈向智能化和数据化时代。
 
部分演讲主题展示:
 
全媒体客户中心的规划、建设、运营与管理

演讲嘉宾:张艳

   蜜芽服务副总裁  近20年客服中心管理经验,专注于企业自建呼叫中心运营管理、服务管理、会员精准营销。为多家企业搭建、重建呼叫中心,并成功推动呼叫中心从分布到集中、从服务到营销、从单渠道到全媒体转型。先后就职于携程旅行网、中青旅、中移动12580、红孩子、苏宁云商等企业, 现任蜜芽服务副总裁。 从呼叫中心基础管理工作开始,多年来在电子商务类企业组织实战。张老师将她多年来的理论总结和实战经验加以提炼和归纳,汇集成为新书《全媒体客户中心管理》,期待对国内本行业管理者们的运营工作提供积极的帮助。从呼叫中心基础管理工作开始,多年来在电子商务类企业组织实战。张老师将她多年来的理论总结和实战经验加以提炼和归纳,汇集成为新书《全媒体客户中心管理》,期待对国内本行业管理者们的运营工作提供积极的帮助。
  收起阅读 »

环信移动客服v5.2产品更新--增加呼叫中心集成,优化微信、微博使用体验

    更新!环信移动客服V5.2已发布,增加呼叫中心集成,优化微信、微博使用体验,珍视您的每一位客户就用环信移动客服!注:环信移动客服v5.2_产品更新说明/产品功能列表/产品使用指南 请到文章末尾下载1 客服模式     1.1新增访客中心      客服...
继续阅读 »
    更新!环信移动客服V5.2已发布,增加呼叫中心集成,优化微信、微博使用体验,珍视您的每一位客户就用环信移动客服!
注:环信移动客服v5.2_产品更新说明/产品功能列表/产品使用指南 请到文章末尾下载
1 客服模式    
  • 1.1新增访客中心    
  客服模式下,新增“访客中心”页面,供客服查询自己接待过的访客的信息。可以回呼访客,查看与访客的互动记录。该页面默认隐藏,需要管理员进入“管理员模式 > 设置 > 系统开关”页面,打开“客服可以使用访客中心功能”开关。打开开关后,客服可以在“客服模式”下看到“访客中心”页面。在访客中心页面,点击“筛选排序”可以对访客进行筛选,点击

图片1.png

按钮可以回呼访客。 

图片2.png

  点击某位访客,进入访客详情页面。可以查看访客资料、修改访客资料、修改访客标签、对访客进行回呼。在“互动记录”Tab页,可以查看该访客的全部会话历史,选中某条会话后可查看会话详情。对来自Web渠道的访客,会话详情界面还包括访客IP地址、地区、软件环境、来源。

图片3.png

注:客服模式下,不能在“访客中心”页面查看访客给出的满意度评价以及导出访客信息。2 管理员模式    
  • 2.1 设置系统消息的发送人
支持自定义系统消息的发送人昵称。默认情况下,系统消息(包括欢迎语、问候语、超时提示语等)的发送人昵称显示为“调度员”,可在“管理员模式 > 设置 > 系统开关”页面设置(如下图)。另外,调度员的头像显示为企业头像,可在“管理员模式 > 设置 > 企业信息”页面设置。

图片4.png

  • 2.2 设置客服可以使用访客中心功能    
新增“客服可以使用访客中心功能”开关。打开开关后,客服可以使用访客中心功能,查看自己接待过的访客的资料及互动记录。该开关默认关闭。

图片5.png

  • 2.3 设置呼叫中心渠道(增值服务)    
新增呼叫中心渠道的设置页面,移动客服标准版和旗舰版的租户均可以申请开通呼叫中心。申请开通呼叫中心功能,只需进入“管理员模式 > 渠道管理 > 呼叫中心”页面,点击“申请热线号码”按钮,填写您的联系方式,并保存。之后,环信商务经理会主动联系您。

图片6.png

  • 2.4 【优化】微信公众号设置页面    
优化微信公众号的设置页面,点击“添加微信公众账号”按钮,即可按照步骤引导,将您的微信公众号绑定到环信移动客服。

图片7.png

  • 2.5 【优化】微博账号设置页面    

优化微博账号的设置页面,点击“添加微博认证账号”按钮,即可按照步骤引导,将您的微博账号绑定到环信移动客服。
绑定后,微博粉丝向您发送私信或@您的微博账号,都可以在移动客服系统收到消息,您的回复会以私信的形式发送给微博粉丝。

图片8.png



 体验环信移动客服 http://kefu.easemob.com/
 查看历史版本请点击更新日志

 
使用过程中有遇到任何问题、反馈建议欢迎直接评论留言,我们将第一时间回复!

环信移动客服v5.2_产品更新说明/产品功能列表/产品使用指南  请点击下载↓↓↓ 
  收起阅读 »

客户服务的未来,全在人工智能和聊天工具

   上个世纪的70年代,市场的供需双方中,消费者还处于弱势地位,处境可谓悲惨。企业的CFO和CEO们,奸诈无比、诡计多端,为了对付那些不满意的消费者,他们设计了众多障碍,让消费者无法获得赔偿。而电话自动应答系统,就是其中最有效的杀招。另外还有深奥难解而又绝不...
继续阅读 »


303953-de48791b41ec3eb1.png


   上个世纪的70年代,市场的供需双方中,消费者还处于弱势地位,处境可谓悲惨。企业的CFO和CEO们,奸诈无比、诡计多端,为了对付那些不满意的消费者,他们设计了众多障碍,让消费者无法获得赔偿。而电话自动应答系统,就是其中最有效的杀招。另外还有深奥难解而又绝不通融的消费协议,那个年代的“奸商”们几乎消灭了“客户投诉”这种现象,为此奸商们欢欣鼓舞、击缶而歌。

   这一片险恶的沼泽地,让消费者无计可施......直到社交媒体出现,才挽救了普通消费者于水火,宣告了一个新时代的开始。今天,任何无名之辈的阿猫阿狗,都有着天王巨星、达官贵人一样的力量。匹夫之怒,亦能让商家“伏尸百万,流血千里”。商家,开始认真对待任何一名消费者的态度。

   Facebook 的人工智能应用,给我们带来全新的生存体验,未来也许一切都只需聊个天就解决了。订花? ok,搞定! 看新闻? ok,搞定! 天气预报? ok,搞定!

那么,客户服务呢? 是否也可以依赖人工智能和聊天工具? 

   很多事我们都已忘记,但我们现在还记得,一次次“现在客服忙,请您等待”的惨痛经历。若是通过聊天工具与客户代表对话,1分钟时间就能解决我们的问题,请问,这难道不是我们所有人梦想中的滑板鞋吗?难道我们不能梦想,聊个天,就能定机票,就能装宽带,就能查水表?

梦想很丰满,现实很骨感。这一切的实现,并不容易!

   电话,已经沦为垃圾广告、诈骗和报警的专用通讯手段。而各种聊天、消息工具则完全占领了人类通信的上甘岭,这里已然焦土三尺,却是互联网王者的加冕之地。年轻人,尤其喜欢聊天工具,这就给了聊天工具未来的宝座。

   但实际上,聊天工具并非灵丹妙药金箍棒。一个笨嘴拙舌的消费者,在微信上,在facebook上,也一样说不清楚自己的插座是否有电。而早上和男友刚刚分手的女客服,在聊天工具上,也会和电话上一样暴躁和碧池。从电话到聊天工具,只是媒介的变化,妄想美好的人间从此降临,那是不客观的。

   要世界变成美好的人间,只要人人献出一点爱不就成了么。但这太难了,我们都是人,知道自己献不出更多的爱了,那么就一点点。怎么办?让机器人上吧,只要有电,机器人的爱无穷无尽。

   人工智能,对客户服务的改进,将是巨大的变革。人工智能,能够提前收集信息,帮助客户代表来进行客户交互。能够理解到底发生了什么,消费者才会头发上指,目眦尽裂。能够准确体察消费者到底要的是什么,是一场触及心灵的鸡汤对话,还是2.58元的赔款。在理想的情况下,人工智能完全可以自行处理一些简单的问题,比如静静的阅读消费者狂怒的诅咒,并送上点赞和笑脸符。

   机器人客户的历史很长,其实电话系统中的自动应答,也算是机器的一种。在电话系统中,提醒消费者说出账户号码,描述问题,或者根据需求按某个数字。 区别在于,电话系统中的机器人,通常会惹怒消费者客户,而聊天机器人,则具备取悦客户的潜力。

   在“机器人”和“人工”之间的取舍与均衡利用,则是关键所在。但一切的大前提,乃在于机器人的质量,当然,还有人工客服代表的素质。

   毫无疑问,未来需要“人工”和“机器人”亲密配合的玉女双修。水乳交融、天人合一、双修互补,方能打通任督二脉。客户幸福了,业务也蒸蒸日上了。

   假以时日,人工智能(机器人)将会更加聪明,企业也会更加委以重任,广泛利用人工智能。 想想看,通过聊天,30秒钟就能与宽带公司预约排号。零售商只用几秒钟就能替换有瑕疵的商品。酒店呢,只需要几秒就能通过赠送积分,消除掉投诉客户的怨气。这些场景,对机器人而言,都是小菜一碟。好钢用在刀刃上,好的人工客服,要用来对付来自中国的医闹。

   Facebook 的 Messenger 平台是众多平台中的一种,这些平台都会用来提供客户服务。配合了智能软件和一点点人工辅助,消费者能够获得绝妙的极致体验,而公司也就避免了遭受微博投诉转发、舆情危机。想想看,百度这样的,都惨遭万箭穿心。没有删贴能力的,都要小心应付,建设好客服平台。

   未来的客户服务,必将给与消费者更多渠道和媒介的选择,也必将更加节省消费者的时间。问题需要解决的更快,甚至无人干预,智能解决,则最好。

   未来的客户服务,不是让消费者恐惧的热线电话,而是构建客户关系的利器。最好的营销手段,就是客户服务,而聊天智能机器人,是巨大的进步。 收起阅读 »

员工关怀系统——识别满意度的影响因素

   客户服务是指以客户为导向的价值体现,所有能提高“客户满意度”的内容都属于客户服务的范围。“以客户为中心”提高客户满意度,培养、维护客户忠诚度,在目前的电子商务时代显得日益重要,成功的客户服务关系可以为企业带来巨大的利益。    目前客户服务关系面临...
继续阅读 »


640.jpg


   客户服务是指以客户为导向的价值体现,所有能提高“客户满意度”的内容都属于客户服务的范围。“以客户为中心”提高客户满意度,培养、维护客户忠诚度,在目前的电子商务时代显得日益重要,成功的客户服务关系可以为企业带来巨大的利益。

   目前客户服务关系面临的最大挑战就是客户流失问题,客户的需求不能得到切实有效的满足往往是导致客户流失的关键因素,简单来说就是客户的满意度低。对客服中心而言,话务员是客户与企业之间的沟通桥梁,话务员的一举一动代表着公司的形象,其行为直接影响客户的满意度。作为一名合格的话务员,首先要对企业的相关业务非常熟悉,能够以最短的时间解答客户的问题、解决客户的投诉、办理客户需要的业务,其次要有熟练的沟通技巧,丰富的沟通经验,以及得体的话语,维持客户的满意度和忠诚度。

   随着电信市场的发展,话务员的流失成为了各运营企业普遍关注的问题,对于运营企业而言,绝大部分的资源就是人力资源,且由于运营企业的行业技术含量较高,对员工的培养投入较大,培养周期较长,一旦出现过多的人员流失,对运营企业来说是一个致命的打击,并且新员工的招聘以及培训需要花费较多的人力、物力成本,因此避免人员流失是节省成本的最好方法。从美国劳动力市场的调研来看,80%左右的人员流失是可以通过各种措施避免的。避免人员流失,挽留现有员工,需要了解员工的工作,日常生活情况,并且建立有效的员工关怀系统,健全员工培训制度,充分了解员工的工作短板,工作压力,为员工营造良好舒适的工作环境,减少人才的流失。

一、如何建立健全员工关怀系统

   建立健全的员工关怀、监管和挽留机制,需要一个闭环管理的系统,该系统的组成部分包括:员工分析系统、员工关怀系统、员工管理系统,这三个系统共同组成员工关怀分析管理流程。

1.员工分析系统:建立分析模型,优化模型的系统;

2.员工关怀系统:展示员工基本信息,预测结果的展示系统;

3.员工管理系统:管理者填写员工调查问卷,关怀措施的掌上移动客户端;

   首先基于员工的历史数据建立分析模型,分析员工专业能力和敬业度对客户满意度的影响程度,将员工敬业度和专业能力等对客户满意度的影响较大的因素输入到员工关怀系统,管理者根据每个员工不同的影响因素,采取相对应的关怀措施,并将关怀措施与最终关怀的结果反馈给员工管理系统,员工管理系统收集到数据后,将数据添加到模型里面,优化模型,优化关怀措施(如图1)。

640.jpg


1、员工分析系统

   对于客服员工的分析,通过使用员工专业能力数据(定性数据)和员工敬业程度数据(定量数据)分别建立模型,分析员工的专业能力和员工的敬业程度与客户满意度之间的关系。

   分析员工专业能力是基于员工的基本属性和工作指标情况,包括工龄、职称、工作时长、整理时长、首次问题解决率等指标,使用信息值(IV)、基尼方差等指标筛选变量,基于最优分组和最优分群算法对变量进行分组、WOE证据权重转化,使用客户满意度作为模型的目标,建立员工专业能力分析模型,分析员工的专业能力与客户满意度的关系。
   分析员工敬业程度是基于员工的日常生活指标,包括违纪情况、工作状态、历年晋升、团队融合度、抱怨行为等数据,以客户满意度作为目标,根据每一类指标的分数权重,建立员工敬业度分析模型,分析员工的敬业程度与客户满意度的关系。

   最后对比两模型的结果,确定对客户满意度影响较大的因素。

2、员工关怀系统

   员工关怀系统主要是展示所有员工的基本信息、历史工作指标信息,影响客户满意度的因素,以及预测客户满意度的趋势。

   员工关怀系统可以根据用户的不同权限,实现对用户展示不同的内容,最大用户权限的管理者可以查看整个客服中心的整体信息,包括全体员工的平均通话时长、满意度、来电次数、业务办理、投诉次数等。管理者从企业的角度,评估全体员工的工作情况以及整体客户满意度情况。最小用户权限的管理者可以查看所属团队内各个员工的信息,包括员工个人出勤次数、休息次数、客户满意度,是否需要关怀、关怀原因,采取的关怀措施、关怀结果。

   管理者也可以查看影响满意度的因素与关怀措施之间的关系,所采取的关怀措施是否可以修复满意度,采取的关怀措施是否对员工有效。
 
3、员工管理系统

   员工管理系统是手机客户端,方便管理者随时随地查看员工的相关信息,对员工进行问卷调查,反馈员工近一个月的工作状态(敬业程度);同时也是管理者查看员工是否需要关怀,可以采取的关怀措施。采取的关怀措施包括为员工推荐相关的专业能力培训课程,沟通技巧培训课程,其他户外拓展课程等,管理者在员工培训完以后填写相关的培训结果,员工分析模型会对结果数据进行分析,优化模型,输出下一期满意度影响因素。

   管理者通过员工管理系统对比两个月的满意度影响因素,考察员工参加培训课程之后满意度的情况,并且以此判断专业能力和敬业程度对满意度的影响效果。

二、建立员工关怀系统的优势

   建立健全的员工关怀系统,拥有全面性、时效性、实用性、共享性等优势。企业建立健全员工关怀机制,不但能充分了解员工的基本情况,还可以了解管理者对员工的管理情况,达到一体化管理效果。

1、 全面性:可以展示员工的基本属性,工作指标情况,以及管理者对员工的评价,关怀措施,关怀结果的等信息。

2、 时效性:能够在手机APP上展示员工需要关怀的因素,管理者能够随时随地了解需要关怀的员工,并且可以通过APP选择员工的关怀措施,填写关怀结果。

3、 实用性:员工关怀系统立足员工基础属性,工作属性,深入了解员工的日常属性,结合客户满意度,识别影响较大的因素。

4、 共享性:员工关怀系统包括员工分析,员工关怀,员工管理等三方面组成,三个模块紧密相连,实现协同工作,数据共享目的。管理者在手机APP填写相关的问卷,查看需要关怀的员工。员工管理系统就能相应地展示相关的数据,数据收集完毕后,员工分析模块就会利用数据对模型进行优化。

   想留住客户,需要的是优质的服务,而提供服务的是话务员。客户提出一个问题,正确的解答才能留住客户,含糊其辞、不知所云、态度傲慢、慢条斯理,带来的损失将不只是一个客户而是更多的潜在客户。话务员的工作表现、工作态度直接关系到客户对企业的印象、满意度,客户对企业印象差,满意度低就会出现流失的现象,因此只有使员工满意,才能使客户满意。

   建立员工关怀系统,能够让企业找到员工的专业能力和敬业程度对客户满意度的影响,企业才能对此做出相应的补救措施,加强对员工的培训力度,协调员工各方面的关系;能够帮助企业完善相关的培训课程,调整培训力度,减少不必要的培训课程,增加有效的培训课程;最终能够增强话务员的能力,端正话务员的态度,提高客户满意度,减少企业损失。

本文刊载于《客户世界》2016年8月刊;作者曹海林,服务单位为广州佰聆数据股份有限公司。 收起阅读 »

【环信集成笔记】入门篇-环信单聊的简单用法

即时通讯--环信       诚如诸位正在看这篇文章的童鞋们,即时通讯我们用到的最普遍的就是--环信,接下来我(范小明)将在工程项目中用到的环信知识列举下来:        我们的项目用到的是单聊(不涉及群聊),用到的也是最基础的知识.        ...
继续阅读 »
即时通讯--环信

      诚如诸位正在看这篇文章的童鞋们,即时通讯我们用到的最普遍的就是--环信,接下来我(范小明)将在工程项目中用到的环信知识列举下来:

       我们的项目用到的是单聊(不涉及群聊),用到的也是最基础的知识.


       想必你看我这篇文章之前已经看了http://docs.easemob.com/im/start"环信开发文档"了吧,是因为字太多看不下去吗,记住即便在我这篇文章拿到了你想要的知识,这个开发文档也要多研读多研读多研读(每读一次就会有新的体会,然后很多问题就会迎刃而解,不信的话你就多读几遍试试),ok,废话不多说,下面上实例:

1)下载最新版的SDK


1934707-84f9c953b646a1c0.jpg


http://www.easemob.com/download 点进去下载去吧
 
2)导入sdk到工程里

你的工程是新建立的还是老工程要加入及时通讯功能?如果是老工程的话,导入sdk时注意sdk包里面包含第三方和你原来工程里的第三方有冲突吗(主要是版本冲突)

1934707-167361e18eb2a773.jpg


(点第三方进去查看下版本信息是否跟你原来的有冲突)
 
第三方库介绍

EaseUI 中用到的第三方库:

MWPhotoBrowser: 图片处理库,浏览显示

MJRefresh: 用于页面刷新

MBProgressHUD: 用于提示加载刷新

libopencore-amrnb.a,libopencore-amrwb.a: 用于 amr 与 wav 之间的转换

Demo 中用到的第三方库:

Parse.framework、Bolts.framework: Demo 中的用户信息存储在 Parse,这两个库是 Parse 所需要的库,开发者如果没用 Parse 存储,不要复制到自己项目中

libMobClickLibrary.a: 友盟相关的库,用于环信 Demo 基本信息的统计,开发者不用或者已有别的版本的库不要复制到自己项目

导入SDk环信官方文档写的特别清楚,我就不写了,直接参照文档就可以.

3)以上都搞完了是吗,我要把我的环信demo拿出来了,直接用就可以

即便导入sdk没有完成也可以直接用我的demo(上两步目的是担心sdk更新的太快)


demo的话加我个人qq1056912116给我要就可以,备注上:要环信单聊demo.(另外添加关注一下)

4)导入成功了,开始准备战斗

在工程里的Appdelegate中


1934707-c9e80e707b789ce5.jpg


appkey是你在环信官网中自己申请的
需要说明的是我的项目里环信ID是后台返的,然后再去注册,注册方法和登录方法记得都要开辟子线程去,要不会造成假死状态.获取对方的昵称和姓名是后台返给我的,不是通过延展改掉的,此处大家注意下.(一会我会特别标明)

1934707-44d05aa10da660c1.png




1934707-45dcf091e9b42495.png




1934707-0d0a73c9fd6b075f.png




1934707-869586f94c42ece4.png



requestNICK这个方法是获取昵称和姓名的


1934707-823fe2c6e2bca34f.png


以上截图均在Appdelegate里面,我的demo里面没有,到时你可以从官方demo里搜出来方法名直接调用就可以,仔细想一想就会了.
5)聊天界面的修改

聊天界面的控制器就是ChatViewController,看看我的demo研究下.在这个页面还需要把昵称和姓名附上值.


1934707-996373ba05fc22b0.png


这是ChatViewController.m里面的方法,修改下就可以,里面的参数用你自己的
6)登录环信

一般工程项目里的环信登录账号和密码与工程账号密码不一致,那么我把登录环信的代码贴过来,在你需要的地方用就可以,一般是在Appdelegate.(记住工程退出账号时记得退出环信账号)

1934707-741d799eb4fbf566.png


7)注册环信账号

 一般说来,环信账号的注册时有后台去完成的,但是我们今天讲一下如果后台不给注册,前端怎么去注册呢,看截图

1934707-5c7a9583f8bf963c.png


注册成功就去登录就好(官方DEMO上可以找到方法)
以上都弄完以后,就可以互相通讯了,难点就是看你怎么把demo导入到你的工程里,当时我导入就导入了半天时间.祝大家赶紧把工作做好,把技术提升起来!✌️
第三方库介绍

EaseUI 中用到的第三方库:

MWPhotoBrowser: 图片处理库,浏览显示

MJRefresh: 用于页面刷新

MBProgressHUD: 用于提示加载刷新

libopencore-amrnb.a,libopencore-amrwb.a: 用于 amr 与 wav 之间的转换

Demo 中用到的第三方库:

Parse.framework、Bolts.framework: Demo 中的用户信息存储在 Parse,这两个库是 Parse 所需要的库,开发者如果没用 Parse 存储,不要复制到自己项目中

libMobClickLibrary.a: 友盟相关的库,用于环信 Demo 基本信息的统计,开发者不用或者已有别的版本的库不要复制到自己项目


作者简介:我是范小明,QQ:1056912116,各位同学看这篇笔记遇到不明白的地方,欢迎骚扰我! 收起阅读 »

【环信集成笔记】入门篇-分享一些ios集成小技巧

这段时间由于家里的事和工作上的项目太忙好久没写东西了,,,今天先说说集成环信的经验吧,也许会很乱,我会慢慢修改的。新手一枚第一次集成环信,咱们慢慢看算是我自己的一个整理。   一、准备工作: 1.环信官网http://www.easemob.com 也可以百...
继续阅读 »
这段时间由于家里的事和工作上的项目太忙好久没写东西了,,,今天先说说集成环信的经验吧,也许会很乱,我会慢慢修改的。新手一枚第一次集成环信,咱们慢慢看算是我自己的一个整理。
 
一、准备工作:

1.环信官网http://www.easemob.com 也可以百度环信还是很好找的。

2.苹果账号,因为集成即时聊天要推送证书所以必须有账号,证书制作我就不在这里说了,可以上网查。

3.在环信创建APP上传推送证书,这样可以了过程很简单的(appkey,推送证书名是有用的可以先记录)。

二、开始集成

1.这里总的说一下

第一点环信提供两套SDK,一套带有实时语音(打电话)版本HyphenateFullSDK,一套没有的HyphenateSDK,正常不是专门聊天的APP都是不用实时语音功能的。

第二点环信给了一套做好的UI叫EaseUI,可以用能减少很多时间,特别是聊天页面自己写比较麻烦,特别是EASYUI中的Model写的都不错。

第三点集成方式可以手动集成SDK,可以用pod集成,手动集成就不说了,下面给出pod命令
pod 'HyphenateSDK', :git => 'https://github.com/easemob/hyphenate-cocoapods.git'
pod 'HyphenateFullSDK', :git => 'https://github.com/easemob/hyphenate-full-cocoapods.git'
pod 'EaseUI' //这个环信官网上没有是我在环信的git上找到的。
这里有一点注意的地方,如果你用pod集成,注意pod更新是会吧你改动的代码刷新掉,可以不直接用EaseUI里的东西,可以写子类,或者刷新掉了,可以用git或者svn,还原修改,这样就能回来了。
这样我们就把SDK集成到我们的项目了。

第四点什么改APP端做什么该服务端做,服务端做的其实很少,只有两个,第一注册环信,这部分一般式绑定在我们注册当前APP用户的要查询服务端数据库,所以服务端做,第二,好友关系,环信用户之间聊天是不需要好友关系的,所以决定了好友关系这部分可以直接用我们的服务端维护。这两点以外,其他的都是我们APP端做,,,

2.开始代码部分(这部分代码前提集成了HyphenateSDK和EaseUI)

首先在AppDelegate中注册环信,直接可用EaseUI中的注册方法

一,注册环信
/*!

* APP启动时注册环信,并登陆当前用户(如果有用户的话)

*

* @param application application description

* @param launchOptions launchOptions description

*/

-(void)startHuanXinEasyUIUseapplication:(UIApplication *)application Options:(NSDictionary *)launchOptions{

//AppKey:注册的AppKey,详细见下面注释。

//apnsCertName:推送证书名(不需要加后缀),详细见下面注释。

NSString *apnsCertName = nil;

#if DEBUG

apnsCertName = @"开发环境测试证书";

#else

apnsCertName = @"发布环境证书";

#endif

//环信appkey存放在UserDefaults

NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];

NSString *appkey = [ud stringForKey:@"identifier_appkey"];

if (!appkey) {

appkey = @"appkey";

[ud setObject:appkey forKey:@"identifier_appkey"];

}

//利用EasyUI启动环信(这里有一个坑,下面这个注册方法,点进去看会吧用户是否同意被加进群组改成NO,这里会导致群组加不上,记得看看,改回来)

[[EaseSDKHelper shareHelper] easemobApplication:application

didFinishLaunchingWithOptions:launchOptions

appkey:appkey

apnsCertName:apnsCertName

otherConfig:@{kSDKConfigEnableConsoleLogger:[NSNumber numberWithBool:YES]}];

//判断当前是否有用户,有用户登陆环信

if (DEF_PERSISTENT_GET_OBJECT(@"userId") != nil && DEF_PERSISTENT_GET_OBJECT(@"userPwd") != nil) {

NSString *accound = [NSString stringWithFormat:@"%@",DEF_PERSISTENT_GET_OBJECT(@"userId")];

NSString *pwd = [NSString stringWithFormat:@"%@",DEF_PERSISTENT_GET_OBJECT(@"userPwd")];

EMError *error = [[EMClient sharedClient] loginWithUsername:accound password:pwd];

[[EMClient sharedClient] addDelegate:self];

if (!error) {

NSLog(@"登录成功");
}
}
}
二、环信好友

聊天就得有好友,刚开始总述中说过好友是咱们服务器来维护的所以不用管,走一个接口就好了,因为我们集成EasyUI所以我们从接口中请求的数据最好都变成EasyUI中用户的Model(EaseUserModel),这样在用环信聊天的是不会那么麻烦,也可以自己写一个Model这样麻烦但是不乱,
#import <Foundation/Foundation.h>

#import "IUserModel.h"

@interface EaseUserModel : NSObject<IUserModel>

@property (strong, nonatomic, readonly) NSString *buddy;//用户名
@property (strong, nonatomic) NSString *nickname;//名字
@property (strong, nonatomic) NSString *avatarURLPath;//头像地址
@property (strong, nonatomic) UIImage *avatarImage;//头像图片

- (instancetype)initWithBuddy:(NSString *)buddy;

@end
中用户名是最有用的是直接用于创建聊天的,名字头像用处不大,因为这些存储都是在本地的,地方一改名字头像你这面可能没反应所以不用这个头像名字,都是使用消息中的扩展字段下面说。

三、环信聊天

聊天界面我推荐直接用EasyUI的,自己写各种消息cell实在麻烦,使用这个直接就是可以聊天的创建方法如下
EaseMessageViewController *viewController = [[EaseMessageViewController alloc] initWithConversationChatter:@"聊天对象的id,或者群组的id" conversationType:聊天的类型(单聊,群聊,聊天室)];
四、环信聊天消息重点*

在发消息过程中是不能传递用户名和头像的,所以我们要给消息添加扩展字段ext,(扩展字段可以其实就是发送消息是附带传递一个json数据),我们可以吧自己的头像和名字在每次发消息的时候发过去,这样聊天时,当前本人可以知道自己的名字和头像,聊天对方会在消息中发过来名字头像,这样两个人都有名字头像了,下面贴下我的扩展字段
- (void)_sendMessage:(EMMessage *)message //发消息的总方法
{
message.ext = @{@"nikeName":_myNikeName,@"headImagePath":_myHeadImagePath}; //添加消息扩展,我的名字,我的头像

if (self.conversation.type == EMConversationTypeGroupChat){
message.chatType = EMChatTypeGroupChat;
}
else if (self.conversation.type == EMConversationTypeChatRoom){
message.chatType = EMChatTypeChatRoom;
}

[self addMessageToDataSource:message
progress:nil];

__weak typeof(self) weakself = self;
[[EMClient sharedClient].chatManager asyncSendMessage:message progress:nil completion:^(EMMessage *aMessage, EMError *aError) {
[weakself.tableView reloadData];
}];
}
五、消息列表

消息列表的获取用环信的获取方法
- (void)tableViewDidTriggerHeaderRefresh
{
NSArray *conversations = [[EMClient sharedClient].chatManager getAllConversations];//本地获取消息
NSArray* sorted = [conversations sortedArrayUsingComparator:
^(EMConversation *obj1, EMConversation* obj2){
EMMessage *message1 = [obj1 latestMessage];
EMMessage *message2 = [obj2 latestMessage];
if(message1.timestamp > message2.timestamp) {
return(NSComparisonResult)NSOrderedAscending;
}else {
return(NSComparisonResult)NSOrderedDescending;
}
}];
[self.tableView endHeaderFresh];
[self.tableView reloadData];
}
这里有一个地方,再获得会话列表的时候,有几个数据要自己获取一下,头像,名字,最后一条消息内容,最后一条消息时间,消息未读数。其中消息未读数事环信帮我们做好的直接设置显示未读数就好
其中消息最后一条消息内容,最后一条消息时间。要我们获取最后一条消息在给其赋值
//在tableView代理中写
cell.detailLabel.attributedText = [[EaseEmotionEscape sharedInstance] attStringFromTextForChatting:[self _latestMessageTitleForConversationModel:model]textFont:cell.detailLabel.font];
cell.timeLabel.text = [self _latestMessageTimeForConversationModel:model];

//获取最后一条消息内容
- (NSString *)_latestMessageTitleForConversationModel:(id<IConversationModel>)conversationModel
{
NSString *latestMessageTitle = @"";
EMMessage *lastMessage = [conversationModel.conversation latestMessage];
if (lastMessage) {
EMMessageBody *messageBody = lastMessage.body;
switch (messageBody.type) {
case EMMessageBodyTypeImage:{
latestMessageTitle = NSEaseLocalizedString(@"message.image1", @"[image]");
} break;
case EMMessageBodyTypeText:{
NSString *didReceiveText = [EaseConvertToCommonEmoticonsHelper
convertToSystemEmoticons:((EMTextMessageBody *)messageBody).text];
latestMessageTitle = didReceiveText;
} break;
case EMMessageBodyTypeVoice:{
latestMessageTitle = NSEaseLocalizedString(@"message.voice1", @"[voice]");
} break;
case EMMessageBodyTypeLocation: {
latestMessageTitle = NSEaseLocalizedString(@"message.location1", @"[location]");
} break;
case EMMessageBodyTypeVideo: {
latestMessageTitle = NSEaseLocalizedString(@"message.video1", @"
[video]");
} break;
case EMMessageBodyTypeFile: {
latestMessageTitle = NSEaseLocalizedString(@"message.file1", @"[file]");
} break;
default: {
} break;
}
}
return latestMessageTitle;
}

//获取最后一条消息时间
- (NSString *)_latestMessageTimeForConversationModel:(id<IConversationModel>)conversationModel
{
NSString *latestMessageTime = @"";
EMMessage *lastMessage = [conversationModel.conversation latestMessage];;
if (lastMessage) {
double timeInterval = lastMessage.timestamp ;
if(timeInterval > 140000000000) {
timeInterval = timeInterval / 1000;
}
NSDateFormatter* formatter = [[NSDateFormatter alloc]init];
[formatter setDateFormat:@"YYYY-MM-dd"];
latestMessageTime = [formatter stringFromDate:[NSDate dateWithTimeIntervalSince1970:timeInterval]];
}
return latestMessageTime;
}[/video]




至于头像名字则要我们使用我没发消息的扩展字段,
这里我们可以获取会话中最后一条来自对方的消息,然后取出扩展字段赋值就好,(ps:有一种情况我刚刚和一个人说话会话中没有来自对方的最后一条消息,这个时候我们要用我们本地自己赋值这个会话的头像和名字)

三、总结

恩,这是这个杂记的第一次写的东西,写了写基本的用法,简单的聊天功能,写的也比较乱,,我会慢慢整理修改的。
 
作者简介:我是windKing,一个iOS开发的小白希望能有一样的人和我一起成长。看的过程中有不明白的地方欢迎联系我qq1662628982。 收起阅读 »

环信通过工信部“可信云”企业级SaaS认证

 面对企业级SaaS市场飞速发展、产品和服务质量参差不齐的现状,中国信息通信研究院(工信部电信研究院)推出了“可信云”认证服务来规范企业级SaaS市场。9月10日,环信通过由数据中心联盟组织,中国信息通信研究院测试的面向云计算服务的“可信云”认证,环信成功晋升...
继续阅读 »
 面对企业级SaaS市场飞速发展、产品和服务质量参差不齐的现状,中国信息通信研究院(工信部电信研究院)推出了“可信云”认证服务来规范企业级SaaS市场。9月10日,环信通过由数据中心联盟组织,中国信息通信研究院测试的面向云计算服务的“可信云”认证,环信成功晋升为首批通过“可信云”认证的SaaS客服标杆企业。


14738216458704.png


环信移动客服通过“可信云”企业级SaaS认证
 

  • 环信可用性高达3个9+严苛数据安全标准



工信部“可信云”认证报告指出环信企业级SaaS服务在数据存储的持久性、数据可销毁性、数据可迁移性、数据私密性、数据知情权、服务可审查性、服务功能、服务可用性、服务资源调配能力、故障恢复能力、网络接入性能、服务计量准确性、服务变更终止条款、服务赔偿条款、用户约束条款、服务商免责条款、服务安全性、用户体验性能等指标均满足可信云服务认证要求。

其中,服务的可用性和数据的安全性是“可信云”的评测考量重点。环信移动客服服务通过测试可用性不低于99.9%,并同时保证每个请求服务器响应时间在1秒以内。

在安全性方面,环信更是遵循严苛的数据安全标准,例如:

  1、代码全面通过Sonar的安全检测;

  2、用户信息的存储和传输经过加密;

  3、数据以字节为单位不丢失(99.9999%);

  4、数据隔离保证不同用户之间的数据互不可见;

  5、在用户使用服务时,环信不存储用户密钥,除收集必要的运行指标数据外不访问用户的其它数据,并从制度上确保所有运维人员的规范操作等。

除此之外,环信完善的多级售后服务支持体系,和快速故障恢复能力,确保用户体验达到极致。 

  • “可信云”成功写入国际标准,为用户选型保驾护航



近日,ITU(国际电信联盟)在其网站上正式发布“云计算框架及高层需求ed2版本”,标志着由中国信息通信研究院(工信部电信研究院)牵头的三个提案:可信云服务定义、需求和场景成功写入国际标准。自2013年开始的可信云服务认证经过两年多的发展,已正式进入3.0体系建设阶段,增加可信云金牌运维专项评估以及可信云安全评估,形成了IaaS/PaaS和企业级SaaS两套评估标准,基本实现了对业界主流云服务类型的全覆盖。

如今,可信云服务认证的标准正变得日益严苛,仅可信云服务认证测评内容就包括云主机服务、对象存储服务、在线应用服务等11部分、共16项指标的测评,涵盖了云服务商需要向用户承诺或告知(基于服务SLA)的90%的问题。可信云认证的平均通过率并不高,其中第六批可信云认证通过率仅为38%。环信移动客服通过本次“可信云”认证也和环信不断在产品技术和服务上精益求精不断投入海量资源密不可分。

可信云服务认证体系的日臻完善,一方面意味着云计算产业发展的逐渐成熟;另一方面也意味着将有越来越多的像环信这样的云服务商将进一步加强对云计算安全性和服务可用性方面的投入。对于用户而言安全和可用性无疑是决定云计算选型的两大最重要考量指标,而可信云服务认证则更像一个标尺,让用户选型从此不再有安全和可用性方面的后顾之忧。
 

  • 关于环信:



环信移动客服——全媒体智能云客服倡领者,于2016年荣膺“Gartner 2016 Cool Vendor”。环信支持全媒体接入,包括网页在线客服、社交媒体客服(微博、微信)、APP内置客服和呼叫中心等多种渠道均可一键接入。基于环信业界领先的IM长连接技术保证消息必达,并通过智能客服机器人技术降低人工客服工作量。同时,基于人工智能和大数据挖掘的客户旅程透析产品"环信客户声音"能够帮助企业优化运营,提高跨渠道客服体验。

截至2016年上半年,环信移动客服共服务了29437家企业用户,现已覆盖包括电商、O2O、互联网金融、在线教育、在线旅游、移动医疗、智能硬件、游戏等领域的Top10客户,典型用户包括国美在线、58到家、楚楚街、海尔、神州专车、新东方、链家、泰康在线、号码百事通等众多标杆企业。根据易观发布的《中国SaaS客服市场专题研究报告》显示,环信移动客服在SaaS移动端客服用户覆盖占比高达77.4%,稳居行业第一。 收起阅读 »

中秋节快乐

“中秋节快乐”短短5个字凝聚了环信对小伙伴们最深沉的祝福与爱!!!  
“中秋节快乐”短短5个字凝聚了环信对小伙伴们最深沉的祝福与爱!!!



46期_社区活动.jpg


 

猿生态十城巡回沙龙丨武汉站

最前沿的AI科技,最尖端的测试技术,最火爆的开源项目 猿生态携手微软、Testin、环信 武汉,我们来了,无猿不生态 我们联合猿生态城市社群邀请数十位技术大咖 和你畅聊热门技术探讨行业发展趋势    活动时间地点: 9月24日  洪山区光谷资本大厦一...
继续阅读 »

640.jpg


最前沿的AI科技,最尖端的测试技术,最火爆的开源项目

猿生态携手微软、Testin、环信

武汉,我们来了,无猿不生态

我们联合猿生态城市社群邀请数十位技术大咖

和你畅聊热门技术探讨行业发展趋势 
 
活动时间地点:


9月24日  洪山区光谷资本大厦一楼光谷创业咖啡


活动议程


13: 00 – 13: 30 活动签到

13: 30 – 16: 30 技术分享 + 实战演示

16: 30 – 17: 00 抽奖 + 自由交流


讲师介绍

6401.jpg



6140.jpg



64401.jpg


Tips


✦自带电脑:在实战演示环节,讲师们将带领大家现场写代码、做demo,建议带上电脑。
✦ AA餐会:活动结束后,与讲师和现场小伙伴们共进晚餐,交流、交友~~活动现场报名喔;-)




6440.jpg


本场活动将通过云犀直播

在斗鱼、战旗、爱奇艺、熊猫TV等

多个平台全程同步直播

扫描下方二维码即可收看

6400.jpg



0640.jpg


✦✦✦✦✦✦✦✦




更多精彩即将上线



6402.jpg


点击报名 收起阅读 »

ios V2.3.2 Android V2.2.7 release ,增加移动端与web消息同步

Android V2.3.2更新日志 新功能/改进: web端和手机端同时登陆时可以同步接收自己在另外一端发送的消息增加被kill后自启动的概率,需要在mianifests文件中加上以下声明  <service android:na...
继续阅读 »

81Q58PICRsN_1024.jpg


Android V2.3.2更新日志


新功能/改进:

  1. web端和手机端同时登陆时可以同步接收自己在另外一端发送的消息
  2. 增加被kill后自启动的概率,需要在mianifests文件中加上以下声明 

<service
android:name="com.easemob.chat.EMJobService"
android:permission="android.permission.BIND_JOB_SERVICE"
android:exported="true"
/>

Bug Fix:
  1. 修复没有启动守护进程的bug


iOS​ V2.2.7更新日志


SDK细节调整:

  1. SDK中检查附件大小,附件大小不恰当时返回错误
  2. 群组批量加人时合并了加人请求,避免耗时随着人数增加
  3. 改善会话加载消息时的性能


版本历史:Android sdk更新日志  ios sdk更新日志
下载地址:环信SDK下载

 
使用过程中有遇到任何问题、反馈建议欢迎直接评论留言,我们将第一时间回复! 收起阅读 »

环信SDK集成日记-自定义消息工具条和表情键盘

今天看了下环信SDK聊天模块下封装的自定义消息工具条以及表情键盘,了解了下iOS自带表情的转码。顺[b]带记录下集成环信SDK遇到的坑。[/b]一、DXMessageToolBar工具条的封装 DXMessageToolBar是加在聊天页面底部的消息工具条,...
继续阅读 »
今天看了下环信SDK聊天模块下封装的自定义消息工具条以及表情键盘,了解了下iOS自带表情的转码。顺[b]带记录下集成环信SDK遇到的坑。[/b]
一、DXMessageToolBar工具条的封装

DXMessageToolBar是加在聊天页面底部的消息工具条,其负责控制四个控件:

1、录音视图DXRecordView
2、输入文本框XHMessageTextView
3、表情键盘DXFaceView
4、更多视图DXChatBarMoreView

DXMessageToolBar不仅要控制这四个UIView之间的切换,负责正确改变视图的位置与大小,还要将一系列的动作事件通过委托传到聊天页面控制器ChatViewController中去处理。

DXRecordView是录制音频的时候展示的视图,通过不断检测音量大小来展示不同的UIImage从而达到动态效果。

XHMessageTextView是继承自UITextView的,其中实现了自定义placeHolder的颜色,由于修改placeHolder是私有方法,因此这里换了种方式实现,那就是通过重写drawRect:方法,在其中将placeHolder绘制到UITextView上面。

DXFaceView表情键盘,它上面加了FacialView。FacialView上面放置了一些列的UIButton,UIButton的标题设置为iOS自带的表情。

DXChatBarMoreView更多视图,上面添加从相册选择照片,调用相机拍摄照片等按钮。

二、表情键盘的封装

表情键盘上放置了一些iOS自带的表情,而且在最后加了一个发送按钮和一个删除按钮,如图:


141604-f58b918d4fb3aad0.jpg


点击对应的表情,将表情字符串添加到文本框中。点击删除按钮通过委托调用了DXMessageToolBar的方法,其实现方式:
- (void)selectedFacialView:(NSString *)str isDelete:(BOOL)isDelete
{
NSString *chatText = self.inputTextView.text;

if (!isDelete && str.length > 0) {
self.inputTextView.text = [NSString stringWithFormat:@"%@%@",chatText,str];
}
else {
if (chatText.length >= 2)
{
NSString *subStr = [chatText substringFromIndex:chatText.length-2];
if ([(DXFaceView *)self.faceView stringIsFace:subStr]) {
self.inputTextView.text = [chatText substringToIndex:chatText.length-2];
[self textViewDidChange:self.inputTextView];
return;
}
}

if (chatText.length > 0) {
self.inputTextView.text = [chatText substringToIndex:chatText.length-1];
}
}

[self textViewDidChange:self.inputTextView];
}
由此可见一个表情字符串占两个字符的长度,所以要在点击删除按钮之后判断文本框当前字符串的末尾处是否是表情。

三、iOS自带表情的转码

每个表情都有它自己的编码,通过编码可以拿到它对应的表情字符串:
#import <Foundation/Foundation.h>

#define MAKE_Q(x) @#x
#define MAKE_EM(x,y) MAKE_Q(x##y)

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunicode"
#define MAKE_EMOJI(x) MAKE_EM(\U000,x)
#pragma clang diagnostic pop

#define EMOJI_METHOD(x,y) + (NSString *)x { return MAKE_EMOJI(y); }
#define EMOJI_HMETHOD(x) + (NSString *)x;
#define EMOJI_CODE_TO_SYMBOL(x) ((((0x808080F0 | (x & 0x3F000) >> 4) | (x & 0xFC0) << 10) | (x & 0x1C0000) << 18) | (x & 0x3F) << 24);

/*!
@class
@brief iOS内置表情编码处理类
*/
@interface Emoji : NSObject

/*!
@method
@brief unicode编码转换为iOS内置表情字符串
@discussion
@param code iOS内置表情对应的unicode编码值
@result iOS内置表情字符串
*/
+ (NSString *)emojiWithCode:(int)code;

/*!
@method
@brief 获取所有iOS内置表情
@discussion
@result iOS表情字符串数组
*/
+ (NSArray *)allEmoji;
@end

#import "Emoji.h"
#import "EmojiEmoticons.h"

@implementation Emoji
+ (NSString *)emojiWithCode:(int)code {
int sym = EMOJI_CODE_TO_SYMBOL(code);
return [[NSString alloc] initWithBytes:&sym length:sizeof(sym) encoding:NSUTF8StringEncoding];
}
+ (NSArray *)allEmoji {
NSMutableArray *array = [NSMutableArray new];
[array addObjectsFromArray:[EmojiEmoticons allEmoticons]];
return array;
}
@end
这里拿表情编码做一系列运算,然后传入[[NSString alloc] initWithBytes:&sym length:sizeof(sym) encoding:NSUTF8StringEncoding];生成对应的字符串的运算方法暂时没找到解释,没搞清楚运算原理。若哪位大神看到出处,敬请告知!

四、集成环信遇到的坑

1、显示用户头像和昵称

环信默认不显示头像和昵称,如果要显示头像,需要自己实现。这里要实现显示头像和昵称,需要发消息的时候在ext这个扩展字段中加入和Android约定好的字段,在接收到消息的时候将这些字段保存到本地数据库中。

这里特别需要注意的一点是:在读取本地数据库的时候,是通过chatter来匹配的话,记得环信的chatter在保存的时候都做了小写处理。所以,在数据库中匹配的时候,最好是大小写不敏感的匹配方式:
NSString *sql = [NSString stringWithFormat:@"select * from %@ 
where upper(chatter)=upper('%@')",_tbName,chatter];
2、自定义推送内容

环信默认推送内容是“你有一条新的消息”,如果要自定义内容,需要在在ext扩展字段中添加以下字段:
@"em_apns_ext":@{                           
@"em_push_title":文本内容
},
3、发送用户信息给客服

如果要在用户跟客服聊天时能在客服后台看到当前用户的一些基本信息,需要在ext扩展字段中添加以下字段(比如需要用户手机号码和名字):
@"weichat":@{
@"visitor":@{
@"phone":userPhone,
@"userNickname":userNickName,
}
},
4、发送用户轨迹给客服

如果要在用户点击客服咨询时,比如是点击职位下面的咨询,想将当期职位的信息发给客服,那就是环信的发送用户轨迹信息。这个时候在进入聊天页面时需要单独处理,自动发送一个自己封装的信息:
-(void)sendJobInfo:(YLJob *)aJob
{
NSMutableDictionary *ext = [NSMutableDictionary dictionary];
NSDictionary *msgtype = @{@"track":@{@"title":aJob.title?:@"",
@"item_url":aJob.link?:@""}};
[ext setObject:msgtype forKey:@"msgtype"];

EMChatText *text = [[EMChatText alloc] initWithText:[NSString stringWithFormat:@"我想咨询 %@",aJob.title?:@""]];
EMTextMessageBody *body = [[EMTextMessageBody alloc] initWithChatObject:text];
EMMessage *message = [[EMMessage alloc] initWithReceiver:_chatter bodies:[NSArray arrayWithObject:body]];
message.ext = ext;
[[EaseMob sharedInstance].chatManager asyncSendMessage:message progress:nil];

}
这里只是简单的使用了环信已经封装好的文本消息的接口,并且在聊天页面的展示方式也将是纯文本的方式Cell的展现方式。如果要以其他样式的Cell展示,需要自定义Cell,并且在展示的时候根据ext中的字段来判断是否是这种自定义消息。

其他具体可用字段名称,请登录环信官网查看官方文档。

参考:
以下是Emoji的表情编码对照表:
Emoji Unicode Tables
 
作者:Code_Ninja 收起阅读 »

【环信集成笔记】进阶篇-集成环信 ios 2.0,看这篇就够了

一、准备工作   1、注册环信帐号注册一个环信账号之后,我们用注册的帐号登陆。然后创建一个应用,会得到一个对应的AppKey,这个AppKey在初始化环信SDK的时候需要用到。(这个去环信官网自己弄环信)   2、制作推送证书如果需要做离线推送的功能,需要制作...
继续阅读 »
一、准备工作
 
1、注册环信帐号注册一个环信账号之后,我们用注册的帐号登陆。然后创建一个应用,会得到一个对应的AppKey,这个AppKey在初始化环信SDK的时候需要用到。(这个去环信官网自己弄环信)
 
2、制作推送证书如果需要做离线推送的功能,需要制作一个推送证书。如果只是需要实现单聊、群聊等功能,可以跳过此步骤。个人建议刚开始接触环信的开发者可以忽略此步骤。制作证书
 
3、下载环信sdk.下的是2.0

2267403-9029e76fb6048493.jpg



二、集成环信的SDK

1、把环信SDK添加到工程中

从环信官网下载下来的是一个压缩包,解压之后,把我们需要的环信SDK,即EaseMobSDK这个文件夹,整个的拖入到我们的工程中。如下图:

2267403-2b2574629722ab00.jpg


在lib文件夹下面有两个静态库,只需要用到一个,根据你的需求选择。
libEaseMobClientSDKLite.a不包含实时语音功能,libEaseMobClientSDK.a包含所有功能。
2、添加对应的依赖库

向Build Phases → Link Binary With Libraries 中添加依赖库
  1. MobileCoreServices.framework
  2. CFNetwork.frame
  3. libsqlite3.tbd
  4. libstdc++.6.0.9.tbd
  5. libz.tbd
  6. libiconv.tbd
  7. libresolv.tbd
  8. libxml2.tbd

温馨提示:注意不要添加错了,也不能添加少了,添加完毕之后,不要着急,先编译一下。编译成功,则说明没有问题;如果编译报错,则仔细对照上面例举的静态库进行添加,直到编译成功,再进行下一步。
 
3、配置工程
 
3.1 不包含语音静态库的配置方法
(1) 删掉libEaseMobClientSDK.a,保留libEaseMobClientSDKLite.a;
(2) 在Build Settings -> Other Linker Flags 添加”fore_load”和”libEaseMobClientSDKLite.a”的相对路径。
如下图所示:

2267403-18e5a986d5358977.jpg


3.2 包含语音静态库的配置方法

(1) 删掉libEaseMobClientSDKLite.a,保留libEaseMobClientSDK.a;

(2) 在Build Settings -> Other Linker Flags 添加”-ObjC”。

如下图所示:

2267403-9aa919e2913c9de1.jpg


4、验证SDK是否添加成功
在AppDelegate.m文件中添加环信SDK初始化的方法,记得添加头文件”EaseMob.h”。下面提供了我用的测试AppKey,你可以替换成你自己申请的AppKey。编译成功,则说明你已经正确集成了环信的SDK了。
 
如果编译有问题,可能存在的原因:
(1) 静态库没有添加正确;
(2) 静态库工程配置不正确
#define APPKEY      @"1101#testrongyun"     //环信APPKEY
#define APNSCert @"TestHuanXin" //环信推送证书名称
#import "AppDelegate.h"
#import "EaseMob.h"
@interface AppDelegate ()
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//初始化环信SDK
[[EaseMob sharedInstance] registerSDKWithAppKey:APPKEY apnsCertName:APNSCert];
return YES;
}






三、添加UI文件到你的工程

集成环信2.0UI文件,需要添加的文件,如下图所示:

2267403-8f645439e0dface8.jpg


添加完成之后,如下图所示:

2267403-b2667ca172b29da9.jpg


四、设置pch文件的路径
 
文件添加成功之后,编译会报错,因为你没有添加pch文件。自己手动添加pch文件(EaseUI-Prefix.pch),设置一下pch文件的加载路径即可。如下图所示:

2267403-da9cd01f79acf31a.jpg


在EaseUI-Prefix.pch中添加头文件”EaseUI.h”,如下图:

2267403-0280af41aced006c.jpg


最后,编译一下,编译成功则说明添加集成UI文件成功。
 
五,搭建基本框架
 
1、新建三个UIViewController
 
新建三个ViewController,继承UIViewController,分别命名为:FirstViewController,SecondViewController,ThirdViewController。如下图所示


2267403-ad785fff16328185.jpg


2、添加登陆方法

在AppDelegate.m中添加如下代码:
#define APPKEY      @"1101#testrongyun"     //环信APPKEY
#define APNSCert @"TestHuanXin" //环信推送证书名称
#import "AppDelegate.h"
#import "EaseMob.h"
#import "FirstViewController.h"
#import "SecondViewController.h"
#import "ThirdViewController.h"
@interface AppDelegate ()
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
//初始化环信SDK
[[EaseMob sharedInstance] registerSDKWithAppKey:APPKEY apnsCertName:APNSCert];
//异步登陆的方法(这里的账号密码要去环信后台自己注册)
[[EaseMob sharedInstance].chatManager asyncLoginWithUsername:@"账号" password:@"密码" completion:^(NSDictionary *loginInfo, EMError *error) {
if (!error && loginInfo) {
NSLog(@"登陆成功");
[self setUpNav];
}
} onQueue:nil];
return YES;
}
- (void)setUpNav
{
FirstViewController *firstVC = [[FirstViewController alloc] init];
SecondViewController *secondVC = [[SecondViewController alloc] init];
ThirdViewController *thirdVC = [[ThirdViewController alloc] init];
firstVC.title = @"会话列表";
secondVC.title = @"通讯录";
thirdVC.title = @"设置";
UITabBarController *tabBar = [[UITabBarController alloc] init];
tabBar.viewControllers = @[[[UINavigationController alloc] initWithRootViewController:firstVC],
[[UINavigationController alloc] initWithRootViewController:secondVC],
[[UINavigationController alloc] initWithRootViewController:thirdVC]];
self.window.rootViewController = tabBar;
self.window.backgroundColor = [UIColor whiteColor];
}
@end
编译一下,看下效果。

2267403-687ab41414eac944.png


六、添加与聊天有关的文件

1、添加GifImage文件2、添加chat文件

2267403-7543120b78599164.jpg



2267403-fc7cc6d2aac8ddb8.jpg


添加完成之后,编译一下,把报错的地方全部注释掉,有很多地方需要注释掉,这些地方是因为有些我们不需要的文件没有添加进来。(自己注释比较麻烦)
 
注释好的GifImage和chat文件,下载后无需注释无关代码,可直接使用注释好的文件,
 
七、实现单聊在SecondViewController.m中添加如下代码:
#import "SecondViewController.h"#import "ChatViewController.h"@interface SecondViewController (){
NSArray *arrSystem;
NSArray *arrFriends;
}
@property (retain, nonatomic) UITableView *tableView;
@end
@implementation SecondViewController
- (void)viewDidLoad {
[super viewDidLoad];
arrSystem = @[@"申请与通知",@"群聊",@"聊天室"];
_tableView = [[UITableView alloc] initWithFrame:self.view.frame];
_tableView.delegate = self;
_tableView.dataSource = self;
[self.view addSubview:_tableView];
//获取好友列表
[[EaseMob sharedInstance].chatManager asyncFetchBuddyListWithCompletion:^(NSArray *buddyList, EMError *error) {
if (!error) {
NSLog(@"获取成功 -- %@",buddyList);
arrFriends = [NSArray arrayWithArray:buddyList];
[_tableView reloadData];
}
} onQueue:nil];
}
#pragma mark - UITableViewDelegate & UITableViewDataSource
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 2;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
if (section == 0) {
return arrSystem.count;
} else {
return arrFriends.count;
}
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *identifier = @"CELL";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];
}
switch (indexPath.section) {
case 0:
{
cell.textLabel.text = [arrSystem objectAtIndex:indexPath.row];
cell.imageView.image = [UIImage imageNamed:@"groupPublicHeader"];
break;
}
case 1:
{
EMBuddy *eMBuddy = [arrFriends objectAtIndex:indexPath.row];
cell.textLabel.text = eMBuddy.username;
cell.imageView.image = [UIImage imageNamed:@"chatListCellHead"];
break;
}
default:
break;
}
return cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
EMBuddy *buddy = [arrFriends objectAtIndex:indexPath.row];
ChatViewController *chatVC = [[ChatViewController alloc] initWithConversationChatter:buddy.username conversationType:eConversationTypeChat];
chatVC.title = buddy.username; //好友的名字
chatVC.hidesBottomBarWhenPushed = YES;
[self.navigationController pushViewController:chatVC animated:YES];
}
编译,效果

2267403-b19aab1a08432dfb.png



2267403-f96603327daee041.png


真机运行一下,可能会报错,


2267403-683387308562a7d6.jpg


解决方案:

2267403-4a01a8288cd4c024.jpg


把这个值设置成no

文章作者:环信热心用户樊呵呵 收起阅读 »

环信与微博达成合作,作为唯一合作伙伴为微博用户提供全媒体智能SaaS客服

近日,新浪微博和环信达成合作协议,环信客服产品作为合作伙伴,将为微博数百万认证帐号提供以移动端为核心的全媒体智能SaaS客服产品,帮助其提高客服效率和多端客服接入的用户体验。相比传统客服软件,SaaS客服具有极简部署、按需付费、弹性扩容、低价高质等天然优势。 ...
继续阅读 »

31hh-fxvqcts9735195.png


近日,新浪微博和环信达成合作协议,环信客服产品作为合作伙伴,将为微博数百万认证帐号提供以移动端为核心的全媒体智能SaaS客服产品,帮助其提高客服效率和多端客服接入的用户体验。相比传统客服软件,SaaS客服具有极简部署、按需付费、弹性扩容、低价高质等天然优势。

据DCCI数据,微博已成为用户生活中一个非常重要的社交媒体,日均使用时长在20分钟以上的用户占91%,仅次于即时通讯工具。同时,中国及全球的社交网络营销整体均有待挖掘,广告价值不断凸显,无论是Facebook、Twitter,还是微博和微信,社交广告的发展仍具有较大空间。最新财报显示,微博的大客户和中小企业客户的广告营收的强劲增长,彰显了微博对多样化客户群的巨大平台价值。此次和环信移动客服的强强联手,将进一步完善微博的社会化营销及服务体系。

传统客服服务面临诸多挑战

作为微博商业化进程的中坚力量,微博数百万认证帐号一直存在着提高曝光机会、加强变现能力等几大刚需,而提高客服效率能有效帮助这些帐号提高粉丝活跃度、增加曝光机会,从而具备更强的变现能力。

在改善客服体验方面,传统模式有许多需要提升的地方:

1,对于普通蓝V和橙V用户,客服咨询可能来自微博私信、评论以及@,没有统一渠道来收集和处理信息,咨询量稍微大一点就容易导致客服人员顾此失彼,回复不及时用户体验差等问题。

2,对于动辄十万、百万甚至千万级粉丝的超级蓝V和橙V用户,每日面对海量的信息咨询必然需要借助粉服开发者模式集成第三方专业客服工具,但是集成有门槛,需要技术研发团队支持解决集成问题。

3,面对日益增长的粉丝,如何用有限的客服人员服务好不断增长的海量客服请求,需要借助智能客服机器人技术。

4,部分用户同时多人维护多个蓝V和橙V账号,来回切换账号容易导致信息丢失且工作效率低。

相当一部分帐号急需一款集成简单、支持多渠道接入、支持智能客服机器人、支持多客服协同、能排班分组转接、能KPI绩效考核以及更有效率的专业客服工具,主打全媒体智能技术的环信移动客服应运而生。

为此,环信与微博正式达成合作,为微博商业生态提供全媒体智能客服系统,提升微博的服务效率。微博相关客户不需要额外技术支持集成开发,仅需注册绑定一个微博账户一切都可轻松搞定,所有来自微博私信、评论以及@的消息都能够统一平台一键接入,一键回复。

GArO-fxvukhx4701440.png


体验环信全媒体智能客服从绑定一个账号开始

环信为微博用户提供一站式的智能客服体验

1,支持微博@、评论、私信信息,均可一键接入,一键回复。同时,不同渠道的用户和内容均可以做标记、分类和整理。

2, 7×24小时环信智能客服机器人应答,有效缓解前期各类标准化重复性咨询问题。

3,支持多客服协同工作,支持多技能组,支持自定义会话分配策略。你可以多人支持一个微博客服,可以一人管理多个微博客服,也可多人同时管理多个微博客服。

3Arm-fxvukhx4701489.png


环信移动客服更多功能展示
 
不断开放壮大的微博商业生态

经过两年的发展,微博商业生态规模日益强大,商业生态也一直秉承以下三原则:1,加强广告自助投放能力与精细数据互换能力,构建能力自助化。2,提升微博开放能力,构建与加强微博内商业关系,辐射至微博外。3,接入更多第三方服务,以商业服务+基础服务共筑微博开放商业平台生态。

微博商业生态相关负责人表示:“此次和环信的合作代表着微博客服用户体验的一个全新的提升,未来微博商业开放平台将继续保持高度开放持续为微博与第三方创造共赢。”

即刻体验微博客服请点击:http://weibo.kefu.easemob.com/mo/login 收起阅读 »

环信通过工信部“可信云”企业级SaaS认证

【环信通过工信部“可信云”企业级SaaS认证】环信通过由数据中心联盟组织,工信部电信研究院测试评估的面向云计算服务的“可信云”评估认证。环信企业级SaaS服务在数据存储的持久性、数据可销毁性、数据可迁移性、数据私密性、数据知情权、服务可审查性、服务功能、服务可...
继续阅读 »


ea790d9dgw1f7qsmxv5g4j20qo0zkqco.jpg


【环信通过工信部“可信云”企业级SaaS认证】环信通过由数据中心联盟组织,工信部电信研究院测试评估的面向云计算服务的“可信云”评估认证。环信企业级SaaS服务在数据存储的持久性、数据可销毁性、数据可迁移性、数据私密性、数据知情权、服务可审查性、服务功能、服务可用性、服务资源调配能力、故障恢复能力、网络接入性能、服务计量准确性、服务变更终止条款、服务赔偿条款、用户约束条款、服务商免责条款、服务安全性、用户体验性能等指标均满足可信云服务认证要求。 收起阅读 »

iOS 导入构建版本失败 上传求助 有人遇到过这样的问题吗

http://www.imgeek.org/article/825307914 因为项目只用到了环信的单聊,就借助大神的帖子集成的。一直都这样集成,以前上传的版本没事,昨天上传的时候发现问题了。问题是这样的 昨天上传App的时候,提交返回的结果一直和图片中的现...
继续阅读 »
http://www.imgeek.org/article/825307914 因为项目只用到了环信的单聊,就借助大神的帖子集成的。一直都这样集成,以前上传的版本没事,昨天上传的时候发现问题了。问题是这样的 昨天上传App的时候,提交返回的结果一直和图片中的现象一样。连着上传好多次都是这样,后来上传以前上架过的版本,结果连以前上架的版本导入构建版本都失败了。昨天纠结了一天,今天决定地毯式搜索哪里的问题,一个个导入的sdk,配合自己的代码打包上传测试。结果和自己的代码和集成的环信测试,打包出现这种情况了。然后就单独集成环信,自己一行代码不加,打包上传还是这种情况。。。。。。。。。。有遇到过的大神吗? 
 
这里是苹果给的回信内容
While processing your iOS app, 天使来了 1.1.1(10), errors occurred in the app thinning process, and your app couldn’t be thinned. If your app contains bitcode, bitcode processing may have failed. Because of these errors, this build of your app will not be able to be submitted for review or placed on the App Store. For information that may help resolve this issue, see Tech Note 2432.
 
target->build Settings里面的bitcode  我设置是NO的  因为项目里面也有极光推送 不设置NO的话  都没法编译 收起阅读 »

【环信集成笔记】进阶篇-关于环信EaseUI集成冲突问题以及解决办法

是不是在集成EaseUI的时候看到这个问题顿时就像砸了电脑。或者说你在百度之后,发现很多人出现这个问题,然后按照他们的思路去改来改去,改到最后还是没有成功;然后不知所措的移动着鼠标,一次又一次的运行,等着奇迹的出现? 或者又说 ,你在试了他们的方法之后然后C...
继续阅读 »

1677578-57c07efa4e1ded40.png


是不是在集成EaseUI的时候看到这个问题顿时就像砸了电脑。或者说你在百度之后,发现很多人出现这个问题,然后按照他们的思路去改来改去,改到最后还是没有成功;然后不知所措的移动着鼠标,一次又一次的运行,等着奇迹的出现?

或者又说 ,你在试了他们的方法之后然后Clean,rebuild,重启AndroidStudio之后,还是没用,还是这个错。

下面我就跟大家讲一下,怎么去解决这个错误

首先这个错误的原因是因为V4的包冲突,也就是说,如果你的主项目里面也有V4的包,EaseUI里面也有V4的包,那么久删除主项目里面的V4的包,这个是不会报错的,尽管删除,删除之后,再次运行项目,试试看,如果还是报这个错的话,那就把EaseUi里面的V4的包删除,然后


1677578-48790976631f9919.png


必须选择到EaseUI,然后选到Dependencies,再点击加号里面的Library dependency,进去之后


1677578-e32191fbb5c8407c.png


选择V4包OK就可以了,添加之后,再次运行项目,如果还是不行的话,别着急,继续往下看

1677578-b8bc8862272e6530.png


在app的配置文件里面的Android节点下加入图中的代码

dexOptions {
javaMaxHeapSize"4g"
}
aaptOptions.cruncherEnabled=false
aaptOptions.useNewCruncher=false


不管有没有用,你加入进去,然后再次运行项目,如果在不行的话,我想说你的运气真的好差。
 
 
在这里,很感谢某一个程序员的分享,这里还提供一个解决办法,就是删除easeui里面的谷歌服务的jar包,然后rebuild项目


运气差那就Clean,rebuild项目,或者更换EaseUI
 

 

如果还有问题的话 请加入 环信互帮互助-非官方 340452063  收起阅读 »

关于即时通讯服务器集成——文件下载的说明(错误代码404)

在环信官网上,对于文件下载,仅仅只给了一个示例URL,并不知道请求接口是什么方法,后来在github上看见了官方demo,上边写的为POST方法,当时也就没多想,相信官方给的,一个劲的检查自己的代码,完全没错,拼的URL在浏览器能够执行,所以开始怀疑是方法的问...
继续阅读 »
在环信官网上,对于文件下载,仅仅只给了一个示例URL,并不知道请求接口是什么方法,后来在github上看见了官方demo,上边写的为POST方法,当时也就没多想,相信官方给的,一个劲的检查自己的代码,完全没错,拼的URL在浏览器能够执行,所以开始怀疑是方法的问题,果断改了GET方法,其实明眼人一看就知道,从服务器来资源,用的是GET方法,但这个官方给的当然要信啊,这样就会误导一些刚刚开发的同仁。
所以,我想请官方在官网文件下载处,添加一下说明,另外修改github上的注释!

hx.png



hx2.png


  收起阅读 »

【推荐】两大APP与云账户红包SDK集成详情及Demon分享

云账户红包SDK3.0已经发布一段时间了! 就在本月,两家老牌重量级APP完成了云账户红包SDK的集成,经过双方严格的联合测试,现在正是发版了!他们就是“工作圈”&“超信”(IOS、安卓市场都可以下载哦,有兴趣的朋友们可以去市场里下载体验一下,绝对n...
继续阅读 »
云账户红包SDK3.0已经发布一段时间了!
就在本月,两家老牌重量级APP完成了云账户红包SDK的集成,经过双方严格的联合测试,现在正是发版了!他们就是“工作圈”&“超信”(IOS、安卓市场都可以下载哦,有兴趣的朋友们可以去市场里下载体验一下,绝对nice!)
可能有朋友不太了解这两个百万级用户的产品,这里我给大家正是介绍一下:
工作圈:
g工作圈是用友旗下畅捷通公司开发的一款企业移动办公平台,融合了企业经营管理所需的各项专业服务,是基于工作场景应用集成:公告、审批、任务、工作报告、签到、文件柜、电话会议、企业通讯录、圈子信息交流等组成的企业互联网应用,帮助企业提高沟通协作效率、简化工作流程、降低管理成本。让管理更简单,工作更轻松!
 
超信:
超信是一款基于手机通讯录的短信增强工具,安装超信既可以完美的取代系统短信功能,开机即用,更加简单便捷的与手机通讯录中的联系人互相手法短信。如果双方都安装超信,就能通过手机网络(WiFi、3G、GPRS)与您铜须路中的联系人发送(需小豪少量网络流量)信息、图片、语音和位置等多媒体文件。
以下是云账户在两个产品中的截图:
工作圈&云账户:
超信&云账户:
除了工作圈和超信之外,已经成功集成云账户红包SDK并发版上线的比较有代表性的APP有:拉拉公园、INVITE、全景图片、蜗牛睡眠、捷库工作、领公报等,正在集成中的APP有上百家,其中还有几位神秘大咖在享受我们的云服务和私有化部署服务,这里暂时先保持下神秘!
我们的原则是,先上线、再PR,少吹牛,多干实事!
另外,云账户红包SDK已经满足完美集成在市场上主流的IM,客服SaaS提供商环信、容联云通讯、融云、leancloud、亲加的产品中,开发者如果用了以上IM或客服产品,可以更加快速安全的接入!
云账户红包SDK,更详细的信息各位开发者可以访问云账户官网:www.yunzhanghu.com去了解,官网上提供Demo下载,帮助开发者们更好地体验我们的产品,毕竟“先尝后买,价格公道,童叟无欺” 收起阅读 »

【环信集成笔记】进阶篇-老司机录了几个视频带你做即时通讯

先定一个小目标,看完这几部视频你就会做即时通讯了! 本次集成指南包含集成步骤PPT、视频、视频中所用到的demo源码,覆盖Android_EaseUI,Android_SDK,OC_EaseUI,OC_SDK,Swift_EaseUI,Swift_SDK,上车...
继续阅读 »

即时通讯集成指南.png


先定一个小目标,看完这几部视频你就会做即时通讯了!
本次集成指南包含集成步骤PPT、视频、视频中所用到的demo源码,覆盖Android_EaseUI,Android_SDK,OC_EaseUI,OC_SDK,Swift_EaseUI,Swift_SDK,上车吧!

视频查看地址:IMGeek视频专区

观看视频过程中遇到问题欢迎在视频下方发帖咨询! 收起阅读 »

环信移动客服5.0旗舰版发布 --中国SaaS客服走入人工智能时代!

 2016年,“大众创业万众创新”进入深水区,随着消费升级以及人口红利逐渐消失等推动中国企业级服务取得了爆发式增长。同时,对比中美市场的差距,国内企业级服务市场正逐渐被业界认为是继搜索、电商、社交以后的第四次系统性机会,将有机会诞生下一代“BAT”,而作为企业...
继续阅读 »
 2016年,“大众创业万众创新”进入深水区,随着消费升级以及人口红利逐渐消失等推动中国企业级服务取得了爆发式增长。同时,对比中美市场的差距,国内企业级服务市场正逐渐被业界认为是继搜索、电商、社交以后的第四次系统性机会,将有机会诞生下一代“BAT”,而作为企业级服务的核心赛道之一的“SaaS客服”更是一座高达千亿规模的金矿。近日,荣膺Gartner 2016 Cool Vendor的企业级服务明星公司环信正式发布环信移动客服5.0旗舰版,包括客户声音、人机协作以及智能质检三大基于人工智能技术的增值服务功能,以及多达二十余项大的升级和更新,预示着中国SaaS客服正式走入人工智能时代。

201609061141301695.png


环信移动客服5.0旗舰版正式发布

环信认为:“以移动端为核心的全媒体接入,客户声音帮助企业实现跨媒体、跨渠道、跨部门的客户服务体验,以及智能客服机器人将成为SaaS客服软件的三大核心驱动力。”客户中心经过多年的发展,从单一的语音服务渠道进化成为多介质的全媒体服务渠道,并最终将发展成整合传播服务、营销、销售和产品用户体验为一体的互动中心。

一,基于人工智能及大数据挖掘,环信客户声音帮助企业识别和改善客户旅程的各个阶段。

全媒体客服的最佳体验不仅只是多渠道的接入和各个接入渠道之间的数据打通,更重要的是用户跨媒体、跨渠道、跨部门的体验和跟踪,在海量的数据中发现问题。而要做到这一点,企业首先需要理解客户到底体验到了什么。今天,全球来看,越来越多的企业正在通过构建一个有效的客户声音系统,来透析客户对企业产品和服务的准确体验,帮助企业识别和改善客户旅程的各个阶段。对企业而言,倾听客户声音的能力决定了他们在客户体验这个领域上的竞争力。
环信客户声音运用自然语言解析,人工神经网络深度学习等人工智能技术,对来自多种渠道的非结构化数据源进行客服业务的特征提取,主题聚类解析,情感分析建模。从而帮助企业挖掘和分析客户服务中的热点话题,发现服务运营问题,寻找畅销或问题产品,洞察销售机会。比如,在环信客户声音系统中,主题关键词热度越高,说明用户关注度就越高。关键词对应的情感越负面,说明用户的体验感就越差。企业可以优先解决用户最关心,体验感最差的产品和服务问题。环信客户声音系统可以帮助企业识别和改善客户旅程的各个阶段。


20160906100452241.jpg


 图1:主题及关键词热度分布,实时了解用户最关心的产品和服务。示例:上图显示了某电商主题关键词热度分布。四种颜色代表四个主题。主题和关键词百分比代表了该主题或关键词的用户讨论热度。


20160906100511112.jpg


图2:按关键词或情感度追踪问题并解决问题。示例:某电商按关键词或情感度追踪并解决物流快递问题。

二,智能客服机器人是第一生产力,无缝“人机协作”是复杂场景下最佳用户体验的客服模式。

随着全媒体客服的普及和广泛应用导致企业和消费者多点接触,同时用户体验得到了企业的重视,导致客服咨询量暴增,企业有限的客服人力资源与日益增加的客服请求之间的矛盾日益尖锐,如何用有限的客服资源服务不断增长的海量客服请求需要一个颠覆型的技术来解决。相比人工客服,智能客服机器人将提供极大的效率优势。Gartner报告指出智能客服机器人(VCA-virtual customer assistance)技术将在2017年成为客户服务行业的核心驱动力。
环信智能机器人采用自然语言处理技术和深度学习技术建立对话模型,使用海量数据对模型进行训练,并借助客服系统中访客和客服的实时反馈来增强学习,精准识别用户意图,帮助人工客服回答各种问题。相比基于关键词匹配和人工定义规则大量标注数据的传统问答技术,环信智能机器人无需人工标记和人工维护相似问法,就可以在会话过程中识别同一问题的多种不同问法。


20160906100617354.jpg


图3:启用人机协作模式后,会话页面会显示“推荐答案”窗口,自动获取访客的最新问题,并推荐三条答案。

在一些比较复杂和特殊的服务场景,比如高客单价的金融行业售前咨询,机器人客服不能完全理解客户的个性化咨询要求的时候,我们可以无缝进入人机协作模式。环信智能客服机器人基于大数据分析和机器学习技术,可以自动分析海量历史会话数据,建立智能应答模型,供客服在人机协作模式下使用,无需手工建立和维护庞大的知识库。在人机协作模式下,环信智能客服机器人向人工客服推荐备选答案,人工客服起到了保证答案质量充当专家客服的角色,这样既保证了客服的响应速度又提高了问题的回答准确性,同时极大降低了人工客服的工作量。

三,智能质检,准确率达到替代人工质检水平。

质量管理是客服中心运营管理的重要板块,而质检则是定义客服中心服务质量好坏的标准。客服中心的成本与收益平衡、投诉点的关注、KPI指标关注等等都在质检标准中体现。在客户需求多样化、运营管理精细化的今天,采用传统人工质检不仅效率低远不能完成海量的客服内容质检工作,而采用抽样方式也同样不能全局呈现真实的客服质量。


20160906100558739.jpg


图4:智能质检系统可以自动检查访客和客服的历史消息,如果发现异常,则在会话后提示“有问题”,并在质检详情页提示问题原因。

环信移动客服5.0旗舰版最新提供的自动智能质检功能,可以对全部客服会话进行实时或离线质检。智能质检是基于环信在线客服各个领域的海量用户对话,提取出数百个客服对话特征,并用这些特征训练得到的一个通用质检模型。智能质检功能允许系统自动检查访客和客服的历史消息,如果发现异常,则在会话后提示“有问题”,并在质检详情页提示问题原因。在智能质检的辅助下,质检员可以扩大筛选范围,覆盖更多会话,提高质检效率,获得更准确的质检结果。目前,环信智能质检的准确率达到替代人工质检水平。

同时,作为增值服务之一,环信全媒体接入的呼叫中心接入功能需要单独申请开通,环信移动客服5.0旗舰版已经实现了呼叫中心和现有渠道的打通升级。开通呼叫中心后,客服不仅可以接待来自手机APP、网页、微信公众号、微博、呼叫中心5个渠道的会话/来电。而且所有通话都会被录音,客服可以通过客服模式的历史会话查看通话记录,管理员可以通过管理员模式的历史会话查看所有客服的通话记录,并对访客进行回呼。

汇聚二十余项新特性的环信移动客服5.0旗舰版已经正式发布,定价4800元/每坐席/每年,未来将给电商、O2O、互联网教育、互联网金融等数十个重客服行业带来新的驱动力和增长点。

企业用户可以直接登录环信官网申请开通试用,体验全新的全媒体智能SaaS客服请点击:http://kefu.easemob.com/
 
环信移动客服5.0  环信移动客服v5.0_产品更新说明/产品功能列表/产品使用指南
  收起阅读 »

[品牌密码]品牌及产品运营那些事儿 主题讲座

时间: 09-10 14:00 ~ 09-10 17:30   09月09日 23:30 报名截止 地点:北京昌平区   活动简介:   这是红马会的第八期学习会,九月十日是教师节,也是涨姿势的好时节,这一次,红马会创意人联盟继续【品牌密码】系列分享...
继续阅读 »

41472788339781_party4.jpg



时间: 09-10 14:00 ~ 09-10 17:30   09月09日 23:30 报名截止
地点:北京昌平区
 
活动简介:
 
这是红马会的第八期学习会,九月十日是教师节,也是涨姿势的好时节,这一次,红马会创意人联盟继续【品牌密码】系列分享活动……
面对品牌运营、活动策划,千头万绪,从何下手……
一场活动大战在即,需要你的创意、你的策划、你的设计、你的执行、你的运营,可你……
品牌传播,希望借活动拉人气、吸粉,可实际却……
好的创意方案,一次次毁于执行,执行,执行,迷局,怎么破……
品牌运营和活动是资源的汇聚,捉襟见肘的资源,怎么聚……
为一个好的策划创意而加班熬夜、捉急萎靡……
为洞察目标消费者的痛点而发愁……
为梳理活动方案有效的传播途径苦恼无助……
作为一个品牌管理运营者、活动主办者、策划人、媒介、设计师、广告人,如有以上症状,可以确诊,是病,得治!
红马会创意人联盟第八期学习会,品牌密码:品牌及产品运营那些事儿 主题讲座
大地民谣音乐节,由北京工友之家、红马会创意人联盟、雅韵文化共同发起,自2014年在京郊的一片田野上发出第一声歌唱,作为一个公益发起,白手创立,情怀使然的独特音乐节,至今已成功举办数十场,走入北京、成都、福建、深圳、天津等多地,累计观众数万人。
这次我们将从八月在平谷刚举办完的大地民谣音乐节做为运营案例切入,深度展开分享,听几位项目主创从不同角度剖析品牌策划、活动运营、设计、执行,相信你能收获一些启发,一些行之有效的门道,一些干巴巴的干货、合作的激情碰撞。
这里有这样一群人:他们是品牌运营高手,国内知名NGO公益组织发起人、大地民谣发起人、同心复古市集创办人、策划高手、创意人、设计师、品牌实战砖家……在品牌运营的烧脑烧心道路上,你不是一个人,结识新友,互通共享,一起在这秋高气爽的季节里,我们很严肃活泼的探讨,优秀的品牌运营项目、活动策划项目应该是什么模样,如何避免品牌运营中一些尴尬问题等实战干货,现场特邀大地民谣主创、民谣歌者许多、孙恒带来民谣音乐弹唱的惊喜环节,涨着知识,歌声相伴,多美妙……

活动内容


【活动主题】品牌密码:品牌及产品运营那些事儿 主题讲座
【活动主办】红马会创意人联盟
【活动协办】墨加 / 六点一刻 / 亿蜂 / 帮推客 / 明德微健康•教育会馆 / 环信
【活动时间】2016年9月10日(周六)14:00-17:30
【活动地点】北京昌平区回龙观西大街118号龙冠置业大厦B座  明德微健康•教育会馆五层会议室(城铁13号线龙泽站旁)
【活动人数】场地有限 限50人 报完即止
【活动费用】50元/人  
【费用包含】  
1.本次学习会参与名额1名
2.加入红马会创意人联盟微信交流群名额1名
3.红马会创意人联盟精美纪念徽章1枚/学习会精美海报1张
4.观看活动现场大地民谣民谣歌者弹唱演出
5.优先获得下一期学习会参会资格
6.十月大地民谣音乐节的入场券2张



【报名咨询】手机/微信:18611629527 王茜 / QQ:287374682  
【报名截止】截止时间9月9日  

【活动流程】  


签到/礼品领取
主持人开场/介绍主题、嘉宾
自我介绍,相互认识
嘉宾分享
茶歇、提问互动
大地民谣弹唱会  
嘉宾分享
现场自由发言交流、提问  
集体合影、散会  
【场地鸣谢】明德微健康•教育会馆
 


【交通指引】  

地铁:13号线“龙泽地铁站”A口出,过天桥后,从“巡逻警务站”旁公园门口进入,往北穿行到回龙观西大街后往东走50米即到。  
公交:乘车至 “北郊农场桥南站”,往北行至回龙观西大街往东走300米即到,或在“北郊农场桥东站”下车,西行200米即到。  
驾车可导航“龙冠置业大厦B座”。
 
嘉宾简介

81472182546877_party8.jpg


孙恒  
现任北京工友之家总干事、新工人艺术团团长。
民谣歌者、社会工作者,生于陕西,祖籍河南。
1998年辞去中学音乐教师工作,带着一把吉他,只身一人靠卖唱和打短工为生,游吟祖国各地。
2002年在北京发起创办劳工NGO组织【北京工友之家】,陆续创办:新工人艺术团、同心实验学校、同心互惠商店、打工文化艺术博物馆、工人大学、同心农园。
曾荣获“第四届全国十大务工青年”、“北京市首都创业青年贡献奖金奖”、“ 中国青年群英会杰出进城务工青年代表”、“《南风窗》2011公共利益年度人物”等荣誉。
分享主题《大地民谣与同心桃的运营经验分享》
1、音乐如何参与推动社会进步?
2、一颗爱心桃是如何参与支持城乡互助的?
 


01472182579616_party0.jpg


章鱼Peter
陈列师,自由化妆师,2013年10月流浪到北京宋庄灵语艺术空间,并结识国家非物质文化遗产花丝镶嵌继承人,杨氏,推广运营,兼职平面模特.期间撰写《新狂人日记》《鱼格博》自传,2014年策划拍摄灵语空间英文纪录片【美梦成真】个人喜欢收藏民间手工艺,发现传统手工艺逐年流失,2016年加入工友之家并筹备【同心复古文创市集】筹划 寻找—【即将消失的手工艺人】
分享主题《寻找即将消失的民间艺人》
1、中国民间手工艺生存现状
2、民俗文化艺术的传承
3、跨界合作蕴藏的商机  
 


71472182593993_party7.jpg


宝四 
北京红马景程品牌管理顾问有限公司 CEO
中国品牌整合设计专家/设计师
北京搜药集团高级品牌顾问
红马会创意人联盟 发起人/会长
《品牌知觉系统》品牌形象构建理论创始人
冯淳,人称宝四,新疆生,各处长。打小与画结缘、与乐为伴,后入摇滚门,进迷笛,尔后上设计道,入品牌门,至今十余年。好折腾,不闲着,与马结缘,创红马品牌、立红马会创意人联盟,后参与发起大地民谣。新品牌基因形象构建理论的创立与践行者,品牌整合设计专家,多元经历及跨界身份,专注品牌创建与设计管理十五年,突破格局,协助众多品牌成功跨越商业逻辑与消费情感的鸿沟,持续推动本土品牌实现深度的价值超越
分享主题《无知觉 不品牌》
1、 为何及如何打造“品牌知觉系统”
2、 品牌运营中的策划、筹备、执行
3、 多一度热爱
4、 音乐节及品牌活动重点案例分享
5、 好设计的爆破力
 


41472182607799_party4.jpg


许多 
浙江海宁人,北京迷笛音乐学校99级电吉他专业,歌者;2002年发起创办新工人艺术团(前打工青年艺术团),并参与创办北京工友之家;2015/2016打工春晚总导演;现为大地民谣运营总监。
分享主题《“大地民谣”如何行走天下》
1、大地民谣的理想:理想的重要性
2、如何跨出第一步:资源的整合
3、如何行走天下:解放想象,形式的灵活多样
4、自由人如何联合:聊聊未来
 


81472182621807_party8.jpg


刘男 
明德微联合创始人。北京大学社会学系副主任,人大客座教授,中国著名的女性高级讲师,主攻企业商业模式和战略管理。
是中国首位国际认证的女性企业家。多家上市公司股东和高级战略参谋。
分享主题《会员的品牌管理与服务》
1、会员模式分享
2、创新商业模式管理经验谈
3、品牌服务经验分享
 
       活动主办
 


41472184408473_party4.png


        活动协办



01472789897893_party0.png




41472789654080_party4.png



 
活动报名:点击报名 收起阅读 »

Duplicate interface definition for class 'EaseUI'解决办法

今天项目迁移时发现报 Duplicate interface definition for class 'EaseUI' 错误,然后重新修改了EaseUI-Prefix的指定路径就好了!
今天项目迁移时发现报 Duplicate interface definition for class 'EaseUI' 错误,然后重新修改了EaseUI-Prefix的指定路径就好了!

报错: _OBJC_CLASS_$_CMMotionManager 和 报错:ChatDemoHelper中TTAlertNoTitle is invalid in C99解决方法

(1)报错  _OBJC_CLASS_$_CMMotionManager  : 解决方法:直接去Linked Frameworks and Libraries 导入 CoreMotion.framework文件即可:     ...
继续阅读 »
(1)报错  _OBJC_CLASS_$_CMMotionManager  :

1.pic_.jpg


解决方法:直接去Linked Frameworks and Libraries 导入 CoreMotion.framework文件即可:


2.pic_.jpg


  
 
(2)报错:ChatDemoHelper.m文件中 TTAlertNoTitle is invalid in C99
解决方法:直接在ChatDemoHelper.m文件中导入两个文件即可:
 
#include <sys/types.h>
#include <sys/sysctl.h>
 
 
真的是很蛋疼的两个报错。。。 收起阅读 »

环信webim1.1.2版本在windows下npm环境搭建错误解决

1.1.2版本的webim从ui到整体的代码结构都做了很大改变,从代码结构上采用node.js的环境进行开发和打包,最终打包的输出项目,不依赖node.js的环境进行运行,得益于webpack的打包实现。 这里有详细的管网介绍:http://www.im...
继续阅读 »
1.1.2版本的webim从ui到整体的代码结构都做了很大改变,从代码结构上采用node.js的环境进行开发和打包,最终打包的输出项目,不依赖node.js的环境进行运行,得益于webpack的打包实现。

这里有详细的管网介绍:http://www.imgeek.org/article/825308179

下载地址:https://github.com/easemob/web-im/releases/tag/v1.1.2

先说明一下在搭建node.js环境时到打包碰到的问题:

前提:必须成功搭建了node.js环境才能进行以下步骤,可以参考这篇文章进行搭建:http://xiaoyaojones.blog.163.com/blog/static/28370125201351501113581/

1、如果在https://nodejs.org/en/官网下载的v4.5.0 LTS,然后进行npm install命令之后再进行webpack命令,会提示以下错误:


QQ图片20160901010009.png



解决方法:使用会5.10.1版本的进行npm install->webpack,然后就能成功打包。

2、上面一步中,很大机率会出现webpack不是系统命令,如果出现这样的问题,一种是webpack的包安装不是全局,webim采用的就是局部安装,只是项目上引用局部模块非常方便,也不会出现太多的莫名奇怪的冲突问题;

可以通过以下方式解决:

①用npm install -g命令安装webpack为全局模块,然后即可使用webpack命令。

②既然要局部,那就直接局部使用;经过分析,调用webpack命令时其实就是一个cmd批处理,查看批处理会发现,就是node + “xxx.js”的形式存在,那么我们可以这样变通一下,命令行进入到webim的目录运行如下命令:

node ./node_modules/webpack/bin\webpack.js -config webpack.config.js

③还有一种方式,那就是通过package.json进行开刀,在scripts节点上增加"start":"webpack",然后在命令行上运行npm start同样能达到打包的效果。

注意:以上运行的命令行一定要以管理员的身份运行

题外:新版的webim需要用的知识比较多,可以按照这样的顺序进行突破:node.js->npm->react->webpack
  收起阅读 »

环信李理:从Image Caption Generation了解深度学习

       本系列文章希望通过Image Caption Generation,一个有意思的具体任务,来介绍深度学习的知识,涉及到很多深度学习流行的模型,如CNN,RNN/LSTM,Attention等。本文为第一篇。      作者李理,...
继续阅读 »
   
   本系列文章希望通过Image Caption Generation,一个有意思的具体任务,来介绍深度学习的知识,涉及到很多深度学习流行的模型,如CNN,RNN/LSTM,Attention等。本文为第一篇。

1473047735190.jpg


 
   作者李理,目前就职于环信,即时通讯云平台和全媒体智能客服平台,在环信从事智能客服和智能机器人相关工作,致力于用深度学习来提高智能机器人的性能。
 
0. 前面的话
 
   建丁让我写一篇深度学习相关小文章,目标读者是国内的开发者。刚接到这个任务时我是颇为忐忑的,写文章要讲究厚积薄发,如果“水之积也不厚”,“则其负大舟也无力”。因为我自知水平很有限,又不是在学校和科研机构做研究,只不过因为工作和个人的兴趣,对深度学习有一点点粗浅的了解,所以担心写出来的东西不但于人无益,甚至还让人误入歧途。但后来又一想,如果把自己作为一个深度学习的学习者,和对它感兴趣的普通开发者分享一些学习的经历,包括学习过程中遇到的问题,可能也是有一些意义的。毕竟读论文或者听学术大牛的讲座只能看到“成功”的经验,而且大部分开发者相对来说没有太多的背景知识,而很多圈内的人都是假设读者拥有这些知识的。但是对于普通的开发者来说,很多基础知识比如线性代数和微积分在上完大学后估计就还给老师了,因此可能理解起来难度更大。而从另外一个角度来说,工程师(开发者)和科学家(科研工作者)关注的点也是不一样的。科学家更关注理论的东西,比如一个模型是怎么提出来的,为什么要这么设计模型,这样的模型怎么转化成一个优化问题。而工程师则更关注这个东西能够做什么,具体这个优化问题怎么求解更高效。学术界每年有大量的论文发表,大量的idea被提出,其中有好有坏,有的工作可能看起来理论很漂亮,但实际应用起来很难;有些工作可能不被太多人关注,但却是某些工业界非常需要的。

   另外从人工智能的发展来说,我个人觉得在传统行业的普及也是非常重要的。现在很多人工智能创业公司,很多想用人工智能创造一个全新的产品,比如早期类似Siri的语音助手到现在火热的机器人。但我个人觉得目前的人工智能的水平还很难做出达到用户预期的产品,尤其是很多初创公司吹牛吹得有些过分,导致用户期望过高,而真正使用产品后则形成巨大的反差。我觉得目前阶段人工智能更大的用处是提升现有系统,用我自己的话来说就是目前的人工智能只是锦上添花而不是雪中送碳。也就是说光靠人工智能是不能吸引用户来购买你的产品的。

    比如现在国外很火的Amazon的智能音箱产品Echo,如果我不想买一个音箱,估计你很难这样说服我购买Echo——我们的Echo有非常智能的语音交互功能,可以问天气,可以设置闹钟,可以Uber打车,可以控制家里的智能冰箱。但是如果我想购买一个音箱,现在面临两个选择:一个是传统的音箱,另一个是Echo。那么你对我说Echo有多么牛逼的智能可能会打动我,反正也差不了多少钱,能有这么多听起来很酷炫的功能也挺不错的。

   由于Echo的成功,国内很多人也想“山寨”一个类似的产品,不过可能很多人忽略了美国和中国的一些细小差异,那就是音箱似乎不是大城市居民的必备品。就我个人的朋友圈来说,每个家庭肯定都有个电视,但是有音箱寥寥无几。为什么会这样呢,因为中国的大城市居民大都是住楼房,很多老破小隔音效果都很差,你整个音箱弄家里还没high两分钟,估计邻居就该敲门了。倒是耳机,屌丝们挤公交地铁时的必备利器,也许会更好卖。

   说了这么多,想表达的就是目前人工智能应该更多的提高现有产品。比如提到Google,大家可能会想到它收购的Deepmind的AlphaGo,但是我们可能没有意识到日常使用的很多产品中都使用了深度学习。比如搜索引擎的排序,邮件的智能回复生成,都大量使用了深度学习。而AlphaGo的作用则更多的是一种市场PR,一种宣传作用,让大家知道人工智能目前的一些进展,而现在AlphaGo团队则是想将其技术用到医疗行业帮助医生诊断疾病。

   也就是说人工智能在未来也许就像计算机,互联网,云计算一样是一个非常基础的设施,在任何需要用机器来替代或者减少人力的场景都是有用武之地的。目前不论是国内还是国外,人工智能的人才都是非常稀缺的,而且都是集中在少数学校的实验室和大公司的研究院里。因此向普通开发者传播相关的知识就显得尤为重要。基于这样的考虑,虽然自己的能力不够,但还是愿意把自己学习的一些经验和问题向大家分享。
 
1. 为什么分享Image Caption Generation这个话题?

   这篇小文章并没有限定什么范围,只要是深度学习相关的就行。这反倒让人烦恼,就和人生一样,选择太多了也是一种烦恼。因为最近工作有空之余正在学习斯坦福的课程CS231N,Convolutional Neural Networks for Visual Recognition。这个课程非常好,除了详尽的slides和notes,最值得一提的就是它的作业。每个作业包含完整的模型,比如CNN、LSTM,所有的模型的代码都只是用最简单的python代码实现,而不是用现成的库比如TensorFlow/Theano/Caffe。纸上得来终觉浅,绝知此事要躬行。很多理论,光听课看slides,似乎觉得自己懂了,其实还是一知半解,真正要掌握,就得自己动手,最好是全部自己实现。但是全部自己实现需要花的时间太多,而且从实际工作的角度来说,大部分开发者肯定都是用TensorFlow这样的工具。而这个课程的好处就是:把一些琐碎的与核心代码不相关的部分包括学习的框架都已经实现了,然后用IPython notebook把关键的代码的函数的输入和输出都描述的非常清楚,学习者只需要实现一个一个这样的函数就行了,而且每个函数都会有类似单元测试的检测代码正确性的数据,从而保证我们的每一步都是在朝着正确的方向前进。

   因此这篇小文章打算讲一讲其中的Assignment3的Image Caption Generation部分。目的是想通过一个具体的任务来给大家介绍深度学习的一些知识,让大家对深度学习有一些概念和兴趣。选择Image Caption Generation的原因,一来这个任务挺有意思的;第二就是它涉及到很多深度学习流行的模型如CNN,RNN/LSTM,Attention。

   首先来介绍一下什么叫做Image Caption Generation。

   对于计算机视觉相关的任务,图片分类和定位大家可能比较熟悉。图片分类就是给定一张图片,让计算机告诉我们它是一只猫还是一只狗;而图片定位除了告诉我们这是一张狗的图片,还需要用用一个矩形框把狗的位置标识出来。当然还有要求更高的Image Segmentation,需要告诉我们哪一些像素属于狗,而另外一些属于背景。

图1就是这些任务的例子:

20160825150725021.jpg


图1:常见机器视觉任务 图片来自 http://cs231n.stanford.edu/slides/winter1516_lecture8.pdf
 
而Image Caption Generation任务是给定一张图片,需要让计算机用一句话来描述这张图片。

如图2所示:

20160825150738704.jpg


图2:Caption Generation任务示例 图片来自 http://mscoco.org/dataset/#captions-challenge2015

   从实际的应用来说,这个任务也是很有用处的。比如一个手机拍完照片之后,我们可以用这个方法生成一句话来描述这个图片,方便分享和以后查找。

   而从理论研究的角度来说,Caption Generation相对于之前的task来说需要更加深入“理解”图片中物体之间的关系,甚至包括一些抽象的概念。它把一幅信息量极大的图片压缩成短短一句话。

   我是做自然语言处理(NLP)相关工作的,之前对计算机视觉有一些错误的看法。认为视觉信号是更底层和原始的信号,除了人类,动物也有很强的视觉能力,也能分辨不同物体。而语言是人类创造的符号系统,属于更高层的抽象,因而属于更高级的人工智能问题,似乎不少人会有类似的观点。

   但是现在我有了一些不同的看法,人类的大脑并没有什么特殊之处。一个小孩在一岁之前一般不会说话,他认识世界的主要方式就是主要通过视觉系统来区分物体,也许和神经网络类似,通过复杂的神经元的连接来“理解”世界。这些不同层次的网络就是不同层次的特征,就像神经网络的“黑盒”,我们自己也很难用精确的语言描述我们大脑到底学习到了什么样的特征。而且很可能每个人学到的特征,尤其是底层的特征都是不相同的。

   比如下图的一个汽车,最底层的特征可能是不同方向的线条,而中间层的特征可能是各种基本的形状,而更上层的特征就是车轮这样的更上层概念。

20160825150824830.jpg


图片来自 http://cs231n.stanford.edu/slides/winter1516_lecture7.pdf

   一个复杂的概念由一些简单的概念组合而成,而简单的概念可能由最基本的原子概念组合而成。语言就是对这些概念的描述,或者说就是一个标签,一种命名。但是语言有一个特点就是它是用来沟通和交流的,所以语言的使用者需要达成一定程度的共识。那怎么达成共识呢,比如我们在教小孩语言时是怎么与他达成共识的呢?比如一个桌子,我们通过手指这一个条狗狗,反复对小孩说“狗狗”这个词(其实是声音,为了简化,我们暂且当成文字),这样我们就和小孩达成了共识,“狗狗”就是指这样一个动物,然后又指着另外一条狗狗,也说“狗狗”,小孩就学到这一“类”物体都是狗狗。所以他需要调整他的神经元连接,使得那些符合某种特征的物体都被识别成狗狗。至于具体这个识别狗狗的神经网络的参数是什么样的,我们很难知道,也许刚开始他需要分类的物体很少,比如只有“爸爸”,“妈妈”和“狗狗”,那么它可能需要不是那么“本质”的特征来区分,比如他可能认为四条腿走的是“狗狗”,两条腿直立行走的就是“爸爸”和“妈妈”。当随着需要识别的类别的增多,比如有了“猫猫”,那他一上来可能认为也是“狗狗”,但父母告诉他分类错误,这不是“狗狗”而是“猫猫”。那么他可能需要别的特征来区分猫猫和狗狗,也许他学到的是:四条腿走并且嘴很长的是狗狗,而四条腿圆脸的是猫猫。

   那为了能够区分猫猫和狗狗,小孩的中层的特征可能需要抽取类似“脸”的特征,或者说概念。我们也会告诉他这是狗狗的脸,这是猫猫的脸,这是爸爸的脸。这样他需要学习出脸的共性的特征。

   从上面的过程我们可以发现,概念本身只是一种“特征”的指代,是我们的感觉系统(视觉)对一个物体的反应。而语言是一部分相似的生物对同一个/类物体达成共识的一种指代。但每个人的感觉系统和神经网络结构都是不一样的,所以也只能在非常粗糙的程度达成比较一致的共识,而在非常精细的概念层次是很难达成广泛共识的。因此我们会把周围的人打上各种标签,分成各种类别,由此各种概念也就产生——肤色,语言,宗教,性别,阶级。每个人也只能和同一个标签的人在某个方面达成共识,所以要找到一个完全“了解”自己的人是如此之难,而不同的物种的共识可能就更难了。所以就像《庄子·齐物论》里说的“毛嫱、丽姬,人之所美也;鱼见之深入,鸟见之高飞,麋鹿见之决骤。四者孰知天下之正色哉?自我观之,仁义之端,是非之涂,樊然殽乱,吾恶能知其辩!”毛嫱、丽姬是我们人类眼中的美,但是在鱼和雁看来只是可怕的敌人。可笑的是自恋的人类却还要曲解庄子的愿意,认为它们是因为惊异于她们的美丽才沉鱼落雁闭月羞花的。不说动物,即使是人类而言,美也是很难达成共识的,那些黑人国家的美女,我们中国人是很少会认为她们是美女的。

   因此从这个意义上来说,语言也许并没有我们想像中的那么高大上。 就目前人工智能或者深度学习的水平来说,也许研究小孩在建立复杂概念之前的行为更有用处。 收起阅读 »

SDK 问题

1、Android 和iOS方法不统一 2、Android封装含有附件的消息必须有路径(这个就尼玛坑爹)与iOS不一样 3、下载附件的时候为毛要把域名变成IP地址 (这个附件是我们自己服务器处理的消息附件)
1、Android 和iOS方法不统一
2、Android封装含有附件的消息必须有路径(这个就尼玛坑爹)与iOS不一样
3、下载附件的时候为毛要把域名变成IP地址 (这个附件是我们自己服务器处理的消息附件)

Amaze UI插件开发大赛-环信邀你一起打造精彩开源世界

前言 Amaze UI开源两年以来,一直受到众多开发者的关注,非常感谢你们的建议和想法,为了满足更多开发者的需求和顺应新技术趋势,我们在保持现有的Web版本上,相继推出了React版、Touch版,让开发者能够快速构建网页应用和Web App。自2014年9...
继续阅读 »

header1.png


前言

Amaze UI开源两年以来,一直受到众多开发者的关注,非常感谢你们的建议和想法,为了满足更多开发者的需求和顺应新技术趋势,我们在保持现有的Web版本上,相继推出了React版、Touch版,让开发者能够快速构建网页应用和Web App。自2014年9月开源以来,在Github上的星级关注超过7000,成为国内最受开发者喜爱的开源项目之一,目前服务超过40万开发者。

关于比赛

本次比赛,相较于之前的模版比赛、组件比赛显得更为“小巧”,主要是针对“插件”的开发比赛,开源世界里,Amaze UI虽然不能算是最闪亮的那颗星,但我们一直不遗余力的完善自己,打造更好的Aamze UI为广大开发者服务。
 
参赛须知

所有提交的插件需要基于Amaze UI进行移植开发或者原创开发,样式风格与 Amaze UI 保持一致。
所有参赛的开发者和提交需求的开发者需要加入比赛QQ群(539654238),赛事答疑、比赛结果、比赛源码会第一时间在群内公布。每位参赛者,提交作品数量不限。只要作品够优秀,支持一人拿多奖。 比赛介绍本次比赛主要分为两个阶段,第一个阶段是需求期,让开发者提交插件需求;第二个阶段才是开发期,根据第一阶段提供的需求,来进行更精准的开发。第一阶段全民提需求 (8.26-9.04)把你想要的任何插件的需求提出来,最终生成一个需求列表,接下来会根据这个需求列表,来进行开发范围,如果提交的需求最终被开发者实现并且获奖,提交需求的人员也可以同样获奖,奖品为Amaze UI鼠标垫一份。特定需求实现:科大讯飞--语音播报功能,通过科大讯飞语音SDK,开发出特定区域内文字语音播报。实现后可得到双份奖品。提交需求的格式如下:插件名称:实现功能:应用场景:参考资料: 点此提需求 第二阶段大神来开发 (9.05-10.09)针对前期的需求整理出需求列表进行公示,并且正式开启开发模式,最终评选出来的获奖用户,获得相应的奖励。 活动奖品

jiangpin.png

活动流程

liucheng.jpg

作品提交所有提交的参赛作品需注明为MIT(加链接)开源协议所有移植的插件务必注明源插件的开源许可及项目地址;发布到Github上或邮箱提交时需在标题中添加相应关键字:
  • Amaze UI Web:添加 amazeui-plugin
  • Amaze UI React:添加 amuireact-component
  • Amaze UI Touch:添加 amuitouch-component


ps:提供可查看的项目主页,项目主页中应包含插件介绍、API 文档及演示;

提交示例
示例:
xxx                          //插件文件夹,xxx为插件名称
|
|--docs //插件演示
| |-- demo.html
| |-- demo.css //演示文件样式
| |-- demo.js //演示数据传输
| |-- images //图片、字体等
| |--i
| |--font
|--dist
| |-- amazeui.xxx.css // 插件样式文件
| |-- amazeui.xxx.js // 插件js文件
| |-- amazeui.min.js // 官方js压缩文件
| |-- amazeui.min.css // 官方样式压缩文件
|-- README // 项目的描述、使用说明、MIT开源协议
|-- author // 作者信息、联系方式(电话、QQ)
参考插件:https://github.com/amazeui/slick
 
提交方式

第一种,按照以上格式在Github上发布,并且以邮件的形式把地址发送到amazeui@yunshipei.com,
邮件标题格式为:【插件比赛】+【插件名称(参赛作品名称)】

第二种,按照以上格式将作品(包含项目源代码、文档)以邮箱的形式发送到amazeui@yunshipei.com, 
邮件标题格式为:【插件比赛】+【插件名称(参赛作品名称)】

第三种,好雨云平台提交。http://docs.goodrain.com/usage/
 
评选嘉宾​


QQ截图20160830165415.jpg




QQ截图20160830165540.jpg


关于大赛更多:点击了解
  收起阅读 »

环信移动客服v5.0产品更新--人机协作、智能质检等众多环信机器学习功能亮相

        环信移动客服v5.0产品更新,人机协作、智能质检等众多环信机器学习功能亮相,支持呼叫中心与现有渠道打通,还有来自环信大数据的客户之声上线,让客服工作简直不要太简单!注:环信移动客服v5.0_产品更新说明/产品功能列表/产品使用指南 请到文章末...
继续阅读 »
   
    环信移动客服v5.0产品更新,人机协作、智能质检等众多环信机器学习功能亮相,支持呼叫中心与现有渠道打通,还有来自环信大数据的客户之声上线,让客服工作简直不要太简单!
注:环信移动客服v5.0_产品更新说明/产品功能列表/产品使用指南 请到文章末尾下载


全媒体智能云客服.jpg



  • 1 Web客服工作台(标准版) 



1.1 会话和消息支持模糊搜索 


1.1.1 全局搜索会话 
1.1.2 全局搜索消息 
1.1.3 在会话详情中搜索消息 


1.2 熟客优先 


优化熟客优先的调度策略。可以配置将访客发起的会话优先调度给“最后接待过该访客的客服”或“接待该访客次数最多的客服”。该功能默认处于关闭状态,可以进入“管理员 > 设置 > 系统开关”页面开启。


1.3 呼叫中心 


移动客服实现了呼叫中心和现有渠道的打通。开通呼叫中心后,客服可以接待来自手机APP、网页、微信公众号、微博、呼叫中心5个渠道的会话/来电。所有通话都会被录音,客服可以通过客服模式的历史会话查看通话记录,管理员可以通过管理员模式的历史会话查看所有客服的通话记录,并对访客进行回呼。呼叫中心功能需要单独开通,详情请咨询环信商务经理。


1.4 留言 


1.4.1 留言状态“未解决”变更为“未处理” 
1.4.2 新增留言角标 
1.4.3 新增留言相关的通知 


1.5 进行中会话数上限 


单个客服允许同时接起的会话数上限为200个,即进行中会话数不能超过200个。
当客服的进行中会话数达到该上限,将不会自动调度会话,不能手动从待接入列表接入会话,不能回呼访客,也不能接受同事转接的会话。此时,需要先关闭一些进行中的会话,使进行中会话数低于200,才可以继续接入会话。


1.6 允许客服手动接入会话 


管理员可以设置是否允许客服从待接入列表中手动接入会话。开关打开时,客服可以从待接入中手动接入会话;开关关闭时,客服无法从待接入中手动接入会话。管理员始终可以手动接入会话。


1.7 支持导出客服登录详情 


进入“管理员模式 > 成员管理 > 客服”,可以查看所有客服(除自己之外)的当前在线/离线状态,并可导出每位客服的登录详情,包括登录时间、状态切换等。


1.8 设置APP访客端使用数字型的菜单消息 


支持设置APP访客端使用数字型的机器人菜单消息。可在“管理员模式 > 智能机器人 > 机器人设置”页面设置。


1.9 新增统计指标的注释 


统计查询的工作量、工作质量、访客统计、排队统计页面新增统计指标的注释,包含指标的算法、解释。
将鼠标置于气泡上会显示该指标的注释。


1.10 访客每天访问次数统计 


在“管理员模式 > 统计查询 > 访客统计”页面,可以按访问次数进行筛选,查询指定时段内每日访问次数不同的访客数量的占比。


1.11 【优化】修改密码策略,提高账号安全级别 


优化后,新密码的有效长度为6~22位,至少包含两种格式(大写字母、小写字母、数字、符号)。
登录环信移动客服时,需要输入验证码;客服/管理员重置密码时,需要进行密码确认。


1.12 【优化】体验指南展示页新增AppKey的提示 


体验指南展示页新增AppKey的提示,只需将该页面的AppKey和IM服务号填入“商城”应用的设置页面,即可快速模拟访客发起咨询。


1.13 【优化】进行中会话列表的时间提醒图标 


优化进行中会话列表的时间提醒图标。取消客服消息的时间提醒,优化访客消息的时间提醒,让客服准确知道,已经超过多长时间未回复某位访客的消息了。


1.14 【优化】聊天窗口的自动滚动条件确定和统一 


当客服查看历史消息时(滚轴不在底端):
·如果客服收到新消息,以消息气泡提醒,点击气泡后滚轴自动滚动到底部;手动将滚轴滚动到底部时,消息气泡消失;
·如果客服发送消息,滚轴自动滚动到底部。
当客服处于聊天状态时(滚轴处于低端),如果客服收到新消息或发送消息,滚轴均自动滚动到底部。


1.15 【优化】公司字段的长度变更为45个字符 


访客资料中,“公司”字段的长度从24字符变更为45字符,支持更完整的公司名称。


1.16 【优化】删除坐席失败时,系统提示失败原因 


当客服有进行中会话时,不能被删除。如果管理员做了“删除”操作,系统会提示“客服有进行中会话,无法删除。”


1.17 【优化】回呼访客失败时,系统提示失败原因 


对访客进行回呼时,如果回呼失败,系统返回失败原因。



  • 2 Web客服工作台(增值服务) 


 
2.1 客户之声 


环信客户之声基于自然语言处理,主题建模和情感分析技术,分析访客与客服坐席的消息内容,为客服管理团队展示客户与客服沟通时的情感指数和高频提及的关键词,并且可以追踪到这些关键词对应的消息与会话。
客服管理团队可以通过客户之声了解历史会话中最常被提及的主题和关键词,并了解相应的情绪温度,依此判断当前服务中的热点问题。
客户之声功能为增值服务。如需开通,请提供租户ID并联系环信商务经理。



  • 3 Web客服工作台(旗舰版) 



3.1 人机协作 


基于大数据分析和机器学习技术,环信移动客服可以自动分析海量历史会话数据,建立智能应答模型,供客服在人机协作模式下使用,无需手工建立和维护庞大的知识库。在人机协作模式下,可以实时的依据访客问题提示可能的答案,人工客服仅需简单的点选即可快速回复访客,极大地提升工作效率。
人机协作是旗舰版功能。如需开通,请提供租户ID并联系环信商务经理。


3.2 智能质检 


智能质检功能允许系统自动检查访客和客服的历史消息,如果发现异常,则在会话后提示“有问题”,并在质检详情页提示问题原因。在智能质检的辅助下,质检员可以扩大筛选范围,覆盖更多会话,提高质检效率,获得更准确的质检结果。
智能质检为旗舰版功能。如需开通,请提供租户ID并联系环信商务经理。


3.3 消息中心API 


开放消息中心API,允许第三方业务系统通过API调用的方式,向指定租户下的一个或多个坐席发送通知消息。通过定制通知消息内容,可以支持快捷功能,如点击消息中的URL链接打开指定会话。
消息中心API仅对旗舰版客户开放。如需开通,请提供租户ID并联系环信商务经理。



  • 4 网页访客端 


 
4.1 留言支持配置 


默认情况下,如果机器人处于关闭状态,下班时间自动进入留言页面。如需允许下班时间访客的消息进入待接入,可以配置参数offDutyType=chat。


4.2 多租户场景下,访客多个咨询窗口最小化后,都能收到提醒信息 


网页端的多租户场景,指设置了多个“联系客服”按钮,且这些按钮指向不同的租户ID。
当访客打开多个这样的咨询窗口并将其最小化后,客服回复这些咨询窗口的消息,访客能够收到所有咨询窗口的提醒信息。


4.3 【优化】获取机器人欢迎语 


当在网页端开启机器人功能,并且设置了机器人欢迎语时,访客端(聊天窗口和H5网页)自动获取机器人欢迎语。
当网页端关闭机器人功能时,访客端(聊天窗口和H5网页)不再获取机器人欢迎语。
注:APP端可以通过API获取机器人欢迎语。


 体验环信移动客服 http://kefu.easemob.com/
 查看历史版本请点击版本历史
 
环信移动客服v5.0_产品更新说明/产品功能列表/产品使用指南  请点击下载↓↓↓ 
  收起阅读 »

【公告】关于Parse服务停止的解决方案

        Parse将在2017年1月28日正式停止服务,有很多用户都在环信的自有Key(parse client key)下存储了自己的数据,为了相关用户不受Parse停止服务的影响,环信在自有服务器上搭建了一套Parse服务,同时将自有Key(par...
继续阅读 »
   
    Parse将在2017年1月28日正式停止服务,有很多用户都在环信的自有Key(parse client key)下存储了自己的数据,为了相关用户不受Parse停止服务的影响,环信在自有服务器上搭建了一套Parse服务,同时将自有Key(parse client key)下的相关数据全部同步到了自有服务器中。

   目前Parse官方服务中环信Key(parse client key)下的相关数据存储都已指向环信自建服务器,同时环信搭建的Parse服务也正式对外提供服务。之前使用了Key(parse client key)进行数据存储的用户可以通过将原有Parse服务的域名替换为环信自建服务域名的方式来进行,具体的代码实现说明如下:
 
①.Android代码修改说明
将原代码中的Parse.initialize(context, ParseAppID, ParseClientKey);
修改为:
private static final String parseServer = "http://parse.easemob.com/parse/";

Parse.initialize(new Parse.Configuration.Builder(appContext)
        .applicationId(ParseAppID)
        .server(parseServer)
        .build());
②.IOS代码修改说明:

   首先下载最新的Parse SDK包,然后对代码做如下修改

将原代码中的如下部分:
[Parse setApplicationId:@"applicationId"
clientKey:@"clientKey"];
修改为:
[Parse initializeWithConfiguration:[ParseClientConfiguration configurationWithBlock:^(id<ParseMutableClientConfiguration> configuration) {
configuration.applicationId = @"applicationId";
configuration.clientKey = @"clientKey";
configuration.server = @" http://parse.easemob.com/parse/";
}]];

 注:如果您的业务里使用Parse服务做了头像的功能,请仔细阅读以下说明。

   在将您的APP从Parse迁移到环信自建服务的工程中,未升级的客户端会存在无法访问升级后客户端新增头像的问题。具体的说明如下:
  1. 当前情况是Parse服务和环信自建服务分别在自有的S3服务器上存储头像。
  2. 客户端升级使用环信域名后,可以访问原有的Parse上存储的头像文件。
  3. 未升级仍然使用Parse域名的客户端,无法访问已升级客户端在环信域名下新增的头像文件。
  4. 为了最终将头像文件完全同步到环信S3服务器,我们计划在2016.10.31日将当时存储在Parse的头像文件一次性全部同步到环信S3服务器上。若您要使用环信自建的服务,切使用了头像文件,请务必于2016.10.31日前完成对客户端的升级工作,避免用户头像无法访问的问题发生。

收起阅读 »

专访环信CEO:企业级服务是资本寒冬下的优质资产抓住第四次系统性机会

 儒雅、干练,技术出身,又富有敏锐的商业思维,这是环信CEO刘俊彦给号外财经网记者的初识印象。   8月23日,在北京国际会议中心举行的GIEC2016全球互联网经济大会上,刘俊彦接受了号外财经网的专访。短短20多分钟,他透露了有关环信的诸多高含金量信息...
继续阅读 »


508c2d5508dd30627332d5369582f071.jpg



 儒雅、干练,技术出身,又富有敏锐的商业思维,这是环信CEO刘俊彦给号外财经网记者的初识印象。

  8月23日,在北京国际会议中心举行的GIEC2016全球互联网经济大会上,刘俊彦接受了号外财经网的专访。短短20多分钟,他透露了有关环信的诸多高含金量信息:从创业初期的“蒙圈”到走上成功之路,技术步步领先是公司的核心竞争力,如何打造SaaS客服产品争做全媒体客服市场的“NO1”,以及环信不烧钱还能快速赚钱的秘诀……

环信核心竞争力:持续领先的技术实力

  短短两年时间,环信成功实现四轮融资,并领跑中国SaaS客服市场,到底靠的是什么?环信的核心竞争力是什么?在专访中,号外财经网开门见山的提出第一个问题。

  “环信是技术驱动型公司,我们的核心竞争力在于技术能力,我们的愿景是技术改变行业。”刘俊彦也是直言不讳。

  他进一步诠释自己的观点,认为好的技术很难被超越,一步领先可能就会步步领先。环信取得行业领先地位后,仍保持大量的人力研发投入,在研发团队规模、资金投入规模、收入规模三个方面的领先优势都在持续扩大,而不是被追上。

  目前,该公司拥有环信即时通讯云和环信移动客服。即时通讯云提供基于互联网的通讯能力服务,帮助创业者做社交,具有单聊、群聊、发文件图片等功能,是连接“人和人”。移动客服是在环信即时通讯云PaaS平台上生长出来的SaaS平台,是垂直行业应用,连接“人和商业”。刘俊彦认为,两个产品是公司立身之本。

  在中国当前移动互联网时代,很多东西被颠覆了,但各行业的基础平台功能很重要。他很看好两大产品的市场前景,“目前把这两个产品做到极致,做到一针挑破天就成功了。”

背后故事:从创业初期“蒙圈”到成功之路

环信的创始团队都是技术出身,他们创业初期也曾经历过曲折。

  “一开始做过类似企业微信和阿里钉钉这类的产品,属于企业办公平台,很快开发出来了。但在那个时间点上,我们不是特别有销售和市场意识,产品的一些功能是想象出来的,发现不知道卖给谁,也不知道怎么卖,所以不是一个成功的产品。”刘俊彦给号外财经网分析他们创业初期开发的产品。

  后来痛定思痛,刘俊彦和他的团队对自身优势进行思考。“我们是开发者,我们最擅长的是跟程序员打交道,程序员需要开发者后台。”他说,把产品其他不用的功能都砍掉,只保留最核心的部分聊天的部分,就是现在的即时通讯云。“用起来简单,功能强大,没有交互界面,可直接通过API调用,只需要看文档就可以了。服务器需要支持几千万人同时在线,运行需要特别可靠和稳定。”

  这样的模式需要非常高的技术门槛,而这恰恰是环信团队的优势。

  “做一个2C产品,让我们去研究人性、了解用户需求挺难的。但我们是开发者,开发者想要什么样的API、如何把这个API做的更好、做的更好用,这是我们擅长的。所以我们觉得创业者一定要找到自己最擅长的点,坚持做下去,才能成功。”刘俊彦这样总结。

第四次系统性机会:打造千亿市值企业

 环信发展的路径是什么?如何发展?发展空间多大?这也是刘俊彦最近在探索和思考问题。对此,他更多的从公司“市值目标”进行了探讨。

  刘俊彦认为,企业服务行业的前景很广,对比美国的企业服务市场,前三名公司市值合计3000亿美金,中国前三名加起来是60至80亿美金,几十倍的差距。中国也有巨量企业,也开始消费了,需要企业服务公司了,规模可能会很快赶上美国,会有系统性机会。

  “这样的系统性机会很少碰到。第一次是搜索引擎,造就了百度和谷歌;第二次机会是电商,造就了阿里巴巴;第三次机会是移动社交,成就了微信和腾讯。现在企业服务是第四次机会,可能是二十年来最大的一次机会,把握住就会造就下一个BAT,造就企业服务领域千亿美金或人民币的公司。”他耐心剖析自己的行业观点。

  “机会放在这里,怎样才能抓住呢,要看核心赛道。”刘俊彦并不吝惜分享行业机会。他说,已知的核心赛道就几条,第一条是企业协同办公,BAT的天下;第二条是企业销售自动化管理,行业的几家公司已经C轮融资或者挂牌上市了;第三条是HR;第四条是财务软件,用友金蝶已经统治了;第五条是客服。

  “环信还是挺幸运的,去年才进入客服市场,后发先至,并在这个赛道上跑到了前列。”刘俊彦说,环信SaaS客服产品自去年4月份推出以来,市场推广、用户获得比预想的要快,用户群体、销售规模等领先行业,这是一个惊喜。

  刘俊彦向号外财经网透露,环信2016年的目标是在全媒体客服市场的在线客服部分做到全国第一,2017年希望在整个全媒体客服市场做到全国第一,包括呼叫中心、网页客服、微信公众号客服、APP客服4个细分领域。

企业服务:资本寒冬下的优质资产

  “今年VC喜欢投企业服务公司,因为企业服务公司是优质资产,有持续稳定的现金流,不烧钱。只要产品好,每个月都有收入,源源不断,用产品就要付费,而且明年还要续费。收入模型好,一般月付型,而我们环信是年付。支出模型稳定,不烧钱。”刘俊彦对环信的发展信心十足。

 他现在的主要精力放在环信的管理和战略上。他说,公司过去两年已经做了4轮融资,基本不缺钱。

 对于后续的资本运作路线,他没有透露,但他给出了一个基本时间表,“会很快,今年,或者明年”。 收起阅读 »

ios V3.1.5 Android V3.1.5 release ,优化联系人读取,修改api命名的规范性

版本 V3.1.5 2016-8-26 Android V3.1.5更新日志 修改一些api名称,主要针对一些拼写错误的api,具体变动请查看3.1.5api修改;优化读取联系人的速度;修复在logout方法的回调里立刻调用login方法不能登录的...
继续阅读 »
版本 V3.1.5 2016-8-26

SDK.jpg


Android V3.1.5更新日志


  • 修改一些api名称,主要针对一些拼写错误的api,具体变动请查看3.1.5api修改;
  • 优化读取联系人的速度;
  • 修复在logout方法的回调里立刻调用login方法不能登录的bug;
  • 修复https安全漏洞,提高安全性;
  • 修复实时通话时暂停音频不生效的bug;
  • 修复使用网线连接时NetUtils.hasDataConnection()判断为false的bug;
  • 修复发送消息时导致memory leak的bug;

ios V3.1.5更新日志

新功能:

  • 提高SDK稳定性
  • 去除依赖库(libcrypto.a,libcurl.a,libssl.a)
  • 提高从2.x版本SDK数据库迁移效率
  • 进一步修改api命名的规范性,建议使用新的api,具体详情可以参考接口文档
bug fix:
  • 修改实时视频显示问题


版本历史:Android sdk更新日志  ios sdk更新日志
下载地址:sdk下载
 
使用过程中有遇到任何问题、反馈建议欢迎直接评论留言,我们将第一时间回复! 收起阅读 »

环信亮相全球互联网经济大会,客户声音将成SaaS客服突破口,顺便回答一下被北京卫视报道是一种神马体验

   8月23-24日,GIEC2016第二届全球互联网经济大会暨ECECHINA第七届中国电子商务博览会在北京国际会议中心盛大开幕,大会吸引到BAT、联想、乐视、360、网易、中兴、TCL、环信等一大批知名互联网和智能硬件制造近百家机构云集京城。环信CEO刘...
继续阅读 »
   8月23-24日,GIEC2016第二届全球互联网经济大会暨ECECHINA第七届中国电子商务博览会在北京国际会议中心盛大开幕,大会吸引到BAT、联想、乐视、360、网易、中兴、TCL、环信等一大批知名互联网和智能硬件制造近百家机构云集京城。环信CEO刘俊彦作为企业级服务意见领袖受邀参会,并在主会场做主题演讲和众多互联网精英一起论道共享经济下万物智能时代的机遇和挑战。

1119461756_14721965421021n.png


环信CEO主题演讲:全媒体智能时代的电子商务客服新体验

1119461756_14721965443681n.png


环信移动客服登录北京卫视
   在今年初答记者问时指出:“新经济的覆盖面和内涵是很广泛的,它涉及一、二、三产业”。GIEC2016大会议题涵盖了当下热门的互联网创新与变革、探索商业模式创新,把握VR等人工智能技术的发展机遇,以及未来万物互联到万物智能的探索。大会的第一个版块活动是分享经济峰会,与会嘉宾观点纷呈,但在共享经济对于互联网经济的作用上形成了共识。2015年以来,分享经济可谓是站在中国经济风口的“食物链顶端”,它的真正价值在于重新定义了人与人连接的方式,以及社群组成的方式。而环信移动客服产品更是嫁接“人与商业”的连接器,相关数据显示,2015年中国共享经济市场规模约为1.956万亿元。预计未来五年,共享经济年均增长速度在40%左右,到2020年市场规模占GDP比重将达到10%以上,随之配套的企业级客户服务行业规模也将更上一层楼。

1119461756_14721965361571n.png



1119461756_14721965614141n.png


 小伙伴国美在线、叮当快药、泰康在线、楚楚街和环信一起联合参展。
   在共享经济浪潮下,O2O、电商、互联网金融教育医疗等服务业取得了蓬勃发展,随之衍生的客户服务行业也取得爆发式增长。在用户体验为王的时代传统的呼叫中心已经不能满足新时代的客户服务需要,以环信为首的全媒体智能SaaS客服正逐渐成为主流。环信CEO刘俊彦认为包括APP、微博、微信、网页端/H5、呼叫中心等统一接入的全媒体客服的最佳体验不仅只是接入和各个渠道之间的打通,更重要的是用户跨媒体、跨渠道、跨部门的体验和跟踪,在海量的数据中发现重点,优化企业运营。环信首推的“客户声音”是一款基于人工智能和大数据挖掘的客户行为透析产品。可以通过自然语言解析,主题聚类,情感度分析等技术手段挖掘和分析热点话题,发现畅销或问题商品,同时分析发现服务运营中存在的问题,企业就此可以优化运营,利用大数据洞察力来发现销售机会,改善产品质量。从而更好的服务于终端用户。

   共享经济下的“互联网+”正在重构着人们的生活方式,也为各行各业带来了无限发展机遇。随着“互联网+”的渗透,“智能+”将成为“互联网+”的下一站,而“智能+产业”的融合,将成为产业升级与变革的推动引擎。环信认为现阶段人工智能最佳的落地行业是客户服务行业,环信智能客服机器人能够帮助人工解答80%的常见问题,极大的节省了人力成本提高了效率,目前在银行、电信、O2O等行业发挥着积极作用。环信移动客服提供的新特征“机器人智能质检功能”能对全部客服会话进行100%实时或离线质检,基于环信在线客服各个领域的海量用户对话,提取出数百个客服对话特征,并用这些特征训练得到的一个通用质检模型,智能质检的准确率达到了替代人工质检水平。

   据悉,GIEC2016第二届全球互联网经济大会在阿里、腾讯、百度、360、京东、亚马逊等行业领军企业参与支持下,已经成为我国乃至全球层次最高、专业性最强、影响力最广的电商及互联网行业盛会之一。同期举办的ECECHINA2016第七届中国电子商务博览会更是连续六届举办,成为行业一致认可的年度盛会。

   环信移动客服——全媒体智能云客服倡领者,于2016年荣膺“Gartner 2016 Cool Vendor”。环信支持全媒体接入,包括网页在线客服、社交媒体客服(微博、微信)、APP内置客服和呼叫中心等多种渠道均可一键接入。基于环信业界领先的IM长连接技术保证消息必达,并通过智能客服机器人技术降低人工客服工作量。同时,基于人工智能和大数据挖掘的客户旅程透析产品"环信客户声音"能够帮助企业优化运营,提高跨渠道客服体验。

   截至2016年上半年,环信移动客服共服务了29437家企业用户,现已覆盖包括电商、O2O、互联网金融、在线教育、在线旅游、移动医疗、智能硬件、游戏等领域的Top10客户,典型用户包括国美在线、58到家、楚楚街、海尔、神州专车、新东方、链家、泰康在线、号码百事通等众多标杆企业。根据易观发布的《中国SaaS客服市场专题研究报告》显示,环信移动客服在SaaS移动端客服用户覆盖占比高达77.4%,稳居行业第一。 收起阅读 »

iOS 拉取环信消息记录解决方法

1、首先是通过环信接口将数据拉取到我们本地服务器 http://docs.easemob.com/im/100serverintegration/30chatlog 在此过程中,服务器注意需要将拉取下来的数据,保存至数据库中的同时将(img/audio/vi...
继续阅读 »
1、首先是通过环信接口将数据拉取到我们本地服务器 http://docs.easemob.com/im/100serverintegration/30chatlog
在此过程中,服务器注意需要将拉取下来的数据,保存至数据库中的同时将(img/audio/video)的附件下载,并替换掉数据库中消息的附件地址
2、iOS从自己的服务器拉取数据(主要是解析, 自己服务器保存格式完全按照http://docs.easemob.com/im/100serverintegration/30chatlog)下面贴出解析数据过程(Json-Model使用的是MJExtension)
定义的Model如下


0913E702-3480-4B0F-980D-5C7E847C0216.png


 
处理消息

2CA22EAB-167B-4B90-BA29-158A2D397725.png




35E3C8CD-2414-43DA-95E8-E72D2FB3D220.png


  收起阅读 »

iOS手把手带你集成环信移动客服

今天正好项目需要需要集成客服系统,就把环信的集成了上去。这边文章写给小白的童鞋啦,大神勿喷。 首先在开始我的文章之前,我推荐大家把官方的文档好好阅读一下。   http://docs.easemob.com/cs/300visitoraccess/10nati...
继续阅读 »
今天正好项目需要需要集成客服系统,就把环信的集成了上去。这边文章写给小白的童鞋啦,大神勿喷。
首先在开始我的文章之前,我推荐大家把官方的文档好好阅读一下。
 
http://docs.easemob.com/cs/300visitoraccess/10nativeapp
 
首先,我假设童鞋们都阅读了官方给的文档,那就让我们开始愉快的集成客服系统吧。
 
1.首先下载环信的商城DEMO

https://github.com/easemob/helpdeskdemo-ios

下载之后运行发现=我拉个擦=运行不了0.0 相信了解git的同学都知道该怎么做。不了解的话听我慢慢说不要急。
首先环信的移动客服是基于环信的IM完成的,相信看了上面文档的童鞋都能理解这一点,对于环信的IM有一些静态库.a文件都在环信的的童鞋的gitignore中过滤掉了。只要我们我们重新下载环信IM的库,将缺少的.a静态库文件加上去就可以运行了。

.gitignore 是git的过滤文件 可以过滤掉我们不想推送的git仓库的一个配置文件。 github上有一个规范https://github.com/github/gitignore 可以在这个的基础之上来添加我们的需求。
 
2运行环信客服demo

到这一步童鞋们应该都能运行了环信的demo了,按照上面的文档童鞋的IM账号也弄好了,首先让我们来体验一下吧。
新注册的环信的移动客服都和 环信的商城demo 关联上了,我们打开管理员模式-》app->看到一个体验关联
之后把我们下载的demo的

1106106-50507296e4065f83.jpg


之后我们把IM服务号搞成后台给的号码,就可以愉快的和后台聊天的哇。
如果这一步没有问题,就说明我们后台的配置是没有问题的。这时候就就可以之正式该我们的代码了
 
3.添加APP关联

我们根据文档提示新加一个app关联,(修改默认的体验关联 是会失败的,一定要新建之后找到我们商城demo

1106106-125dd8a6f977fb4f.jpg


把对应的这几个文件夹和文件拷贝过来,并在我们自己的项目里面集成IM的库。
首先打开appDelegate的类目文件

1106106-4bdbb27e3f6e0634.jpg


修改推送证书的名称
之后打开localDefine

1106106-14b296595a9dcbca.jpg


上面的的是appkey
下面的是关联的IM服务号

之后拷贝过来的Localizable.strings 文件需要添加中文对应

1106106-d2c5b65233de46c4.jpg


在这里添加就ok.
最后让我们来看看我们的成果。

1106106-8c523ccd23e8e4dd.png


有木有很兴奋!
=======后续会更新其他细节操作,让童鞋们少走一点弯路 收起阅读 »

给准备入行电商客服的一些建议

主题很明确,请允许我说说心底话。 现在电商平台很多,但是主要还是集中那几个平台,你懂的,我就不点名了。 首先,打字要快,响应时间是要有考核的。规矩是平台定的,要么硬着头皮上。要么完全不搭理,直接用机器人。熟悉产品&规则后,虽然工作简单,但是强度大,...
继续阅读 »
主题很明确,请允许我说说心底话。

现在电商平台很多,但是主要还是集中那几个平台,你懂的,我就不点名了。

首先,打字要快,响应时间是要有考核的。规矩是平台定的,要么硬着头皮上。要么完全不搭理,直接用机器人。熟悉产品&规则后,虽然工作简单,但是强度大,尤其做活动的时候。

再者,小心脏要强大,要能忍受客户的脏骂。关于价格,催货,催物流,那都是家常便饭。习惯就好。

第三,能熬夜。客服,电商客服,至少要9点-24点都要有人在。每周六天,还有一天休息,算好的了。有些店甚至8-凌晨2点的都有。夜猫很多。尤其都市的人,失眠睡不着也会逛TB。

虽然自由,但确实也有点与普通人的上下班区分开。约会时间比较难凑。应验了那句话,加班累成狗,下班无朋友。(kua)(zhang)

最后,还是要跟运营做好朋友啊。还有活动&产品信息一定要吃的通通透透,这年头电商职业骗子坑爹的实在太多了,稍不留神就掉进坑里了。死的多冤你都不晓得。

说说趣事吧。

有一次做活动。新客户哈,因为对我们的奶粉品牌不熟悉,都是朋友介绍过来的,毕竟是第一次给宝宝在网上吃的(naifen),所以是问了好多。

最终客户说,第二天购买。我说好。

客户问了一句,你上什么班?

我说晚班。我说,没关系,早班也有同事在,可以购买。

客户说,那不就算别人的业绩提成咯?我还是晚班过来购买,算你的业绩。

哇塞,还有这么为客服着想的客户,当天的累一下子被感动全打消了。

好久以前,我在(qian)(niu)早已在签名写上,购买前请咨询客服。因为这样可以提高客服的转化率,还有提成。每行的难处,只有做了那行才知道痛并快乐着。

做电商客服还是以实时的文字信息沟通为主,所以避开了好多面对面的尴尬和对骂,实在无语了,发个表情。确实有好些客户急躁又素质不好。句句不离脏字。此处省略一万字……

因为聊天工具对商家都明显提示,不能有第③方的交流模式。比如QQ,微信,邮箱,京东等等。通通不行。

扫描查到,必然会店铺被扣分罚钱不说,甚至会被关店,其他处理。拼不过平台,还是乖乖就范。这些话,只能在客户提供了手机号码之后,电话联系了。我惹不起,躲开总行了吧。电话里再跟客户好好沟通。

相对于以前的电话客服,这个是明显省心好多。所以才有了"金牌客服"这个TB弄的证书。

老大说了,运营做好了,客服这个环节就显得至关重要。有些店铺,运营做不起来,可是客服的跟进让店铺依然活着,甚至还不错。

这只是我入门电商客服不到半年的感想。真真切切感到时间过得飞快。只要你对客户好,人家是感觉到的好么。不用说,人家也会主动在评价里夸赞你,而不是冲着你给的几元好评返现,这个是真心真实有效的。 收起阅读 »

从用户入口到客服报表,这是一场战役

分析目的 消费金融产品规则复杂;仅仅依赖交互和文案不能充分教育用户,用户教育成本高;客服是用户寻求帮助和了解产品的有效途径。   客服组成 客服涉及帮助列表、在线智能客服、电话自助客服、人工客服。 自认为的的客服流程应该是:适当曝光入口,精准定位问...
继续阅读 »
分析目的
  • 消费金融产品规则复杂;
  • 仅仅依赖交互和文案不能充分教育用户,用户教育成本高;
  • 客服是用户寻求帮助和了解产品的有效途径。

 
客服组成

客服涉及帮助列表、在线智能客服、电话自助客服、人工客服。

753795-b4b71ea5c0b5ae2c.png


自认为的的客服流程应该是:适当曝光入口,精准定位问题,再友好解决问题。本文将从各自的入口、逻辑、解决率、可优化程度、优化成本、优化顺序分析。

753795-be3f25ea8864ed50.png


客服入口

入口的曝光程度依赖于定位问题的精准程度、解决问题能力(解决率),以及解决问题成本。

人工客服的高人工成本决定无论如何入口都必须深。

帮助列表、在线智能、电话自助服务一经上线,需要维护的人工成本不高。只要帮助列表的解决能力不是很差,都可以适当曝光。

在线智能客服一般都可以引入到在线人工客服,因此漫山遍野的前提是能一定程度上切断与人工客服的联系。

电话自助和电话人工客服的联系不可切断,因为电话自助客服的曝光程度与电话人工客服一样,少量曝光即可。
 
帮助列表

753795-8f8efc9cd18845c3.png


(1)入口

后期维护成本不高,可以适当增加曝光。

保证所有入口的icon、交互尽量保持一致,让用户感知和习惯到帮助列表的入口。

(2)精准定位问题

产生问题的场景:看到当前页面的信息之后,或者进行了某种产品行为之后。

点击量便是调优参数。所以精准定位问题的背后逻辑可能是:

a、页面分级和提取页面标签:

无法获得详细精准信息的页面提供统一的通用帮助列表;

详细页面帮助列表个性化。收集当前页面信息,读取信息的标签,然后根据标签展示相关的热点问题,按点击量排序。花呗的个性化帮助列表的页面标签(如果有)可能包含但不限于以下内容:分期、还款、退款、大商户、支付等。

b、用户产品行为

用户在查看帮助列表的前一个时间范围内,有比较重要的产品行为操作。以花呗为例,这样的行为包括单不限于:分期、还款、退款、支付、查看额度。

c、点击量

调优参数。

753795-d68c9a24ddaa0a08.png


d、你想告诉用户的是什么?

一些基本产品规则不知道可能衍生其他复杂问题,所以要“高亮显示”。

i. 问题列表应该是按照产品行为特征分类(契合用户角度);

ii. 点击量数字化,吸引用户关注(或者hot标识代替)。

(3)友好解决问题

753795-95fc5f2539ae2918.png


此部分涉及三个点:可阅读性 ,可解决性,可扩展性、解决率。


可阅读性:即答案精炼分点;重点加粗标红;图文并茂甚至支持gif,但需考虑到屏幕受限。

可解决性:答案的有效性(紧跟功能迭代);跳转到解决问题的页面。

可扩展性:相关问题和在线智能客服的入口。

解决率:提供“解决”、“未解决”两个按钮然而很少用户会点击。所以解决率可能可以参考跳转按钮解决率,进入智能客服比例。

(4)解决率、可优化程度、优化成本、优化顺序


帮助列表的解决率很难衡量;

可优化程度相对较高;优化成本较低;

性价比决定其优化顺序应当靠前。

在线智能客服

753795-e61a8b6784911de7.png


(1)入口


后期维护成本不高,在相对切断与在线人工客服的联系的前提下,或者默认隐藏在线人工客服的入口,在用户向在线智能客服提了第一个问题时才露出人工客服入口,可以适当增加入口。

(2)精准定位问题

在线智能机器人一般公司不会独立研发,而是直接购买其他公司的服务(live800、小i机器人等)。

a、语音输入

考虑到语音识别的方言口音支持能力差的问题,语音输入性价比确实不高。

b、预测输入

预测输入就是根据用户已输入的内容,匹配相关问题候选。好的预测能引导用户问得更标准,方便匹配到标准问题。

c、智能识别问题


753795-c1a0fd65463f8253.png


预测候选问题是通过每天对用户咨询问题的报告得出。预测候选问题与标准问题已经通过关键词匹配和一定人工印象。匹配到对应标准问题概率非常大。而没有预测问题过程,直接由用户输入问题匹配则匹配率不高。

(3)解决问题

此部分涉及三个点:可阅读性 ,可解决性,可扩展性、解决率。


基本同上述帮助列表的最佳优化。补充一点是,智能客服多模拟对话场景,因此文案偏轻松,但要控制篇幅(交互上可考虑折叠)

(4)解决率、可优化程度、优化成本、优化顺序


由于在线智能客服可跳转到在线人工,因此一般以拦截率作为解决率。(30%~50%)

可优化程度相对居中;优化成本较居中;


性价比决定其优化顺序应当局中。

电话自助客服

(1)入口

随电话人工客服曝光,人工客服成本高,应减少曝光。

(2)产品逻辑

a、播报菜单前,查询号码匹配账户,自动播报信息(如退款进度、物流记录)

b、简单问题直接播报方法。(查询、账户管理)

c、有一定风险、流程短问题,验证绑定手机后操作。(退款、提现等涉及钱)

(3)解决率、可优化程度、优化成本、优化顺序

解决率即拦截率(跳转到电话人工客服);

流程越长、验证约复杂,解决率约低。因此适用问题有限,优化程度低。

优化成本居中,因此优化顺序靠后。(金融产品规则复杂)

电话自助客服


(1)入口

成本最高,入口尽量少。

(2)优化重点

知识库与客服培训



753795-51cba900d7f52c40.png


(3)解决率、可优化程度、优化成本、优化顺序

解决率最高,然而可优化程度低,优化成本也非常高。优化方法依赖于客服产出(录音和客诉记录),然后客服一般不愿意将这些暴露给其他部门看,优化顺序最后。

然而,搞客服不如好好搞好产品,当然也不能闭门造车。
  收起阅读 »

环信程旭文:即时通讯云未来或将形成7大分布式入口

我今天分享的主题是Beyond IM Cloud,会讲讲IM Cloud本身和未来的思考。 广义的云通讯涉及的三个领域 我们认为在云通讯领域基本上会涉及三个方面: 第一个是在电信领域 其中包括了短信、彩信、电话:    短信、彩信分...
继续阅读 »
我今天分享的主题是Beyond IM Cloud,会讲讲IM Cloud本身和未来的思考。

广义的云通讯涉及的三个领域

我们认为在云通讯领域基本上会涉及三个方面:

第一个是在电信领域

其中包括了短信、彩信、电话:
 
  1.  短信、彩信分为C2C和B2C部分。C2C是指个人到个人的短信,B2C是企业到个人的短信。企业到个人的短信包括了短信验证码、短信通知等一些营销类的短信。
  2.  电话的C2C大家都知道,B2C包括语音验证、呼叫中心、电话回拨、电话会议以及语音通知。

 第二个是互联网IP领域

环信所处的行业叫即时通讯云,云通讯和即时通讯云有一点差别,我们认为即时通讯云在大的云通讯范畴。在互联网IP领域又分为了单向的通讯和双向的通讯,单向的更多的是推送领域,双向是在即时通讯云领域。

第三个是跨电信与互联网领域


云通讯市场的现状

1、电信领域中C2C业务下滑,B2C业务暴涨

  C2C个人到个人的短信、电话业务在下滑,但是这两年发现B2C的业务,企业到个人的短信和电话业务暴涨。我看到一个数据,每年中国短信的量是在七千个亿,之前企业占了很小一部分,到了2016年一半以上都是企业到个人的业务。

2、桌面时代的邮件验证在移动时代已不适应,短信验证、语音验证异军凸起

  企业的付费比率在增长,在中国是个百亿级的市场。Twilio更是加速了市场的发展。

3、新兴市场:IP领域的即时通讯(IM)云

  之前是没有云+即时通讯这个市场,环信2014年创造这个概念之后,随着两年的发展,基本上市场格局初定,但是市场的前景还需要去验证。现在市场当中的几个玩家,特别是中国的玩家跑在前面的都在跑马圈地,其实圈地之后的商业模式,各家都还在用不同的方式做一些探索,这些探索将会决定玩家的未来。

即时通讯的历史和即时通讯云的诞生
 
  回顾一下即时通讯的历史,我个人之前做技术做了很多年,主要是在中间件领域,这个领域从IT技术的发生开始,到2000年之后越来越火爆,但基本上消息类的中间件技术经历了很多大的发展,也衍生出了很多类的消息中间件。这里列了一大堆,是分别在不同的历史时期产生的消息类中间件,解决跨进程之间的通讯。

1472093088215.png


把这类消息中间件搬到云上,进行集中式的开发、部署、运维就叫即时通讯云。即时通讯云诞生的背景是三个因素组成的:

第一个是云计算。可以集中开发、部署、运维,社会资源更加集约,让更多的人专注在自己业务上面,不用每家研究后台的消息怎么发。

第二个是移动互联网的推动。内在的原生动力是移动端产品生命周期更短,需要快速开发、上线、试错。

第三个是长连接。做技术的人都知道,特别是在移动互联网应用上面,好多资源获取都是以HTTP的方式,服务端被动的接受客户端的请求获取资源,往往服务端很难主动推送一些资源到客户端。长连接使得客户端既可以问服务端拉取资源,服务端也可以主动推送一些资源。

即时通讯云的现状

 1、即时通讯云在国内的现状,基本上所有的厂商都是新兴厂商。国外出现的厂商并不多,比较纯的做即时通讯云的厂商像Layer。其实整个技术的发展国内是领先于国外的。

 2、即时通讯云出现之后,使得即时通讯的服务可以云化、API化,用户已无需了解云端的消息服务实现细节。不用在自己的服务器上部署,而是云端集中部署、集中运维,租用模式开启。

即时通讯云的功能和技术挑战

 即时通讯云所有的功能都是基于IP的,不是基于电信网络的。有一对一的消息(单聊),一对多消息(群聊、聊天室)。应用场景上其实不仅仅局限在社交应用上。在消息内容上,基本可以展现所有的形式,包括文字、图片、表情、语音、视频、位置、附件、支付、状态、指令等。

 当即时通讯云碰上移动互联网的时候其实会涉及到一些技术上的挑战:
 

  • 弱网络下的连接稳定性



  网络是不稳定的,一会儿进电梯,一会儿上洗手间,一会儿又在不同的基站间切换,一会是3G、4G网络,一会又是WIFI。我看到一个数据,每天手机的互联网连接在700次左右。
 

  • 流量敏感

  • 电量敏感

  • 性能敏感



  现在几家厂商包括国外的,大家极力宣称的就是体现在刚才四点上的不同,于是造成了各家市场占有率的不一样。下图列了很多,这段文字是我直接拷贝了环信创始人刘俊彦的发言,研究列举了厂商技术的差别性,它实现的好坏直接取决于用户是否长期留存在你的服务器上。

4861472093041.png


  基于即时通讯云,还有些额外的功能可以提供,比如说实时的音视频,包括一对一和一对多的,到最后衍生出多对多,再往下走发过来的消息还有一些过滤、路由、优先级、消息持久化存储这些东西。特别像消息过滤的反垃圾系统部分,比如你发QQ消息的时候,有些他认为是垃圾消息或者是黄赌毒的消息直接可以屏蔽掉,你感觉自己发出去了,其实并没有。
  经过这两年对市场的培育,截止2016年上半年,环信即时通讯云共服务了8万多家APP客户,SDK覆盖手机终端5.64亿,平台上日均发送消息量5.57亿次。环信发展到现在是除了微信,QQ之外的第三大即时通讯平台。

未来,管道or平台?

 各个即时通讯云厂商都公布了自己的数据,如果你汇总一下就知道市场的总量是多少。现在APP市场,基本上APP总量在100-200万之间,还有一些没有即时通讯的场景。市场还有些空间,但是大局初定。于是我们会思考一个问题,即时通讯云的未来是什么,是一个管道提供商还是平台提供商。就像运营商在互联网3G、4G时代一样,定位成了管道提供商。同样在即时通讯云这个范畴内我们未来是什么样的,各家都在不同的地方做一些探索。

 对于环信或者其他厂商来说,通过不同的APP接入即时通讯云,会形成分布式的流量入口。一旦谈到入口的时候,其实就有很多想象的空间,当然各家并没有太多的突破。下面是我个人对未来的一个预测,当一个分布式的入口形成之后,我分成了七大类的入口,这里面每个领域都有后续的发展:

 1、 沟通的入口

  我最近看到Facebook把网页的聊天都集中在Facebook message上,背后打造了1万多个机器人。在未来的聊天当中你可能无法分辨和你聊天的是人还是狗,还是机器人,或者是一个影子人,就是另外一个你自己。同时这会连接更多的服务,如果你把模型抽象的话,你把所有的物体拟人化了之后,其实物体是可以开口说话的,你告诉冰箱赶紧把温度调低一点,然后温度降低了,其实你就是用自然语言的方式在和你的设备沟通。

 2、技术的入口

 这里指技术能力,比方在这个模型下面你可以接入更多的技术进来。例如图像的识别技术,怎么识别黄赌毒、政治,或者说情绪的识别。环信现在有了文字类的情绪识别,通过客户与商户之间的聊天实现客户满意度的反馈。技术入口还包含直播,甚至更多。

 3、 流量的入口

  即时通讯是一个双向的通讯,意味着我们可以以交互式的方式进行推介,它的商业价值在于广告的模式。这是一种新型的广告模式,打破了以前的广告联盟用banner或信息流做广告的方式,我们的广告是一种交互式的、及时反馈式的模式。

 4、内容的入口

  内容的入口包括表情,最近我们也和做表情的公司合作,他们通过即时通讯云分发,把各种各样的表情的IP分发。我们可以大胆想象除了表情,也可以成为游戏的分发入口。

5、 数据的入口

 这里面每一个聊天的用户其实是关联到他的ID以及他聊天的内容,他的位置,一些其他的操作,其实这里面本身是大数据的系统。

6、支付的入口

  环信在做一些尝试,比如说红包,其实是支付的入口,像微信一样,发红包帐户里面就有特别多的钱,这个钱就需要流转,流转就会延伸其他的功能,包括金融、电商方面的东西。

7、连接的入口

  说到底即时通讯是连接的功能,我们是连接人与人,未来是连接一切,基本上都可以通过即时通讯云来完成。
  收起阅读 »

开源一个结合环信的iOS聊天框架:ZYChat-拥有很好的扩展性和流畅性,无与比拟的体验

 ZYChat 是一个实战项目的聊天UI框架,针对高频次高速率刷新最近会话列表和实际对话页面做了缓冲优化,经过测试会话使用的性能和体验非常稳定。UI框架参考MVVM思想设计,并采用自身总结的一些常用设计模式,可以帮助你快速实现搭建多样式的列表页面,代码复用率可...
继续阅读 »
 ZYChat
  • 是一个实战项目的聊天UI框架,针对高频次高速率刷新最近会话列表和实际对话页面做了缓冲优化,经过测试会话使用的性能和体验非常稳定。
  • UI框架参考MVVM思想设计,并采用自身总结的一些常用设计模式,可以帮助你快速实现搭建多样式的列表页面,代码复用率可以有稳定的提升。
  • ZYChat-EaseMob 是基于环信的UI项目应用实战,将ZYChat类库和实际项目使用结合。
  • 消息类型目前扩展至: 文本,语音,音乐,网页,鲜花特效,短视频
  • 想更深入的探讨学习请加QQ群:219357847
 项目运行截图

s_show.png

项目代码结构图

c_show.png

 项目新增功能​
  • 直接在聊天界面播放音乐
  • 新增送花功能
 项目核心模块注释ChatDetail 具体聊天*Resource 用到的图片 *UITableViewCell 聊天所有的cell使用
*Base      聊天内容基类Cell,负责分发类型*ChatCell  聊天内容Cell,    负责处理聊天类型的消息展示  *GJGCChatFriendBaseCell , 基础内容Cell,包含消息显示的:头像,昵称(根据会话类型显示隐藏),气泡,状态  *GJGCChatFriendTextMessageCell, 文本内容显示  *GJGCChatFriendImageMessageCell, 图片内容显示  *GJGCChatFriendAudioMessageCell, 语音内容显示  *GJGCChatFriendTimeCell, 时间块显示*SystemNoti 系统消息Cell,   负责展示系统消息
*View 聊天时候用到的自定义视图和风格控制
*GJGCCommonFontColorStyle 全局风格控制*GJGCCommonHeadView 全局头像显示*GJGCChatContentEmojiParser 文本解析成图文内容*GJGCRefreshHeader 下拉刷新*GJGCRefreshFooter 上拉加载*GJGCLoadingStatusHUD 加载HUD,基类初始化,全局可用
*ViewController
*Base 基础类,负责分发 系统消息或者对话消息类型*MessageExtend 消息类型扩展,基于环信的消息ext字段来扩展消息,以支持gif等更多类型消息*Friend 单聊会话,群聊本质上也是1v1会话,只是有一些特殊逻辑需要单独处理,为了避免庞大的DataManager和ViewController,需要分开*GifLoadManager 本地Gif包管理*Group 群聊管理*SystemAssist 系统消息管理
RecentChat 最近会话 *GJGCRecentChatViewController 视图管理层 *GJGCRecentChatCell 单行会话展示 *GJGCRecentChatModel 内容模型 *GJGCRecentChatDataManager 模型管理层 *GJGCRecentChatStyle 风格管理 *GJGCRecentChatTitleView 服务器连接状态展示 Square 广场 *CreateGroup 创建群组 *PublicGroup 广场群组列表 GroupCommonUI 群组资料和个人资料展示 *GJGCGroupInformationViewController 群组资料展示 *GJGCPersonInformationViewController 个人资料展示 如何扩展消息类型 扩展消息类型需要做三件事情[list=1]
  • 继承GJGCChatFriendBaseCell 来扩展对话消息
  • GJGCChatFriendConstans 在关系绑定中将内容类型和新扩展的消息类型绑定
  • 在创建内容模型的时候,将内容类型设置为新创建的内容类型即可绑定
  •  例子 *首先创建内容展示的样子,GJGCCHatFriendGifCell *在内容模型中定义 gifLocalId , 在 GJGCChatFriendConstans 中定义内容类型 GJGCChatFriendContentTypeGif
    • 在GJGCChatFriendConstans 实现 ContentType 和 Cell的绑定 *在创建GJGCChatFriendContentModel的时候将内容设置为GJGCChatFriendContentTypeGif就可以实现加载对应的gifCell

     如何基于环信的消息扩展字段配合GJGCMessageExtendModel实现扩展消息类型的目的
     
    *userInfo : 用户信息,始终从消息中带过去,根据App情况,也可以不用传过去节省流量,这里我们是没有服务器,所以传过去

    *data: 扩展消息的内容,看一下我们定义的一些常量key,对应的我们可以把需要扩展的内容填充

    *message_type: 扩展的消息类型,类似常规时候的 text,gif,voice这些类型的定义方式

    *is_message_extend: 是否是消息扩展,当不是扩展消息的时候,我们只读用户扩展信息userInfo就可以了

    *display_text: 扩展消息应该展示的文本,如果对方源码不支持此扩展消息,相应这个文本会有变化

    *is_support_display: 根据双方本地的内容协议支持来确定,是否支持正常显示这条扩展消息
     
    工具类库注释 (Dependcy)
     
    *Base64 用于压缩编码字符串,在群信息压缩的环节使用

    *EaseMob 环信聊天服务SDK

    *fmdb 最好用的Sqlite,在上面做了一层简单的封装,支持对象化CURD操作

    *GJCFCachePathMananger 应用层全局的缓存目录管理

    *GJCUProgressView 自定义的一个进度展示

    *SDWebImage 最好用的图片缓存库,目前基本全部使用此类库来加载图片

    *JSONModel 实测使用最稳定的Json转模型,很好的自定义扩展,在项目中Json与模型转化和生成都运用到了

    *GJCURoundCornerView 取自另一个作者的一个控件,可以自定义四个角的圆角和试图的bord情况

    *GJCUCapture 根据Apple的AVCapture Demo 自定义的一个拍照的组件,母的是解决iOS7.0 iPhone4,5下的拍照黑屏问题

    *GJGCChatInputPnael 项目中对话使用的聊天输入控制面板

    *AFNetworking 最好用的网络库

    *AudioCoder 语音编码库,公开的

    *DownloadManager 任务化下载组件

    *FileUploadManager 任务化上传组件

    *FLAnimateImage 用于Gif表情展示

    *GJCFAssetsPicker 自定义图片选择

    *GJCFAuidoManager 播放和录音

    *GJCFCoreText 自定义图文混排组件

    *GJCFUitils 常用工具函数

    *GJCUAsyncImageView 自定义异步图片加载,不是非常稳定,目前底层全部改成SDWebImage加载

    *GJCUImageBrowase 大图浏览组件
     
    为什么做这个聊天室?

    大家都在做App,可能各种需求,各种蛋疼的坑,老板说,我们就是要有个IM消息服务,但是还得能自己定义,那么OK,我们的目标来了,谁来写呢,再写一遍,很麻烦,ZYChat经过对话详情页疯狂对发消息测试,没有任何问题,所以,我们要得是一个真实的对话聊天项目,并且它是开源的,大家都可以来做一些自己想做的扩展,我们需要关心的就是,我们要做的是什么,如何使用它,节省我们的时间。所以,ZYChat-EaseMob就诞生了。
     
    帮助我改进
     
    我知道这个代码可能在很多大神面前都是不值得一提的东西,但是,我希望帮助到它能够帮助到得人就可以了。如果还有需要帮助咨询的,可以给我发邮件1003081775@qq.com,如果感兴趣可以联系我加入一起开发完善此项目,谢谢大家支持,更多需要详细解答问题的请加QQ群:219357847。
     
    github下载地址:https://github.com/zyprosoft/ZYChat 收起阅读 »

    android开发 时间日期选择详解

       安卓开发过程中难免会碰到需要选择日期时间的情况,由于大部分android初级教程都没教怎么选择时间,初学者碰到这种难免会有些不知所措,难道要让用户自己输入日期时间?先不说用户体验不好,处理用户输入各式各样的日期格式也要花好大一番功夫。   日...
    继续阅读 »
       安卓开发过程中难免会碰到需要选择日期时间的情况,由于大部分android初级教程都没教怎么选择时间,初学者碰到这种难免会有些不知所措,难道要让用户自己输入日期时间?先不说用户体验不好,处理用户输入各式各样的日期格式也要花好大一番功夫。
     



    2704468-d559f9313bdacf62.jpg


    日期还要自己输入?


      所以当然不可能让用户自己输入日期时间,笔者收集整理了一些资料,总结了一下如何实现android选择时间的功能,方便后来者参考

    android 6.0 中的运行效果



    2704468-f298551b9a240376.png


    效果图




    2704468-13e78e9a8fa953a2.png


    效果图


    TimePickerDialog和DatePickerDialog介绍

    系统封装好了两个类可以供我们直接调用,TimepickerDialog用于选择时间,DatePickerDialog用于选择日期。

    TimePikckerDialog的构造方法
    public TimePickerDialog(Context context, OnTimeSetListener listener, int hourOfDay, int minute, boolean is24HourView)

    • 第一个参数接受一个context信息
    • 第二个参数为当选择时间完成后执行的回调接口
    • 第三个参数和第四个参数为初始化的时间
    • 第四个参数选择true代表24小时制,false代表12小时制
     DatePickerDialog构造方法
    public DatePickerDialog(Context context, OnDateSetListener callBack, int year, int monthOfYear, int dayOfMonth)
    • 第一个参数接受context信息
    • 第二个参数为日期选择完成后的回掉接口
    • 最后三个参数分别为初始化的年月日
     可以看出两者的构造方法基本相差不多,由于两者都是继承自AlertDialog,所以得到两者对象后只要调用它们的show()方法即可将选择框弹出。具体实现有两种实现方式,一种是直接在Activity中使用,还有一种是通过FragmentDialog使用。直接在Activity中使用比较简单,不过代码会比较乱,通过FragmentDialog管理的使用方式会比较优雅,而且便于管理。直接在Activity中使用布局文件,里面就一个TextView用于显示所选时间
    <?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context="com.example.testdemo.TestActivity">    <TextView        android:layout_centerInParent="true"        android:textSize="20sp"        android:id="@+id/time_text"        android:text="点此选择时间"        android:layout_width="wrap_content"        android:layout_height="wrap_content" /></RelativeLayout>
    Activity文件:
    public class TestActivity extends AppCompatActivity {    private TextView timeText;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_test);        timeText = (TextView) findViewById(R.id.time_text);        //为TextView设置点击事件        timeText.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                //将timeText传入用于显示所选择的时间                showDialogPick((TextView) v);            }        });    }    //将两个选择时间的dialog放在该函数中    private void showDialogPick(final TextView timeText) {        final StringBuffer time = new StringBuffer();        //获取Calendar对象,用于获取当前时间        final Calendar calendar = Calendar.getInstance();        int year = calendar.get(Calendar.YEAR);        int month = calendar.get(Calendar.MONTH);        int day = calendar.get(Calendar.DAY_OF_MONTH);        int hour = calendar.get(Calendar.HOUR_OF_DAY);        int minute = calendar.get(Calendar.MINUTE);        //实例化TimePickerDialog对象        final TimePickerDialog timePickerDialog = new TimePickerDialog(TestActivity.this, new TimePickerDialog.OnTimeSetListener() {            //选择完时间后会调用该回调函数            @Override            public void onTimeSet(TimePicker view, int hourOfDay, int minute) {                time.append(" "  + hourOfDay + ":" + minute);                //设置TextView显示最终选择的时间                timeText.setText(time);            }        }, hour, minute, true);        //实例化DatePickerDialog对象        DatePickerDialog datePickerDialog = new DatePickerDialog(TestActivity.this, new DatePickerDialog.OnDateSetListener() {            //选择完日期后会调用该回调函数            @Override            public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {                //因为monthOfYear会比实际月份少一月所以这边要加1                time.append(year + "-" + (monthOfYear+1) + "-" + dayOfMonth);                //选择完日期后弹出选择时间对话框                timePickerDialog.show();            }        }, year, month, day);        //弹出选择日期对话框        datePickerDialog.show();    }}
    到此,点击运行就可以看效果了:)通过FragmentDialog使用为什么要用DialogFragment
    • 用DialogFragment管理对话框是官方推介的使用方式。
    • 使用DialogFragment管理对话框也方便代码的重用。
    • 如果你想了解更多可以看看详细解读DialogFragment,里面讲的很详细。


    通过FragmentDialog实现步骤

    DatePickerFragment类:
    public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener{
    private String date;
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
    //得到Calendar类实例,用于获取当前时间
    Calendar calendar = Calendar.getInstance();
    int year = calendar.get(Calendar.YEAR);
    int month = calendar.get(Calendar.MONTH);
    int day = calendar.get(Calendar.DAY_OF_MONTH);
    //返回DatePickerDialog对象
    //因为实现了OnDateSetListener接口,所以第二个参数直接传入this
    return new DatePickerDialog(getActivity(), this, year, month, day);
    }

    //实现OnDateSetListener接口的onDateSet()方法
    @Override
    public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
    //这样子写就将选择时间的fragment和选择日期的fragment完全绑定在一起
    //使用的时候只需直接调用DatePickerFragment的show()方法
    //即可选择完日期后选择时间
    TimePickerFragment timePicker = new TimePickerFragment();
    timePicker.show(getFragmentManager(), "time_picker");
    //将用户选择的日期传到TimePickerFragment
    date = year + "年" + (monthOfYear+1) + "月" + dayOfMonth + "日";
    timePicker.setTime(date);
    }
    }
    TimePickerFragment类:
    //实现OnTimeSetListener接口
    public class TimePickerFragment extends DialogFragment implements TimePickerDialog.OnTimeSetListener{
    private String time = "";
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
    //新建日历类用于获取当前时间
    Calendar calendar = Calendar.getInstance();
    int hour = calendar.get(Calendar.HOUR_OF_DAY);
    int minute = calendar.get(Calendar.MINUTE);
    //返回TimePickerDialog对象
    //因为实现了OnTimeSetListener接口,所以第二个参数直接传入this
    return new TimePickerDialog(getActivity(), this, hour, minute, true);
    }

    //实现OnTimeSetListener的onTimeSet方法
    @Override
    public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
    //判断activity是否是DataCallBack的一个实例
    if(getActivity() instanceof DataCallBack){
    //将activity强转为DataCallBack
    DataCallBack dataCallBack = (DataCallBack) getActivity();
    time = time + hourOfDay + "点" + minute + "分";
    //调用activity的getData方法将数据传回activity显示
    dataCallBack.getData(time);
    }
    }

    public void setTime(String date){
    time += date;
    }

    }
    Activity的布局文件,只有一个TextView用于显示时间
    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.testdemo.TestActivityActivity">

    <TextView
    android:id="@+id/time_text"
    android:layout_centerInParent="true"
    android:text="点此选择时间"
    android:textSize="20sp"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

    </RelativeLayout>
    Activity文件:
    //实现DataCallBack接口,实现与Fragment的通信
    public class TestActivityActivity extends AppCompatActivity implements DataCallBack{

    TextView timeText;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_test2);
    timeText = (TextView) findViewById(R.id.time_text);
    //为timeText设置点击事件
    timeText.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
    //实例化对象
    DatePickerFragment datePickerFragment = new DatePickerFragment();
    //调用show方法弹出对话框
    // 第一个参数为FragmentManager对象
    // 第二个为调用该方法的fragment的标签
    datePickerFragment.show(getFragmentManager(), "date_picker");
    }
    });
    }


    //实现DataCallBack的getData方法
    @Override
    public void getData(String data) {
    //data即为fragment调用该函数传回的日期时间
    timeText.setText(data);
    }
    }
    由于TimePickerFragment对话框是在DatePickerFragment类里面启动的,所以这样写只能日期和时间都选择,如果要单独选择日期或者时间,只需要重写onTimeSet()或者onDateSet()方法即可

    兼容性问题

    不同的android版本显示的效果不同,在android6.0效果很好,不过在一些低版本android(如4.0,笔者没有每个版本都测试)会出现调用两次回掉函数的情况,导致选择两次时间。解决的办法有很多,只要保证回调函数里面的逻辑只执行一次就可以。这里提供一种比较通用的方法。

    重写TimePickerDialog和DatePickerDialog的onStop()方法

    直接在Activity中使用的重写方法
    final TimePickerDialog timePickerDialog = new TimePickerDialog(TestActivity.this, new TimePickerDialog.OnTimeSetListener() {
    //选择完时间后会调用该回调函数
    @Override
    public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
    time.append(" " + hourOfDay + ":" + minute);
    //设置TextView显示最终选择的时间
    timeText.setText(time);
    }
    }, hour, minute, true){
    // 重写onStop()
    @Override
    protected void onStop() {

    }
    };
    //实例化DatePickerDialog对象
    DatePickerDialog datePickerDialog = new DatePickerDialog(TestActivity.this, new DatePickerDialog.OnDateSetListener() {
    //选择完日期后会调用该回调函数
    @Override
    public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
    //因为monthOfYear会比实际月份少一月所以这边要加1
    time.append(year + "-" + (monthOfYear+1) + "-" + dayOfMonth);
    //选择完日期后弹出选择时间对话框
    timePickerDialog.show();
    }
    }, year, month, day){
    //重写onstop
    @Override
    protected void onStop() {
    }
    };
    上面的写法看起来会比较乱,也可以另外新建一个类继承TimePickerDialog或者DatePickerDialog然后重写onStop()方法

    通过FragmentDialog使用的重写方式

    只需在onCreateDialog()方法里面重写即可,下面的代码会比较清晰
    return new DatePickerDialog(getActivity(), this, year, month, day){
    // 重写onStop
    @Override
    protected void onStop() {
    }
    };
     return new TimePickerDialog(getActivity(), this, hour, minute, true){
    //重写onStop
    @Override
    protected void onStop() {
    }
    };
    笔者水平有限,但是保证以上代码都是亲手实现过一遍的。如果有什么不足之处欢迎大家指出^_^。 收起阅读 »

    环信移动客服助力雪球与聪明的投资者同行

      雪球于2011年开始上线运营,是一家面向投资者的老牌明星社交网络公司。为投资者提供跨市场、跨品种的数据查询、新闻订阅和互动交流服务,目前已覆盖A股、港股、美股市场,旗下拥有手机炒股应用及雪球网站www.xueqiu.com 随着资本的热捧,雪球已经逐渐发展...
    继续阅读 »
      雪球于2011年开始上线运营,是一家面向投资者的老牌明星社交网络公司。为投资者提供跨市场、跨品种的数据查询、新闻订阅和互动交流服务,目前已覆盖A股、港股、美股市场,旗下拥有手机炒股应用及雪球网站www.xueqiu.com 随着资本的热捧,雪球已经逐渐发展成为一个面向投资者的垂直社区,聚拢用户人数已经超过100万。



    SFZQ_NK__RCZA2N_8JF6@P.png



      雪球的创始人方三文认为,交易、数据和沟通,是投资领域不可或缺的。理性成功的投资需要以海量交易数据、资讯和逻辑推演能力为基础,而在数据和经验之上还有沟通,雪球正是试图通过移动互联网社交产品的形式,一方面汇聚信息,另一方面通过投资者群体的交流,消除投资的死角和盲区。雪球已经确立自己在投资者交流这个服务市场上的地位,当交流与交易融合的时候,社区的价值将会爆发。在这样一个用户体验为王的移动互联网环境下,环信提供的全媒体智能客服在雪球不断壮大中发挥了重要价值。

      雪球先后获得三轮融资,最近的一次是2014年9月获得由人人和晨兴资本合投的4,000万美元C轮融资,投资人很看好雪球在互联网金融领域的发展前景和潜力,相信社区产品会产生巨大的价值。为了提高社区产品的活性,雪球部署了即时通讯云产品提供了聊天、群组等服务,同时部署了环信移动客服解决私募等理财产品的咨询、开户相关客服问题。

    雪球客服需求分析:传统呼叫中心服务方式单一,多媒体客服提供更佳客服体验

      对于雪球来说,历经多年所打造的专业投资者社区,是最有价值的资源,也是雪球的投资方最为看重的优势。如何充分利用好这个优势,影响更多的投资者参与进来,进而深度挖掘社区的价值,打造产品闭环,是雪球迫切需要考虑的问题。

      自成立之初,雪球即不遗余力地推动移动化应用。2012年移动端APP上线,支持iOS和Android平台。采用自主研发的即时通讯云为底层平台,雪球快速实现了包括即时消息聊天、群组互动沟通的一组特色移动功能上线,收到了良好的效果,用户兴趣和平台粘性大大增强。

      随着业务的开展,雪球的业务开始向投资入口处延伸,私募工场、交易开户等模式开通,客服的需求也随之而来。主要的客服问题包括私募等理财产品的咨询、开户相关的问题等。 

      开始雪球采用400呼叫座席的方式应对客户咨询,但是实际效果并不理想。一方面是客服座席占用时间长,单个用户接待时间经常超过10分钟;另一方面由于投资领域的专业性强,数据庞杂而不直观,客服人员即使尽力描述,有时也很难完整呈现出方案的全貌,以致沟通效果大打折扣。

    解决方案:部署环信移动客服妥妥的

      雪球所面临的问题,主要在于服务效果和接待效率。从服务效果的角度,语音沟通方式强在实时专享,差在直观达意。如果能采用包含图片、文字的富媒体消息,就可以很好地解决问题。在知识库的配合下,客服人员能够从容应对,在理解客户问题基础上有条不紊地解答,并在过程中主动向客户推送文字/图片消息、文件等,大大增强沟通效果。

      同时,交互式的聊天方式下,一个客服人员可以同时接待几个到十几个客户,多个客户的对话互不影响。虽然实时性稍差,但从服务效率的角度却是大大提高了客服的工作效率,而且也更符合当今移动互联潮流以及年轻用户碎片化的使用习惯。

      环信是国内全媒体智能云客服市场领导者,环信的全媒体客服产品完美支持智能设备APP内嵌的客服应用场景,并同时能接入包括网页端、微信、微博等消息渠道,通过一个客服账号可以轻松区分和处理来自于不同设备、不同渠道、不同方式的客户咨询,实现全渠道、全媒体客服的完美合一。客服工作台界面简洁,功能完善而实用。



    图片1.png


    图1. 环信全媒体客服平台


      雪球此前已经成功部署了自有即时通讯云产品,所以在很短的时间内,雪球APP就实现了客服功能的集成和上线,无需跳出APP,普通用户即可使用APP内置客服获得咨询服务,通过配合集成的金融领域知识库,客服人员可以用富媒体消息等功能图文并茂的方式解答客户问题, 极大提升了客户体验。



    图片2.png


    图2. 雪球APP嵌入客服功能


    环信的产品价值

      作为以专业投资社区为主要产品形态的雪球而言,优质用户的兴趣、使用频度及留存率至关重要。随着增值产品的逐步上线,客服对于雪球的意义不言而喻。而随着引入环信的全媒体智能SaaS客服平台,雪球的产品思路也逐渐清晰起来:
    1. 从发散的消息群组、论坛、圈子关注等形态,逐步整合到集群化、专业化的投资服务,平台价值初步显现;
    2. 客服即营销,从成本中心向营销、盈利中心转化。雪球社区的长期不懈积累,打磨出了非常好的投资者信任关系,因此叠加优质的金融投资产品,以客服支撑作为辅助,将是完美的增值组合;
    3. 顺应移动互联的潮流,客服工作移动化为先。首先做好移动端的客服,在完善用户体验的基础上再逐步扩展到网页等其他渠道,最终打通各个客服渠道。

      截至目前,环信移动客服在雪球平台上运行良好,同时也为雪球带来了可观的商业回报。我们的目标是帮助这只雪球越“滚”越大,为此环信新成立的客户成功团队将为企业客户提供更优质服务,同时更愿意帮助整个互联网金融行业用户不断实现自我超越,创造新价值。
     
      关于环信:环信移动客服——全媒体智能云客服倡领者,于2016年荣膺“Gartner 2016 Cool Vendor”。环信支持全媒体接入,包括网页在线客服、社交媒体客服(微博、微信)、APP内置客服和呼叫中心等多种渠道均可一键接入。基于环信业界领先的IM长连接技术保证消息必达,并通过智能客服机器人技术降低人工客服工作量。同时,基于人工智能和大数据挖掘的客户旅程透析产品"环信客户声音"能够帮助企业优化运营,提高跨渠道客服体验。 收起阅读 »

    Android V2.3.1release,支持华为推送,红包功能深度优化

    版本:V2.3.1 2016-8-19 【优化】sdk优化1、支持在华为设备上使用华为推送; 2、减少群组批量加人的耗时; 3、修复发送消息时可能会导致memory leak的bug,修复此bug除了更新sdk,还需在设置消息状态callbac...
    继续阅读 »
    版本:V2.3.1 2016-8-19

    10658PICvNs_1024.jpg



    【优化】sdk优化
    1、支持在华为设备上使用华为推送;

    2、减少群组批量加人的耗时;

    3、修复发送消息时可能会导致memory leak的bug,修复此bug除了更新sdk,还需在设置消息状态callback时,加上if(message.status != Status.SUCCESS && message.status != Status.FAIL)这个判断,如果依赖easeui库,使用最新的easeui就行;

    4、easeui中修复好友nick可能解析不对,导致crash的问题
     
     【优化】红包若干优化和修改:
    1. 修复Webview潜在漏洞;

    2. 修复支付密码错误的问题;

    3. 修复弱网状态下零钱页crash的问题;

    4. 修复发红包时,零钱余额充足,不优先展示零钱的问题;

    5. 增加群红包个数、单个红包限额、充值限额、商户名等配置。
     
    版本历史:Android sdk更新日志
    下载地址:sdk下载
     
    使用过程中有遇到任何问题、反馈建议欢迎直接评论留言,我们将第一时间回复! 收起阅读 »

    云通讯市场的现状和发展趋势探讨

    6月底,美国云通讯平台提供商Twilio在纽约股票交易所上市,融资1.5亿美元,上市首日涨幅超过90%,市值至今已逼近30亿美元。Twilio的成功上市,也给国内的云通讯从业者打了一剂强心针。 所谓的云通讯服务包含了IM聊天、语音电话、呼叫中心、在线客服、短信...
    继续阅读 »

    a7cec8c1146ccc54cb8c9fa328e2ac8f.png




    30142414504794995.jpg


    6月底,美国云通讯平台提供商Twilio在纽约股票交易所上市,融资1.5亿美元,上市首日涨幅超过90%,市值至今已逼近30亿美元。Twilio的成功上市,也给国内的云通讯从业者打了一剂强心针。
    所谓的云通讯服务包含了IM聊天、语音电话、呼叫中心、在线客服、短信验证、视频流传输等能力,为开发者和企业构建具有通讯能力的应用提供了极大的便利。

    据相关数据,2015年国内云通讯市场的规模为4.53亿人民币,今年有望达到8.12亿,两年后达到24亿元,几乎以翻番的速度高速增长。企业级的云通讯服务,作为最通用、最活跃、最刚性的需求,极有可能成为中国企业服务的入口级应用。在这样一个充满想象空间的市场上,创业者和巨头都在涌入。

    那么面对巨头,创业者该如何布局?在业务类型同质化的情况下,如何拓展服务,进一步提升盈利能力?未来,云通讯市场又将呈现哪些新的发展趋势?

    本期沙龙,我们将邀请云通讯领域的创业者和投资人,一起来探讨这些话题。

    30352414505305025.jpg




    30252419820718110.jpg




    30322414505625043_(1).jpg


    时间:2016年8月20日(周六)下午14:00-17:30

    地点:北京 车库咖啡

    议程:

    13:30-14:00 签到入场

    14:00-14:30 活动介绍及开场

    14:30-16:20 嘉宾主题分享

    16:20-17:30 圆桌互动
     
    报名地址:点击报名 收起阅读 »

    【公告】历史聊天记录保存时长变动

    各位用户好:     通过对拉取历史聊天记录的REST接口(调用形式为: /{org_name}/{app_name}/atmessages)的调用进行分析,目前99.5%以上的调用都是拉取的3天以内的历史记录。本着节约资源成本,为用户提供更有有效、稳定的服...
    继续阅读 »


    27r58PICYkT.jpg



    各位用户好:

        通过对拉取历史聊天记录的REST接口(调用形式为: /{org_name}/{app_name}/atmessages)的调用进行分析,目前99.5%以上的调用都是拉取的3天以内的历史记录。本着节约资源成本,为用户提供更有有效、稳定的服务的标准。现计划于8.24日将免费存储历史记录的时间期限从现有的14天变更为3天(购买了历史记录延长存储服务的用户不受影响)。
        如您的业务中目前有拉取3天前历史记录的操作,请提前做好程序脚本的变更准备工作,如给您带来不便,深表歉意。
        如您在使用中存在其他问题可以通过官网或者您的大客户经理向我们反馈。
      收起阅读 »