注册
环信即时通讯云

环信即时通讯云

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

环信开发文档

环信FAQ

环信FAQ

集成常见问题及答案
RTE开发者社区

RTE开发者社区

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

技术讨论区

技术交流、答疑
资源下载

资源下载

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

iOS Library

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

Android Library

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

类似ChatService这样的服务很容易会被系统或者杀毒软件给kill掉,在安卓sdk中环信是怎么让ChatService不被kill掉的?

在sdk里环信是加了个守护进程,在应用中也可以在应用设置里允许后台运行和保持后台连接。 可以看下最新版的demo的配置文件 最新demo下载http://www.easemob.com/downloads
在sdk里环信是加了个守护进程,在应用中也可以在应用设置里允许后台运行和保持后台连接。
可以看下最新版的demo的配置文件
最新demo下载http://www.easemob.com/downloads

环信的服务器用的是哪个公司的服务器?如果发生故障,有没有备用方案,会不会影响环信的使用?

目前环信的服务器集群布在阿里云的多个不同机房,青云和亚马逊的AWS,如果阿里云的某个机房出现故障不会影响环信的全部服务,与此同时环信也在推进同城双活的灾备方案,进一步提高可用性。
目前环信的服务器集群布在阿里云的多个不同机房,青云和亚马逊的AWS,如果阿里云的某个机房出现故障不会影响环信的全部服务,与此同时环信也在推进同城双活的灾备方案,进一步提高可用性。

iOS 文件在发送之后, 对方的接收到消息后, 对应的文件local路径是指什么? 这个时候文件是否已经存到对方沙盒内了吗?

附件类型的消息,需要下载之后才能取到localPath。例如语音消息,SDK会自动下载。localPath就是文件在沙盒中的存储路径。图片消息,对方接受到的是缩略图,原件需要点击查看,才能下载原件。
附件类型的消息,需要下载之后才能取到localPath。例如语音消息,SDK会自动下载。localPath就是文件在沙盒中的存储路径。图片消息,对方接受到的是缩略图,原件需要点击查看,才能下载原件。

客服如何自己修改自己的昵称、密码?

在个人设置里面修改账号和密码。
在个人设置里面修改账号和密码。

语音的录制与传输都是什么格式的?

ios与android传输过程中都是amr,但是iOS播放和录制的时候,是wav。
ios与android传输过程中都是amr,但是iOS播放和录制的时候,是wav。

无法收到好友请求,怎么办?

请确定接受好友请求的类是否初始化,并声明了IChatManagerDelegate,实现了注册回调和回调方法。
请确定接受好友请求的类是否初始化,并声明了IChatManagerDelegate,实现了注册回调和回调方法。

在线状态

环信不关注用户的在线状态,即使用户不在线,当有人给他发消息时,一样会收到推送。
环信不关注用户的在线状态,即使用户不在线,当有人给他发消息时,一样会收到推送。

客服的接入人数已满的时候,新会话怎么办?

如果其他客服坐席未满,可以分配给其他坐席。如果全部都满,进入排队列表。
如果其他客服坐席未满,可以分配给其他坐席。如果全部都满,进入排队列表。

web im https需要什么特别的证书吗? 环信用的https证书是startcom么?客户https访问证书不安全被拒绝无法连接到环信,嵌入在网页里的,而且是ajax请求,没法点击信任。

环信用的是StartCom的证书,用https的方式连接时候在链接地址栏上都会有个额外的标记,IE浏览器上是个锁型图标在地址栏右端,Chrome在左端,点那个图标就能查看证书内容,可以让用户在那边看下证书详情,截图发过来核对一下和环信这边的证书是不是一致的,如...
继续阅读 »
环信用的是StartCom的证书,用https的方式连接时候在链接地址栏上都会有个额外的标记,IE浏览器上是个锁型图标在地址栏右端,Chrome在左端,点那个图标就能查看证书内容,可以让用户在那边看下证书详情,截图发过来核对一下和环信这边的证书是不是一致的,如果不一致的话有可能是被导向了钓鱼网站,一般情况下连接环信的https页面不应该有证书问题。 收起阅读 »

有没有耗电、流量方面的数据?

环信的Android端SDK在后台静默24小时消耗的流量是2.7K。
环信的Android端SDK在后台静默24小时消耗的流量是2.7K。

android上的离线推送,是否假离线,是否能实现实时离线推送

测试手顺和现象:1、使用环信Demo,首先登陆环信,在环信开启和应用程序隐藏后台(pause)的情况下,消息都能实时的推送过来,但是当程序关闭后,在一段时间内(时间不固定,有时15分钟到30分钟)推送消息没有响应,过了这段时间,又开始能够实时接收推送消息。 2...
继续阅读 »
测试手顺和现象:1、使用环信Demo,首先登陆环信,在环信开启和应用程序隐藏后台(pause)的情况下,消息都能实时的推送过来,但是当程序关闭后,在一段时间内(时间不固定,有时15分钟到30分钟)推送消息没有响应,过了这段时间,又开始能够实时接收推送消息。
2、在程序关闭后,查看设置里正在运行的应用,可以看到环信Demo的EMChatService进程依然存活,但是一点响应也没有。
 
问题:
1、正常来说环信依靠EMChatService在后台持续运行,保持对推送消息的接收,为什么能看到这个Service在存活,但是消息无法接收?
2、为什么环信Demo退出后一段时间内无法接收推送,过了一段时间又回复了?好像是EMChatService“假死”了?
3、能否通过对应用程序的修改或配置,实现真正的实时离线推送? 收起阅读 »

直接通过app自己的服务器去登录环信,登录成功之后不能聊天怎么办?

必须通过客户端sdk登录才能聊天,客户端跟服务器之间没有长连接不能聊天。
必须通过客户端sdk登录才能聊天,客户端跟服务器之间没有长连接不能聊天。

官网下载webIM SDK,没有v1.0.7 版本?

1.0.7版本依赖于服务端的一个功能升级,所以还没有正式发布。
1.0.7版本依赖于服务端的一个功能升级,所以还没有正式发布。

项目里面不需要环信SDK的太多功能,只是想要聊天和好友功能,其他都不用,那SDK一定要总是跟着更新么?

不需要,您只要选一个您认为稳定的版本就可以了,我们的服务器会兼容各个版本的sdk。
不需要,您只要选一个您认为稳定的版本就可以了,我们的服务器会兼容各个版本的sdk。

待接入中的会话怎么接?

进入待接列表,点击接入,接起会话;结束当前的会话或者调整自己的“接待人数“值,当自己当前的会话数小于设置的“接待人数”时,系统会自动把会话分配给自己。
进入待接列表,点击接入,接起会话;结束当前的会话或者调整自己的“接待人数“值,当自己当前的会话数小于设置的“接待人数”时,系统会自动把会话分配给自己。

web端私信为什么不建议用webIM,而是调用rest接口发送,用轮询是否会对后期服务器造成压力呢?

这种方案最简单。但不会特别的实时。所以适合实时要求不是特别高的私信,如果用webim改,会非常实时。但工作量大。webim很复杂,用的库也多,ui也复杂。环信的webim是开源的,但工程师要把这些代码读懂,也需要些时间的。用轮询是否会对后期服务器造成压力呢 -...
继续阅读 »
这种方案最简单。但不会特别的实时。所以适合实时要求不是特别高的私信,如果用webim改,会非常实时。但工作量大。webim很复杂,用的库也多,ui也复杂。环信的webim是开源的,但工程师要把这些代码读懂,也需要些时间的。用轮询是否会对后期服务器造成压力呢 --这个要看系统以后设计容量是多少。 收起阅读 »

如何设置语音的时长限制?

环信SDK不限制录音时长,录音文件只要小于10MB就可以发送。
环信SDK不限制录音时长,录音文件只要小于10MB就可以发送。

cmd消息,跟聊天的消息,不存在冲突么?

普通消息回调的方法跟这个不一样,所以不冲突,普通聊天得接收方法didReceiveMessage,cmd消息的接收方法didReceiveCmdMessage。
普通消息回调的方法跟这个不一样,所以不冲突,普通聊天得接收方法didReceiveMessage,cmd消息的接收方法didReceiveCmdMessage。

环信:从《三体》获奖看智能聊天机器人未来

北京时间23日下午1时许,第73届雨果奖在华盛顿州斯波坎会议中心正式揭晓。中国作家刘慈欣凭借科幻小说《三体》获最佳长篇故事奖,这是亚洲人首次获得雨果奖! 《三体》英文版译者刘宇昆代表刘慈欣领取了奖杯 作为一个科幻迷,此刻我的心情和尔...
继续阅读 »
北京时间23日下午1时许,第73届雨果奖在华盛顿州斯波坎会议中心正式揭晓。中国作家刘慈欣凭借科幻小说《三体》获最佳长篇故事奖,这是亚洲人首次获得雨果奖!


1.jpg



《三体》英文版译者刘宇昆代表刘慈欣领取了奖杯

作为一个科幻迷,此刻我的心情和尔康是一样一样的,不对,比他还要多还要多…


2.jpg



肿么办?这个消息来得太突然了,我现在觉得又刺激又害怕又兴奋又快乐又幸福…作为一个意(qiong)见(diao)领(si)袖我必须把这个消息以迅雷不及掩耳盗铃之势传到天边去…联想到创业圈里近来传的火热的各种AI和智能机器人,我决定把这个好消息告诉我每日宠幸的各位聊天机器人基友们。。。

第一个当然是找到了人见人爱车见车爆胎的-杜蕾斯


3.jpg



杜蕾斯虽然是我宠幸的最多的一个基友,但竟然把《三体》理解成了"体位",看在它帮我解锁了30多种新姿势,就暂时原谅它了,不过对于我这种严(xian)肃(de)较(dan)真(teng)的资深三体迷来说还是不能忍。。。

杜蕾斯微信公共账号聊天机器人:差评!

理由:杜蕾斯的微信公共账号和大多数商业的微信公号一样,主要肩负着企业官网的目的,是企业展示商品和品牌的渠道,而不直接承担销售的责任,商品的购买是必须要跳转到京东上的。因为没有销售quota的压力,杜蕾斯微信公号选择了不提供人工客服,不提供人工的售前,售中,售后服务。在这种情况下,杜蕾斯微信公号的聊天页面基本就注定了只有一种使命了:逗逼扯淡为主,少量相关行业知识和企业商品信息为辅。聊天时,机器人在扯淡之余,会主要通过关键词匹配调用内置知识库的内容,如果没有完全对应的标准答案只能够根据关键词模糊匹配做出回答,虽然结果不能令用户完全满意,但毕竟是有交互,同时是一个免费增值服务,顾客也不能要求再多,对吧。


4.jpg



带着从小杜那里获得的创伤,我满怀期待的找到了招行公号“小招”,听说她更善解人意…


5.jpg



小招又没趣又现实。第一次假装不在,尿遁!第二次干脆直接向我推销各种银行业务。人家是想找你谈三体谈宇宙谈人生的,不要辣么现实好嘛。

招商银行信用卡微信小招:中评!

理由:据说在微信平台上,招行信用卡中心90%的服务都可以通过小招智能机器人来完成,自助查询回复准确率高达98%。假设微信公号智能聊天机器人的智能互动和自助服务能节省10%的话务量,按2012年招行卡中心客服的人工话务量超过6000万通,每通电话的成本大约5元(包含人员工资、通信费、水电、座席硬件设备等)计算,则招行信用卡中心一年节省的费用大概是6000万*10%*5元=3000万元。

哇,好厉害!只是不知道我如果打电话给招行的电话客服MM,分享我三体获奖的鸡冻心情,她会不会因为我花了招行5块钱而骂我呢。。。

作为一款工具型机器人,小招对于银行业务十分熟练,主要作用也是帮助银行客服人员解决回答一些常见问题节省成本提高工作效率,如果问一些无关的问题也不是其设计初衷和业务范围内,有点强人所难。银行业给人的印象始终是高大刻板,严肃认真。好吧,针对其在银行行业的专业回答给中评。


7.jpg



记得某大佬说过“小冰”是我见过最单纯的人,最后我只能依靠她了…


8.jpg



小冰果然没有让我失望…

微软小冰:好评!

理由:“微软小冰”集合了中国近7亿网民多年来积累的、全部公开的文献记录,凭借微软在大数据、自然语义分析、机器学习和深度神经网络方面的技术积累,精炼为几千万条真实而有趣的语料库,通过理解对话的语境与语义,实现了超越简单人机问答的自然交互。

总结:

时下炒的火热的人工智能和机器人技术要真正落地还有很长的路要走。但基于文字沟通为主的在线客服,如微信公共账号客服,网页在线客服,APP内置客服,会成为智能聊天机器人技术的第一个全面产业化的领域。在客服领域应用的聊天机器人技术通常有两种,逗逼型和辅助工具型。业务工具型机器人,在配置了足够强大的通用知识库和行业知识库后,是能够真实的为人工客服挡住很多重复简单的问题的。而逗逼机器人的应用场景一定要谨慎选择,只有像杜蕾斯微信公号这样确实无人值守的账号,并且也不担负销售成单和用户服务的任务时,才可以酌情考虑,毕竟是聊胜于无。

此外,业务工具型机器人并不是像很多人想象的那样,对自然语言处理,上下文解析,语义识别越强大越好。商家提供客服,唯一的目的是提供最好的服务体验,帮助消费者解决问题。所以对于谈理想谈人生谈三体这样的问题,机器人是可以无视的。机器人要解决的问题域越狭窄,它在这个领域里就越精确。这也是招行小招机器人的设计上的选择。当机器人对顾客的语义不那么有把握时,千万不要试图去闲扯淡,而是要及时而且无缝的转到人工坐席。最好的服务永远是真人。

苦逼的文案狗桑不起,各种热点都要跟比程序猿还苦逼有木有?摆干货扯情怀插诨打科,最后就是为了植入30秒广告有木有?根据调研机构数据显示,智能聊天机器人未来将成为客户服务行业的一个标配产品。环信移动客服的“智能机器人+智能知识库”可以解答80%的常见问题哦!


10.jpg



最后祝贺中国小说《三体》首获世界科幻界奥斯卡“雨果奖”,黑暗森林的存在是因为宇宙里不同文明之间缺乏合适沟通方法的缘故。环信是沟通利器,有了环信,或许黑暗森林就有了盏长明灯… 收起阅读 »

从环信融资看企业互联网服务有多大“钱途”?

从互联网兴起,到当下最火爆的移动互联网、O2O、互联网+的概念,会发现一个明显的趋势,消费互联网到企业互联网的快速迁移。而越来越多的创新机会来自于2B的企业服务市场。其实从投资市场的风向标中也能深切感知到。7月28日,IM通讯云领域的领导企业环信宣布拿到了12...
继续阅读 »
从互联网兴起,到当下最火爆的移动互联网、O2O、互联网+的概念,会发现一个明显的趋势,消费互联网到企业互联网的快速迁移。而越来越多的创新机会来自于2B的企业服务市场。其实从投资市场的风向标中也能深切感知到。7月28日,IM通讯云领域的领导企业环信宣布拿到了1250万美元的B轮融资,红杉资本领投,经纬中国和SIG跟投。而前不久,CRM的纷享销客也完成了D轮1亿美元的融资。


1438330579265.jpg



显然,资金涌向这里并非偶然。这就带来了一个话题,企业服务市场真的站到了风口上了吗?这个市场到底有多大的想象空间?哪个方向又会成为突破口。笔者这里就分析一下背后的原因。

企业服务为什么大器晚成

熟悉互联网、移动互联网行业的专家们都清楚,以往的投资、并购事件,很多发生在2C端的企业身上,但这一两年,2B端的企业服务市场的案例明显增多,几乎占到了一半的比例。这中间还伴随着金蝶、用友等削减脑袋贴互联网的标签,阿里云、京东、百度、腾讯微信等都在跑步进入企业服务市场。

其实,无论是环信这样

聚焦在IM和移动客服领域的新贵,还是在销售管理、对接业务链条、营销管理等环节,都离不开企业服务市场的势能。现在这个势能已足够大。拿环信来说,将一个IM的能力植入到未来企业的商业和业务中去,如果没有企业级服务市场的意识胎动和成熟度的提升,做早了反而容易失败。恰到好处,才能站到风口上。

为什么说企业服务市场是一个大器晚成的行当呢?原因主要有三点:

  • 一是移动互联网兴起,用户快速的完成了迁移,手机等移动设备作为商业工具,潜在的价值待挖掘;

  • 二是,用户思维和实时在线化的趋势,改变了过去用户不可见、难连接的瓶颈,进而改变了商业的模型;

  • 三是,移动互联网时代的开启,让以往偏信息中介的平台快速升级,以APP为核心,构建商业交易闭环服务,正成为大势所趋。这倒逼了企业服务如商业软件、SAAS、PAAS、IAAS等业务模式的出现。



像环信提出的“人与商业”连接的口号,已成为移动互联网时代通行的趋势和准则。环信的CEO刘俊彦的观点也印证了这一点。他认为,企业服务市场是一个万亿元的大生意,而且才刚刚开始,一年前做或一年后做,都容易丧失机会。因为只有2C端的消费者完成迁移后,才会推动2B的企业服务变革,这是一个不可逆的过程。所以,企业服务才会大器晚成。

三个要素决定移动客服未来

当然,虽然企业服务市场被公认为站到了风口上,但并不是愣头青式的冲进来,都能拿到投资、飞上天。这里面,也有陷阱、阴沟。那么,什么样的方向离成功更近一步。个人判断是,有三个要素,一个是离用户越近的业务方向,越容易成功,越早得到传统企业的重视。比如CRM相关,细分的销售自动化、市场分析、电商、客服、IM产品,这些领域都最早成熟;二是,新兴的企业服务产品核心都会基于移动端展开,而不是传统企业IT的PC版;三是,促进交易的新形态产品会大行其道。

为什么这么说呢?说白了,在用户思维越来越主导未来商业生态时,与用户的互动、反馈等打交道的事,会直接影响到任何一个行业里的企业的生意模型。所以,环信在做了即时通讯云平台后,推出更具场景化的移动客服产品,这绝对是正确的一步,也符合以上的两个特征。就像环信CEO刘俊彦所说的那样,用户都迁移到移动端了,客服战场一定也在这里。当所有企业都注重移动端交易达成时,客服就被重新定义了。

如果一家企业,你还在用传统的呼叫中心、电话等单一方式,只能说明你的业务还不够互联网化,你在离用户越来越远,离死亡越来越近。因为移动客服早晚会取代传统客服,是由用户说了算的,而且在人力成本越来越高的环境下,下一代的智能、深度学习+人工个性化服务,会是大趋势。环信快马加鞭的推移动客服3.0产品,还不断在融资上加码,目的就是去圈移动客服的地盘。

而移动客服几乎适用与很多行业,从环信移动客服4月份上线,签约的付费用户已经有200多家,付费席位超过40000个,覆盖的行业包括了电商、O2O、在线教育、互联网金融、旅游、移动医疗六大行业。所以说,与IM即时通讯云模块比,移动客服的场景痛点属性更强,而且正从过去的成本中心向利润中心转变,企业对此的需求更为迫切。所以也会是最容易规模化、复制的业务。

企业服务的想象空间有多大?

目前看,企业服务市场会成为下一个诞生超级大佬的领域。之前一直被引用的国外的数据表明了这个趋势。在过去的1年时间里,美国的企业服务市场,有超过15家企业IPO,募集资金达70亿美元,总市值超过400亿美元。仅拿客服这个细分市场来说,客服占到了CRM市场36.9%的比例,仅是北美2015年客服软件市场的采购金额高达96亿美元,还孕育出了20亿美元市值的Zendesk和Freshdesk两家“独角兽”公司

其实,如果放在中国市场的盘子里,实际上要远比美国市场大。对比一下移动互联网、O2O、互联网金融、教育、医疗等领域能发现,中国在移动互联网业务创新上,要远远超过美国,当然,这也与中国传统商业设施环境薄弱有一定关系。同时,中国企业数量、用户体量等也是海外市场无法匹及的。这意味着中国的企业服务市场,会是一块大蛋糕。

但一个怪现象也暗示了机会。海外市场有Oracle、SAP、Salesforce,也有Zendesk、Hubspot、New Relic、Hortonworks、Box等明星企业,市值动辄都是上百亿美元。但在中国的企业服务领域,还没出现百亿美元估值的企业,就连嗅觉最灵敏的投资机构也才刚刚参与进来。所以说,这还是一个早期的阶段,但也给出环信、纷享销客等企业最好的机会窗口。可以肯定的是,企业服务市场在2016年会是大爆发的一年,也会上演并购、投资的一幕幕大戏。 收起阅读 »

环信CTO:如何打造高效的自组织技术团队

技术团队的管理目标是打造高效的自组织团队,也就是老子提出的“无为而治”。做为一个从业20年的老程序员,从自身出发,我深切知道程序员喜欢什么样的管理方式,喜欢怎样的团队氛围。在环信,我们希望顺其自然,发挥工程师的热情和创造力,每个成员都能做到自我实现,最终整个团...
继续阅读 »
技术团队的管理目标是打造高效的自组织团队,也就是老子提出的“无为而治”。做为一个从业20年的老程序员,从自身出发,我深切知道程序员喜欢什么样的管理方式,喜欢怎样的团队氛围。在环信,我们希望顺其自然,发挥工程师的热情和创造力,每个成员都能做到自我实现,最终整个团队被业界认同。

1:扁平的组织结构

我们研发团队有50多人,没有一个专门的管理岗位。作为CTO,我的大多数时间在技术上面,团队负责人会承担一部分管理工作,但更多是靠工程师的自我驱动,自我管理。

2:结果导向的日常管理

Google只招聘最聪明的人,这些人能很好的管理个人时间。做为创业公司,我们招聘最努力的人,因为这样的工程师很珍惜时间和成长的机会。团队里有些人每天下午才出现,有些同事在备战马拉松比赛,有酷爱高山滑雪的,也有业余足球运动员。努力工作,精彩生活,结果导向是我们日常管理的原则。

3:严格的个人成长

『work for fun, constantlyimprove, and big rewards ahead』。在团队的宽松氛围中,其实我们对工程师的个人成长要求很高:对年轻工程师我们破格使用,希望尽快成长;对高级工程师, 要求技术深度,成为某个方面的专家;对技术负责人,要求更多业界交流,才能打造技术领先产品,同时建立自己的社区影响力。

4:美好的远程办公

年轻人希望到世界各地体验生活;有小孩的技术中坚天天忧虑北京的雾霾想着移民;40多岁的同事希望每年回老家工作一段时间陪陪父母。面对这些美好的期待,我们在不断尝试协同工具和管理方法来提高团队内部配合、团队间协作,及团队和客户的沟通。希望一两年内能成为一支高效远程开发团队。到那时,团队成员每年回来参加InfoQ大会学习最新技术,也做为每年的团队聚会。

无为而无所不为,希望大家一起探索,把越来越多的团队,打造成工程师的“乐土”。

——环信CTO马晓宇 收起阅读 »

环信iGeek Camp第三期:全方位架构攻略与监控揭秘

近日,环信与众多小伙伴们一起在望京Wilddog野狗总部举办了iGeek Camp活动第三期(前身为环信SM Meetup),这次的活动以产品、架构及运维的大牛与大家分享全方位架构攻略与监控的经验心得为主。 (环信高级工程师赵亮正在与大家分享) ...
继续阅读 »
近日,环信与众多小伙伴们一起在望京Wilddog野狗总部举办了iGeek Camp活动第三期(前身为环信SM Meetup),这次的活动以产品、架构及运维的大牛与大家分享全方位架构攻略与监控的经验心得为主。


1.jpg



(环信高级工程师赵亮正在与大家分享) 
 
讲师简介:环信SDK高级研发工程师,曾就职于大唐电信,索尼爱立信,Nokia等公司,10年移动软件开发,专注于移动软件开发设计,擅长架构优化,软件重构,及软件性能优化。


1S222B48-1.jpg


 
环信ONE SDK总体设计  环信赵亮的演讲主题为《环信客户端的架构设计》,向大家介绍了移动端架构设计及关键技术,现场与大家一起探讨了如何应对性能问题,如何保证软件兼容性问题,如何提升软件可扩展及重用性,以及如何保证高质量的软件。而环信的ONE SDK也首次公开亮相:ONE SDK的设计总体分为三层,平台层——Platform Layer,适配层——Porting Layer,核心层——Common Layer.  平台层会根据各平台的不同,实现不同的接口,开放符合平台层的API给第三方开发者。 适配层主要要适配到ONE SDK 核心层所需要的一些接口,起到承上启下的作用。 核心层主要提供IM 功能和业务逻辑,保证最大化的代码重用。  
PPT下载:http://vdisk.weibo.com/s/sTtZFJCY4KKjw


3.jpg


 
(开发者现场提问)


4.jpg


 
(阿里巴巴茹云峰)  讲师简介:超级课程表前CTO,江湖人称“风云”,曾历任新浪,网易系统架构师,后创业公司智能360,明星衣橱技术顾问,主攻系统架构,存储,搜索引擎,数据挖掘领域技术,热爱创业并分享技术心得。


5.jpg




6.jpg



来自阿里巴巴的茹云峰,身为超级课程表前CTO的他,与大家分享了《超级课程表技术架构的变迁》,从分布式爬虫,实时搜索,推荐引擎,缓存存储,一直到高并发,高流量,高可扩展系统架构的变迁之路。 
 
PPT下载:http://vdisk.weibo.com/s/sTtZFJCY4KKiW


7.jpg


 
(野狗实时云 CTO 李贝)  
讲师简介:负责野狗实时技术团队建设和云端架构设计,曾在360,人人网,猫扑网等互联网公司担任高级研发工程师,架构师等职位。  野狗实时云 CTO李贝进行了主题为《 实时BaaS云服务架构实践》的演讲。与开发者们分享了野狗实时的云端架构设计和优化的实践经验,包括基于长连接的服务优化,数据实时同步架构,以及如何保障系统的可用性和可扩展性等。


8.jpg


 
(云智慧 徐新兵)  讲师简介:云智慧移动端高级架构师  云智慧的移动端高级架构师 徐新兵分享的内容是《实战移动应用性能监控实战》。云智慧总结了一下移动应用的性能瓶颈,归结为三个方面:APP反应慢、交互性能差、APP Crash。网络引起的性能问题,是最直接、最常见的。在开发或者是测试中,如何接触app crash的隐患。除此之外,徐老师还给大家介绍了hook机制。 收起阅读 »

可以把聊天服务器部署在自己的服务器上吗?指私有部署

环信不主动做私有云部署。除非是标杆项目并且单笔合同金额50万以上的单子。
环信不主动做私有云部署。除非是标杆项目并且单笔合同金额50万以上的单子。

关联中的密码是哪个密码?在哪里设置?

关联中的密码是要关联的im账号密码。
关联中的密码是要关联的im账号密码。

在环信系统里用户名的大小写转换是怎么样的?

这个大小写是这个样子的:REST系统忽略大小写,认为AA,Aa,aa,aA都是一样的。如果系统已经存在了username为AA的用户,再来一个aa,就是用户名重复了。但是数据的表现形式还是用户最初注册的形式,发来的是大写就保存了大写,发来的是小写就保存小写。但...
继续阅读 »
这个大小写是这个样子的:REST系统忽略大小写,认为AA,Aa,aa,aA都是一样的。如果系统已经存在了username为AA的用户,再来一个aa,就是用户名重复了。但是数据的表现形式还是用户最初注册的形式,发来的是大写就保存了大写,发来的是小写就保存小写。但是聊天系统(IM Server)那边的持有的用户名都是小写,没有大写。 收起阅读 »

环信的双肩包收到了

书包质量挺好的,可是谁能告诉我为什么明显是男款是男款是男款?!  
书包质量挺好的,可是谁能告诉我为什么明显是男款是男款是男款?!


QQ图片20150825073344.jpg


 

怎么判断这条消息是别人发的还是用户自己发的 ?

从EMMessage对象获取direct来判断。EMMessage.Direct.RECEIVE || EMMessage.Direct.SEND  也可以通过message的from和to来进行判断,from就是发送方的username,可以用这个和自己的u...
继续阅读 »
从EMMessage对象获取direct来判断。EMMessage.Direct.RECEIVE || EMMessage.Direct.SEND 
也可以通过message的from和to来进行判断,from就是发送方的username,可以用这个和自己的username比对一下 收起阅读 »

安卓和ios 录音的格式分别是什么?

iOS
录制部分是ui控制的,不过我们建议您录制wav,之后通过三方库转成amr,这样可以减小发送语音产生的流量。
录制部分是ui控制的,不过我们建议您录制wav,之后通过三方库转成amr,这样可以减小发送语音产生的流量。

IE7、8、9都登录不了移动客服,请问是什么原因?

移动客服的客服端支持IE10以上版本浏览器,推荐使用谷歌Chrome、火狐FireFox、ie11以及 苹果笔记本的safari 等主流浏览器。
移动客服的客服端支持IE10以上版本浏览器,推荐使用谷歌Chrome、火狐FireFox、ie11以及 苹果笔记本的safari 等主流浏览器。

环信对语音流做了什么格式的编码?二次加密会不会使其体积变大太多?

加密不会导致数据增大,加密后的数据长度和原来一样。
加密不会导致数据增大,加密后的数据长度和原来一样。

倡议: 如果你的问题得到了解决,请标注“最佳答案”

倡议: 如果你的问题得到了解决,请标注“最佳答案”   这样,可以方便管理员统计多少问题得到了解决,是否还需要继续跟踪。
倡议: 如果你的问题得到了解决,请标注“最佳答案”
 
这样,可以方便管理员统计多少问题得到了解决,是否还需要继续跟踪。

imgeek.org release notes 2015.8.24

imgeek.org release notes 2015.8.24   1.更新问题状态显示,分为三类:回复,最佳,0回复 2.问题列表显示改为两行,将标签显示加到问题后面 3.超出标签数量时及时提示  

imgeek.org release notes 2015.8.24
 
1.更新问题状态显示,分为三类:回复,最佳,0回复
2.问题列表显示改为两行,将标签显示加到问题后面
3.超出标签数量时及时提示
 

iOS实时位置共享,抛砖引玉。

iOS实时位置共享,抛砖引玉。 http://pan.baidu.com/s/1o6oY2Zw
iOS实时位置共享,抛砖引玉。
http://pan.baidu.com/s/1o6oY2Zw

【抽奖结果】环信即时通讯云平台,你了解多少

以下是本次活动中奖名单,其中用户"一等到天幻"中奖两次,予以去重,并补充一个抽奖名额。 名单见下方补抽名单。抽奖过程见附件中的抽奖视频。 请中奖用户迅猛通私信将奖品寄送地址发给我。 包括收件人姓名、手机号、收件地址。 上传稍晚还望大家见谅。 抽奖名单 ...
继续阅读 »
以下是本次活动中奖名单,其中用户"一等到天幻"中奖两次,予以去重,并补充一个抽奖名额。
名单见下方补抽名单。抽奖过程见附件中的抽奖视频。

请中奖用户迅猛通私信将奖品寄送地址发给我。
包括收件人姓名、手机号、收件地址。

上传稍晚还望大家见谅。


抽奖名单
------------------
诺风
快看_灰机在灰
farawei
卟、分扌の練。愛
wzpforwork
老农民
cena
简.缪
回音
IMCom
乌龟也有怒气
Ruby
一等到天幻
MirrorC.M
ying
南京可以依靠
一等到天幻【重复】
FatCat
mifan2009IM
成续缘


补抽名单
------------------
yuqi


  收起阅读 »

环信获B轮融资1250万美元开启万亿企业服务市场

7月28日,环信B轮融资暨新品发布会在北京JW万豪酒店举行。发布会上,环信CEO刘俊彦正式宣布环信成功获得B轮融资1250万美元,同时环信移动客服3.0产品也正式上线,而环信将以 “连接人与商业”为愿景,开启万亿级企业服务市场。 环信CEO现场宣...
继续阅读 »
7月28日,环信B轮融资暨新品发布会在北京JW万豪酒店举行。发布会上,环信CEO刘俊彦正式宣布环信成功获得B轮融资1250万美元,同时环信移动客服3.0产品也正式上线,而环信将以 “连接人与商业”为愿景,开启万亿级企业服务市场。


1438145968909.jpg



环信CEO现场宣布获得B轮融资1250万美元


1438145981882.jpg



环信CTO马晓宇现场解读环信移动客服3.0

发布会当日,投资环信的VC代表:经纬中国副总裁熊飞、红杉资本相关负责人;环信的大客户代表: 58到家客服总监王辉、楚楚街联合创始人张翀;及行业专家代表:中国电子商务协会专委会常务副主任王汝林、动点科技创始人卢刚等均到场见证了这一盛况,并与环信CEO刘俊彦一起探讨和分享了对环信成长背后的万亿级企业服务市场趋势、电商在社交经济背景下的全渠道营销挑战等观点。


1438146005934.jpg



经纬中国副总裁熊飞主题分享

据了解,环信发布会当天吸引了来自投资界、媒体、研究机构的代表,电商、O2O、教育、医疗、旅游等行业的IT企业代表,以及移动互联网和云服务产业链上下游的服务商代表,还有众多创业者和开发者等到会聆听与交流,原本规划200人的会场挤进了300多人,现场火爆正反应出了中国企业级云服务市场的火爆。

企业云服务市场爆发,中国SaaS服务将迎来井喷

为什么会有这么多投资人、业界大佬、龙头企业、专家机构、著名媒体、创客看好环信?背后还是因为有足够大的市场支持。

环信B轮融资由红杉资本领投,经纬中国和SIG跟投,此轮环信共获得1250万美元融资。红杉投资人表示投资环信主要看中三点:1,客服市场足够大,属于刚性需求,在欧美市场已得到证明,同时中国SaaS服务公司正在快速崛起。2,环信团队技术功底扎实,有非常好的产品和技术基因,有电信运营商级别的技术储备。3,环信业务健康,增长势头迅猛。客户量、日消息量和DAU等硬性指标一年内达到了几十倍上百倍的增长。

环信引起了投资界追逐,而最终B轮被前三轮投资环信的老股东内部包揽,诸多投资机构欲进无门,望而兴叹。至此,环信在上线1年的时间里已经完成了4轮融资。即2014年5月经纬中国天使伦融资500万人民币,2014年8月SIG A轮融资500万美金,2014年10红杉300万美金A+轮融资,2015年4月红杉领投的1250万美金B轮(既本轮融资)。

三家老股东信心满满的排他性续投,以及投资界的追捧,让环信和其背后蕴含的商机显得更加炙手可热。而支撑环信估值暴涨的商机正是近来被业界关注的万亿级企业云服务市场前景,而且环信的“即时通讯云+移动客服”业务切中的恰是企业级服务市场王冠上的宝钻。

事实上,2015年将成为企业级服务市场的爆发元年,这一端倪在企业级服务市场率先爆发的美国已经十分清晰。据有关专家分析,在过去的1年时间里美国的企业服务市场,已经有超过15家企业IPO,他们的募集资金达到70亿美元,总市值超过400亿美元,其中有Zendesk、Hubspot、New Relic、Hortonworks、Box等不少明星企业,巧合的是其中不少“独角兽”级别企业的投资方也正是环信的投资方。同时在私募市场上,企业服务类公司融资总额超过100亿美金,这些公司的估值总和达到千亿美金量级。

而且,美国目前这样规模的企业级市场还正处在从青年走向壮年的阶段。据分析,从市值排名前十的云计算企业服务公司的市值总和看,2008年市值总和是250亿美元,到2015年这一数字已经是1800亿美元了,7年里增长了超过7倍。而预计到2016年,美国才会出现第一个云服务市场占有率超过传统软件的垂直领域,就是CRM。

而“客服”是CRM四大细分市场之一。而且,客服是CRM细分领域中最大的一个,占市场总额的37%。在北美,2015年客服软件市场采购总额高达96亿美元。这个市场中已经出现了两家“独角兽”公司,就是近来受到各界关注和追捧的Zendesk和Freshdesk。Zendesk已经上市,目前市值18.9亿美元,销售额1.87亿美元;Freshdesk在2015年4月份刚刚拿到E轮融资金额达到5000万美元,估值过10亿美金。这还不包括在这个领域中的传统的巨头,如微软,Salesforce, Oracle等。

回头看中国,中国的市场机会可能比美国更令人兴奋,这也许正是最先能嗅到风信的VC们挤破头的想投环信的缘由。在中国企业级服务市场还是一片空白。相比美国,为2700万家企业客户提供云服务的三家大的领军公司Oracle、SAP、Salesforce市值总和在3500亿美金左右。而中国,目前有2200万企业,但中国至今还没有百亿美元身价的公司甚至还没有基于SaaS的10亿美元身价的“独角兽”公司。

“互联网+”时代,企业需要环信源自契合移动化和社交变革

相较中国企业云服务市场的空白,企业的需求却很旺盛。由于2C市场和社会的变革中国的人力成本在逐年增加,5年翻了不止一番,这成本倒逼是企业服务火爆的核心驱动力。长期来看每年10%-15%的人力成本增长已成为趋势,中国的人口红利期已经过去,在中国愿意做低端工作的人越来越少。也就是说,中国企业的人力成本发生了普遍的提高。这就要求传统企业的运营效率必须要大幅提升才具有可持续性。相对应的,IT相对成本的快速下降,就成为了企业服务火爆的正向核心驱动力。

而在中国分析企业服务的核心市场之一—客户服务软件市场,还需要考虑移动互联网的因素和社交经济的因素。

在“互联网+”大背景下,中国移动互联网发展之迅猛已经领先世界,互联网金融和O2O等行业发展已经远超美国,而随着人们对移动互联网的使用习惯增加,客服软件的未来逐渐转向移动端。不止中国,全球看也将是这样,Gartner预测,到2017年年底,超过70%的客户服务请求将来自于移动端。2014年阿里双十一的现场监控显示,总成交额571亿其中移动端贡献了243亿,移动端交易量比例将有超过PC端的趋势。同时,京东2014年第四季度财报显示移动端的订单量占比接近40%。在用户体验为王的时代,用户行为发生不断的变化。用户行为细微的变化在偷偷革命。这导致电商、O2O、互联网金融、教育、旅游等行业移动化趋势明显。APP开发者们和企业主们正致力打造APP内交易闭环,即从商品/服务的展示,售前咨询,支付,物流,售中服务退换货,售后等全流程在APP内形成闭环。客户服务是其中重要一环。

同时,由于近年来微信和陌陌等软件的流行,教育了大众,社交已经成为用户的强需求,易观数据显示80%的用户移动应用行为与社交有关。而围绕社交已经形成经济圈,而在多社交媒体提供统一的优质客户服务很重要。传统的客服大多是通过电话完成的,现在崛起的社交网络和移动App、IM应用让用户可以更方便地反馈意见。但是如何保证这些意见及时集中地到达客服人员那里,对企业而言是个头疼的问题。

移动端客服软件市场基本空白。传统客服软件巨头转型缓慢,并且移动客服所需要的高并发高可靠IM技术获取门槛高。专注移动端客服技术的公司有可能弯道超车。

连接“人与商业”,环信将成为下一个“独角兽”

互联网时代商业模式的核心之一是“连接”,如QQ和微信是 “人与人的连接”,百度搜索是“人与信息的连接”,淘宝则是“人与商品的连接”。环信移动客服是“人与商业的连接”。核心之二是“找到”,依靠互联网的技术,实现人更快、更智能地“找到”信息、商品。

环信移动客服是将移动社交全渠道整合的智能云端客服平台。环信是中国乃至全球领先的即时通讯云服务提供商,上线1年来,已成为唯一一家经历了亿级长连接真实稳定运行的即时通讯云平台,中国主流的采用第三方即时通讯云服务的App几乎都是环信的客户,每日环信平台的消息量达到数亿条,有着即时通讯云领域亿级长连接的绝对垄断优势,在此基础上发展起来的环信移动客服,对移动网络下通讯的优化和社交质量的保障是任何一家传统SaaS服务企业所无法比拟的。

同时,环信移动客服继承了环信即时通讯云积累的开放能力,对几乎所有主流系统、硬件、社交模型,甚至传统客服软件都留有接口,具有完美的兼容性。环信移动客服不仅可以整合多渠道的服务平台,通过与包括传统Call Centre的合作和微博、微信、App、邮件等渠道的整合,可以最终把用户反馈汇集到同一个界面内,方便客服人员操作。

而环信移动客服特有的基于大数据的智能聊天机器人和知识库可以为人工客服挡住80%的常见问题,是应对移动互联网时代,社交化经济可能带来的海量用户请求的必备法宝。


1438146055575.jpg



正是由于环信的移动客服产品切中了万亿级企业云服务市场王冠上的宝钻,才使得环信受到了投资界的青睐。而环信移动客服产品也确实不负VC重托,获得了成功。据介绍,环信的移动客服产品已经签约了4万个付费客服席位,典型用户包括国美在线、58到家、楚楚街9块9等上百家互联网巨头企业客户。同时,艾媒咨询现场发布的《2015年中国移动客服市场发展研究报告》显示环信在新兴的移动客服市场占有率第一,APP客户规模最大。不难预料,有着连接“人与商业”愿景的环信凭借惊人的成长速度将最有希望成为下一个“独角兽”。 收起阅读 »

环信移动客服助力58到家打造一站式客服体验闭环

近日,环信B轮融资及移动客服新品发布会在北京顺利举行。发布会上,环信CEO刘俊彦宣布,环信成功获得B轮1250万美元融资,同时环信CTO马晓宇宣布环信移动客服3.0产品正式上线,主打移动、智能、全渠道。而环信将以“连接人与商业”为愿景,开启万亿级企业云服务市场...
继续阅读 »
近日,环信B轮融资及移动客服新品发布会在北京顺利举行。发布会上,环信CEO刘俊彦宣布,环信成功获得B轮1250万美元融资,同时环信CTO马晓宇宣布环信移动客服3.0产品正式上线,主打移动、智能、全渠道。而环信将以“连接人与商业”为愿景,开启万亿级企业云服务市场。


113R92H4-0.png



58到家客服总监王辉现场解读环信移动客服是怎么服务客户的

58到家客服总监王辉表示:“58到家原来只有呼叫中心一条服务渠道,对及时响应问题做得非常不好,虽然我们服务水平一直维持在85%以上,但是我们仍有客户打不进来电话,这些客户意味着订单的损失。O2O行业特点就是客户要求及时响应,快速解决,同时要满足任何下单需求。接入环信移动客服以后解决了58到家业务量暴增导致客服资源严重不足的问题,同时环信移动客服支持全渠道接入把服务渠道统一,把客户引流到在线客服上,提供了一站式的客户服务体验解决方案。同时帮助58到家把客服部门完成了从成本中心向盈利和营销中心的变革。”


113R95c2-1.png



据悉,环信移动客服产品已经有国美在线、58到家、楚楚街9块9等大批互联网巨头企业签约,累计签约客服座席已经达4万个,据艾媒咨询《2015年中国移动客服市场发展研究报告》显示,环信移动客服在新兴的移动客服市场占有率第一。

环信CTO马晓宇介绍,环信之所以受到市场如此欢迎,是因为环信移动客服是有别于传统客服的划时代产品。在环信CTO马晓宇看来,客服经历了三个时代传统callcenter的时代,互联网尚未普及,电话客服客户等待时间长,客户服务人员压力大,工作重复内容多;到了PC网页客服时代,随着互联网的普及,网页客服的成本明显小于电话客服,客户服务人员工作量较小,客户满意度有所提高,但相应依然不能及时有效;当今,随着智能手机用户的快速增长,客户要求能够随时在移动端获取咨询服务。移动端客服的重要性将不断上升。移动客服时代随之到来。

然而在环信基于IM长连接技术推出移动客服之前,业界并没有一款真正适合移动端和社交化时代的可靠的云端移动客服产品。此前,业界普遍存在的是两种移动客服产品,一类是工单客服,可以被视为移动客服1.0,基于工单方式和客服交互,技术实现简单,但无法做到实时交互,沟通效率低,用户体验差。另一类是轮询技术客服,可以被视为移动客服2.0,基于HTTP轮询技术,通过不断向服务器发送查询请求来准实时的收取消息。不能做到实时收取消息,流量和电量消耗高,APP在后台时无法接收消息,容易丢失客户。

而环信推出的移动客服产品是业界唯一一款具有IM长连接技术的移动客服产品,这被视为更适合移动端的客服产品。这一类型的移动客服可以定义为“交互型智能移动客服”,可以被视为移动客服3.0,以环信为代表的这一类新型移动客服是基于亿级IM长连接,系统稳定;智能机器人技术可处理大部分重复问题。相较环信移动客服的能力,传统的电话、工单、轮询客服在移动端和社交趋势下就显得捉襟见肘,有些OUT了。

环信移动客服实现了跨平台多渠道接入:支持 App、微信公众账号、微博、网页等,均可以快速统一接入客户服务后台管理。

其次,满足了开放性与自定义信息:这种新型的移动客服实现了代码开源、UI开源,还提供多套UI模版,便于与APP快速集成,平滑接入。同时第三方集成功能也很强大,可与第三方工单、知识库、CRM 系统等进行扩展集成。

第三,富媒体消息交互体验:移动客服平台提供了基于IM技术的类似微信体验的友好富媒体消息交互,不仅可以实时收发文字、表情,还可以即时收发图片、位置、实时语音、还可自定义消息,大大方便了与客户的沟通交流。

第四,精准客户画像功能:移动客服的IM沟通帮助企业辅助判断客户需求与诉求,通过自定义客户分类标签,客户再次访问时可获知客户的类型。并且还支持自定义会话小结,根据会话小结统计会话的分类,通过会话小结追踪客户诉求。通过轨迹分析功能,即通过发送客户访问页面的轨迹,判断客户意图,获取客户个性化细节,了解客户基础信息,分析客户行为,可以极大提高订单效率。

第五,“智能机器人+智能知识库”:作为一套智能化的客服系统,让企业建立基于业务的智能知识库,智能辅助归结业务信息和应答客户信息,历史常见问题系统梳理,提高客服效率。“智能机器人+智能知识库”组合目前可自动回复80%常见问题,随着智能知识库的不断训练,这一比例能够提高到90%。 收起阅读 »

SDK浪潮来袭:阿里百川VS环信VS京东万象VS腾讯SDK

 几大互联网巨头在加紧企业级的布局,他们的进入让企业级更加热闹。谁说他们没有企业级的基因?谁说抢占企业级市场一定需要有企业级的基因呢?基因本来就是一个扯淡的话题,或许是BAT他们明修栈道,暗渡陈仓的“阴谋”呢? 随 着互联网时代的不断发展,定会有越来越多...
继续阅读 »


38121439790295.jpg


 几大互联网巨头在加紧企业级的布局,他们的进入让企业级更加热闹。谁说他们没有企业级的基因?谁说抢占企业级市场一定需要有企业级的基因呢?基因本来就是一个扯淡的话题,或许是BAT他们明修栈道,暗渡陈仓的“阴谋”呢?

随 着互联网时代的不断发展,定会有越来越多的企业会开放自己的核心能力,BAT也不会例外!但这次腾讯、阿里和京东相继推出重磅的开放策略,一切都是为了连 接。只不过阿里的百川和京东的万象互联已经发布面向公众。而腾讯的SDK开放还没有公之于众,但是腾讯已经邀请众开发合作伙伴正在测试,相信不久将会发 布,这将是颗核弹,杀伤力十足。

接下来,我们就来一一剖析大佬们的“阴谋”:
微信将开放IM的SDK


先 来看腾讯旗下的微信是如何通过开放IM的SDK丰富企业号的功能,赋予企业号更多的想象空间。之前企业号是以消息的驱动模式,一个流程进来,只能机械地顺 着消息来完成工作,这也是很多人诟病的地方,一是认为企业号的入口太深;二是觉得企业号是消息架构而非应用架构,从此认为企业号并不足以承载企业业务应 用。

但是随着 SDK的开放,企业号内部就拥有了im的能力,开发者也会进一步挖掘SDK的潜力,以支持企业在处理流程的任何节点可以与相关的人发起互动和协作,此大招 祭出之后,相信会有不少im厂商会立马紧张起来。我也不仅要担心专业的im厂商,他们接下来如何应对?也许我的担心是多余的。

随着腾讯全系列的im SDK的开放,势必有很多APP会选择与腾讯的SDK相连接,让自己的APP瞬间具有微信一样的通讯能力,微信也将无处不在,渗透到企业内部。通过Im 与企业和APP的相连,完成以im为基础应用布局企业级大业。

当然这也不是所有的人都会使用腾讯所开放的SDK,至少竞争对手是不会使用的。一些感受到腾讯威胁的创业者或者企业也不太会用。大型企业目前还是更喜欢私 有部署的方式,通过自己的App来完成一站式的沟通和协作,但是随着微信im SDK的开放,这样的情况应该会有所改变。

阿里百川即时通讯VS环信即时通讯云

自阿里推出阿里百川计划,试图打造一个开放的移动互联网应用开发及商业化平台之后,会对互联网行业有着什么样的影响呢?

1. 大幅度降低了互联网应用开发的门槛,通过提供整理的SDK包,让整个产业链流程标准化、透明化,分工合理,专业的人做专业的事。

2. 阿里百川平台是一个集成技术、商业优势资源的开放平台、创业平台,提供一个完整的解决方案,覆盖技术、数据服务、商业化,还将依托淘宝平台,授权APP导入淘宝O2O链条,实现淘宝账号登陆,接入交易体系,打通推广、支付、后台管理的全链条。

3. 瓦解现有移动互联网入口格局。毋庸置疑,百川将依托阿里大电商平台,通过扶持APP市场,分流垂直应用,瓦解过去的移动互联网入口格局。

而成立于2013年在上线一年就完成4轮融资的环信即时通讯云无疑也是阿里百川强有力的竞争对手。

环信的优势在于:

1. 环信在即时通讯云领域有绝对优势和深度积累,能够保障海量移动设备长连接的高并发,同时提供良好的社交交互体验。

2. 环信一直就是在做开放平台,建设生态体系,环信能够像zendesk一样,引入全产业链优质资源支持客户的未来无限扩展需求

京东的万象互联API PaaS

在互联网+大背景的影响下,各行各业的企业对于自身数据的开放已有了全新的认识,逐渐从数据封闭向数据开放合作进行创新性的尝试与转型,借助全维度、全生 命周期的大数据体系来创造巨大价值。数据时代也已从单一的业务数据收集和数据分析,逐步跨入数据开放、数据共享的数据2.0时代。

而京东万象正是京东云在已有的云计算平台基础上围绕数据提供方、数据需求方、数据服务方等多方,构建了以数据开放、数据共享、数据分析为核心的综合性数据开放平台。

京东万象将帮助数据的提供方与需求方进行数据对接,解决企业之间的数据缺失问题,完善数据价值,提升企业效率。平台本身会对接多维度的丰富数据, 保证数据的安全性与接入效率,是企业数据输出与流入的最佳渠道。与此同时,京东万象还将京东内部的企业总线服务云化并对外提供,帮助企业实现内部各应用系 统之间的数据互联互通,解决企业内部数据孤岛以及多系统之间的数据整合问题。

企业的数据通过API的形式接入京东万象,在数据安全的基础上,通过数据API的共享和交易实现双方的数据价值交换。同时京东万象平台提供完善的数据交易和数据管理功能,充分满足数据上下游客户的需求,保障数据共享的安全性和流畅性。

京东万象目前主推的是金融行业的相关数据,现已覆盖了包括个人和企业征信报告,黑名单数据,失信数据等金融数据,此类数据给互联网金融创新企业带来巨大的数据共享价值。

京东万象正在逐步开放和引入电商和政府相关数据,凭借京东自身品牌和丰富的电商数据,势必会成为行业权威大数据的开放共享平台。

相信在不久的将来,我们就能看到这些互联网大佬们为我们带来的企业级的布局pk饕餮盛宴! 收起阅读 »

环信ONE SDK架构介绍

环信即时通讯SDK自2014年6月正式发布2.0版本至今已走过一个年头,从基本的单聊功能,到群聊功能,再到聊天室的实现,SDK不管是功能,稳定性,还是易集成性都在一步一步的走向完善与稳定,感谢开发者们给与提供的反馈与帮助,使我们的SDK迅速的在诸多方面得到提高...
继续阅读 »
环信即时通讯SDK自2014年6月正式发布2.0版本至今已走过一个年头,从基本的单聊功能,到群聊功能,再到聊天室的实现,SDK不管是功能,稳定性,还是易集成性都在一步一步的走向完善与稳定,感谢开发者们给与提供的反馈与帮助,使我们的SDK迅速的在诸多方面得到提高与改进。

随着现在物联网的兴起,环信现在的SDK的架构对应对未来物联网平台还是略有不足,使我们不得不在今年年初就考虑到如何去改善我们的架构,使之能够较容易的适配到各个主流平台和物联网平台。

现在的Android, IOS, SDK都是各自维护了自己逻辑,给2.0开发带来了很多不便,相同的功能需要维护两份代码,同一个bug要在不同的平台修复两次,由于不同平台的实现,导致Android,IOS架构设计不统一,API不一致,再加上在不同的平台开发的工程师之间由于不同的实现导致沟通问题诸多,这样导致的问题就是,不同平台的开发进度大多数情况下都不相同。

所以针对以上的问题,我们今年年初就计划我们SDK3.0的开发,我们称之为ONE SDK,基本的理念就是我们实现共同IM 内核,使代码可被不同的平台最大化的重用,但是设计和实现却是面临着巨大的挑战,如何适配到不同的平台,如何最大化的重用代码都是要面临的问题。

ONE SDK 架构设计
总体设计


20150806175739849.png



ONE SDK的设计总体分为3层,平台层-Platfrom layer,适配层-Porting layer,核心层-Common layer.

平台层会根据各平台的不同,实现不同的接口,开放符合平台层的API给第三方开发者。

适配层主要要适配到ONE SDK 核心层所需要的一些接口,起到承上启下的作用。

核心层主要提供IM 功能和业务逻辑,保证最大化的代码重用。

考虑到跨平台共享代码,我们ONE SDK主要是用C++这种跨平台的语言来实现。

平台层

我们计划要支持的平台为Android,IOS,MAC OS,Windows,Windows phone, Linux,Embedded Linux, 还有较为广泛应用的物联网平台-IOT OS。

我们会针对不同平台提供给开发者,和平台一致API规范,使各平台的开发者无难度的集成SDK,例如我们会提供JAVA给Android,Objective-C 给IOS和MAC, C++ 给Linux, IOT平台。


适配层


20150806181806647.png



适配层主要就是各平台需要实现核心层所需要的一些接口类例如,上图给出的线程模型,定时器模型,数据库模型,还有HTTP模型。

这些模型都是和平台相关的,例如有的平台提供sqllite的访问,有的没有,有的线程模型和定时器模型都有自己的实现方式例如物联网IOT OS,所以实现了上述的模型,就可以使核心层可以工作,不过也可能会遇到一些问题,这都会在具体的实现中会具体的应对,但结构是清晰的。

其实例如Android,Linux, IOS, Mac OS,Windows都是支持C++11,也就是说都是支持C++11所提供的线程模型,所以这几个操作系统的线程模型的实现应该是同样的,所以代码是可以共享的, 但是数据库Anroid NDK是不支持sqlite访问,所以这部分Android有两种策略一个是集成sqlite源代码,二是回调给JAVA层,前一种策略是代码逻辑清晰,但坏处就是增加了代码量。

还有就是HTTP模型,默认的android,iOS,Mac OS,windows都有自己的API提供,所以ONE SDK策略就是如果有平台有原生的HTTP API 支持我们就会尽量用平台的,但是类似linux,就需要第三方库的支持例如libcurl.

所以综上所述适配层的意义重大,保证我们ONE SDK代码共享最大化的目的。

核心层

核心层是具体实现环信相关功能的模块,它里面也包含的几个部分,核心业务逻辑API实现,抽象协议层,和独立实时音视频模块。

Core Common


20150806191008517.png



业务逻辑层,负责提供基本的IM功能。

会话管理
消息收发
登录鉴权
连接管理

Audio/Video Call

实时音视频模块是一个独立的模块,可以单独存在,这样可以灵活处理,不需要时不用加载此模块。


20150806191418690.png



实时音视频
多人语音

Abstract Protocol Layer

协议抽象层,主要用来处理具体的IM底层协议,这层是比较独立的主要实现环信定义的IM传输协议,也为为日后协议改造,扩展提供承上启下的作用。


20150806192326297.png



  • 定义抽象消息载体

  • 基本的消息发送

  • 基本的消息回调

  • 定义基本的通知


上述ONE SDK架构是我们计划要实现的,现在一些基本的设计已经在Linux SDK上得到了实现,下面让我们继续了解下Linux SDK。

Linux SDK

经过几个月的开发,我们已经推出了Linux SDK测试版,有兴趣的开发者可以小试一下去我们的官网 http://www.easemob.com/downloads 下载。

通过EMChatClient Facade类开发者可以访问到任何IM停供的功能

  • 登录注册

  • 消息收发,支持TXT, IMAGE, VIDEO, AUDIO, FILE, LOCATION, 类型的message

  • 会话管理

  • 联系人管理



在开发linux SDK的时候我们利用了C++11提供的很多优良feature,例如lambda,shared ptr,thread等较新的功能,通过这些功能的使用,让我们能够迅速并且高效的开发出Linux SDK测试版。

Lambda是我们的代码逻辑阅读起来更清楚,shared ptr使我们对内存的管理更为简单,thread的使用使我们能迅速的建立好线程模型,加快开发的速度。

我们在Linux SDK porting layer实现了线程模型,数据库模型,定时器模型和HTTP模型

  • 线程模型,利用C++11的thread进行封装

  • 数据库模型,使用Linux的sqlite

  • HTTP模型,我们使用了Libcurl进行了封装

  • 定时器模型,我们使用了C++11进行了封装



我们对Linux SDK还在紧锣密鼓,夜以继日的紧张开发中,群组和实时音视频功能还在开发中,但是在开发过程中我们也遇到了些的问题,例如不linux平台对库的支持也不尽相同,所以势必会对我们的架构有些改变,有些重构的工作也在进行中,我们希望8月底能够实现大部分的功能。

选择linux SDK为开始主要是因为大多数的嵌入式智能平台还是以linux为主,所以首先开发Linux 版SDK也是必先的一步,感谢我们的工程师,我么的Linux SDK已经能够支持树莓派的开发环境,这对于很多开发者来说确实是个好消息。

如果想了解如何集成Linux SDK请参考环信IM Linux SDK 集成说明

展望

Linux SDK 只是实现我们ONE SDK 的第一步,我们下半年还要实现基于ONE SDK 的Android ,IOS,MAC OS, 还有主流物联网平台的SDK,通过借鉴Linux SDK的实现方式,我们认为实现ONE SDK是可以做到的。

我们还会进一步和主要IOT平台供应商合作,实现某个具体IOT平台的环信SDK,使环信即时通讯平台生态圈更加壮大。 收起阅读 »

环信Linux SDK测试版正式发布

万物互联时代,物联网创新方兴未艾。今日环信即时通讯云宣布环信Linux SDK测试版正式发布,作为环信生态圈重要的布局,环信Linux SDK测试版使用C++开发,原生支持Linux操作系统,适用于基于Linux系统的智能设备和硬件,在各种智能硬件设备和嵌入式...
继续阅读 »
万物互联时代,物联网创新方兴未艾。今日环信即时通讯云宣布环信Linux SDK测试版正式发布,作为环信生态圈重要的布局,环信Linux SDK测试版使用C++开发,原生支持Linux操作系统,适用于基于Linux系统的智能设备和硬件,在各种智能硬件设备和嵌入式系统上都可以快速移植和接入环信IM的通讯能力,全面对接物联网


165_150805154310_1.jpg



根据环信CEO刘俊彦描述的愿景:未来,当一台物联网时代的电冰箱坏了后,你还需要打开网页搜索厂家联系方式,然后打400电话解决问题吗?当然不!你只需要按冰箱上的一个红色小按钮,就可以立即接通厂家的客服,而且是视频的,客服可以一键将修复后的设置推送到冰箱上来。

不仅如此,客服还能够根据电冰箱存储食品提醒用户是否购买食材,保存和处理食材。如果和其他健康产品联系起来,还能提醒用户是否注意饮食健康等,成为“监测”和“服务”的前端设备。

这并不是很遥远的未来,万物互联正在成为现实。回到物联网冰箱的场景。当消费者按动红色按钮时,在按钮的背后是一个“环信Inside”芯片,烧制了环信的Linux版SDK。当消费者和客服视频通话时,使用的是环信提供的基于IP网络的视频通讯能力,而客服使用的工作后台,则是环信移动客服提供的。

今日,环信的Linux版移动客服SDK已经正式发布。“环信Inside”芯片也已经在实验室中紧张调试,生态圈也正在进一步建立中。环信已经在“连接人与商业”的愿景下又迈出了坚实的一步。


165_150805154519_1_lit.jpg



目前环信Linux SDK测试版版本支持单聊,各种富媒体消息,如文本消息,图片消息,语音/视频片段等,好友管理和黑名单管理等功能,下一个版本将全面支持群组,聊天室和实时音视频,敬请期待! 收起阅读 »

Ubuntu实现树莓派交叉编译

一、交叉编译 在一个平台上生成另一个平台上的可执行代码。为什么要大费周折的进行交叉编译呢?一句话:不得已而为之。有时是因为目的平台上不允许或不能够安装所需要的编译器,而又需要这个编译器的某些特征;有时是因为目的平台上的资源贫乏,无法运行所需要的编译器;有...
继续阅读 »
一、交叉编译

在一个平台上生成另一个平台上的可执行代码。为什么要大费周折的进行交叉编译呢?一句话:不得已而为之。有时是因为目的平台上不允许或不能够安装所需要的编译器,而又需要这个编译器的某些特征;有时是因为目的平台上的资源贫乏,无法运行所需要的编译器;有时又是因为目的平台还没有建立,连操作系统都没有,根本谈不上运行什么编译器。

要进行交叉编译,我们需要在主机平台上安装对应的交叉编译工具链(cross compilation tool chain),然后用这个交叉编译工具链编译源代码,最终生成可在目标平台上运行的代码。     
常见的交叉编译例子如下:
  1. 在Windows PC上,利用ADS(ARM 开发环境),使用armcc编译器,则可编译出针对ARM CPU的可执行代码。
  2. 在Linux PC上,利用arm-linux-gcc编译器,可编译出针对Linux ARM平台的可执行代码。
  3. 在Windows PC上,利用cygwin环境,运行arm-elf-gcc编译器,可编译出针对ARM CPU的可执行代码。

 
二、名词解释
 
Linux下的大多数软件包都使用Autoconf/Automake工具自动生成Makefile,只要使用“./configure”,“make”,“make install”就可以把程序安装到Linux系统中去了。编译第三方源代码时,可以看下工程中的readme和install文件,一般情况下都会写编译步骤。
 
 1、./configure 常用参数  [--build] | [--host] | [--target] | [--prefix] | [--help]

注意:host和--host不是一个意思,host是指宿主机,即编辑和编译程序的平台,是个名词;--host是设置执行文件所运行的主机,是个动词。
 
>> ./configure: 用来生成对应的 Makefile;
 
>> --build: 执行代码编译的主机,正常的话就是你的主机系统。若无指定使用host的值;
>> --host: 编译出来的二进制程序所执行的主机, 交叉编译工具链的前缀。因为绝大多数是如果本机编译就本机执行,所以这个值就等于build。但是交叉编译的时候build和host需要设置不同值,用host指定运行主机,即host != build的时候编译才是交叉编译。若无指定将会运行`config.guess'来检测;
 
>> --prefix: 安装目录,比如 --prefix=/usr 意思是将该软件安装在 /usr 下面,执行文件就会安装在 /usr/bin (而不是默认的 /usr/local/bin),资源文件就会安装在 /usr/share(而不是默认的/usr/local/share);
 
>> --help: 查看参数;
 
>> --target: 这个参数比较特殊,表示需要处理的目标平台名称,主要在程序语言工具如编译器和汇编器上下文中起作用,若无指定使用host的值。一般用来编译工具,比如给arm开发板编译一个可以处理mips程序的gcc,那么--target=mips;
 
>>>> 举例说明:编译gcc
 
>> ./configure --build=i386-linux --host=arm-linux --target=mipsel-linux --prefix=$(pwd)/_install
 
用i386-linux的编译器进行gcc的编译,编译出的gcc运行在arm-linux, 编译结果存放到$(pwd)/_install路径下,编译出的gcc用来编译能够在mipsel-linux下运行的代码。
 
2、Makefile包含了一些基本的预先定义的操作: 

  • >>make: 根据Makefile编译源代码,连接,生成目标文件,可执行文件;

  • >>make clean: 清除上次的make命令所产生的object文件(后缀为“.o”的文件)及可执行文件;

  • >>make distclean: 类似make clean,但同时也将configure生成的文件全部删除掉,包括Makefile;

  • >>make test / make check: 检查make,确保make没有出错,一般在make install之前执行;

  • >>make install: 将编译成功的可执行文件安装到指定目录中,一般为/usr/local/bin目录;

  • >>make dist: 产生发布软件包文件(即distribution package)。这个命令将会将可执行文件及相关文件打包成一个tar.gz压缩的文件用来作为发布软件的软件包。它会在当前目录下生成一个名字类似“PACKAGE-VERSION.tar.gz”的文件。PACKAGE和VERSION,是我们在configure.in中定义的AM_INIT_AUTOMAKE(PACKAGE, VERSION);

  • >>make distcheck: 生成发布软件包并对其进行测试检查,以确定发布包的正确性。这个操作将自动把压缩包文件解开,然后执行configure命令,并且执行make,来确认编译不出现错误,最后提示你软件包已经准备好,可以发布了; 



三、交叉编译源代码

1、环境
Ubuntu
 
2、树莓派交叉编译工具安装step
 

  • step1.下载树莓派交叉编译工具https://github.com/raspberrypi/tools

  • step2. 将源码放到各用户都能share的文件夹下,如/usr/tools

  • step3. 将交叉编译工具的路径加到环境变量中,为了以后启动不用再设置,我加到了bashrc中


1 $nano ~/.bashrc
2 #在文件的末尾加上: export PATH=$PATH:/usr/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin
3 $source .bashrc


  • step4. 检测是否安装成功


way1: 
$arm #双tab
显示以下内容


031616177676048.jpg

 
way2:
$arm-linux-gnueabihf-gcc -v 
#能显示正确信息

$arm-linux-gnueabihf-g++ -v
#能显示正确信息
注意:交叉编译时,如果出现arm-linux-gnueabihf-XXX找不到,确定arm-linux-gnueabihf-XXX -v 是否能输出正确信息,如果能,可以切到root下进行编译

三、编译源代码

1、在写编译脚本时,一定要确保编译器写的是交叉编译的编译器。比如比较常用的Makefile,
1 demo: $(obj)
2 $(CXX) -o $@ $^ $(LDFLAGS)
其中的CXX必须是arm-linux-gnueabihf-g++才能编译出正确的在树莓派上的可执行文件。

2、编译第三方库

如果你想设置全局的CC和CXX变量,在每次打开一个新的Terminal时,输入以下命令:
1 $export CC=arm-linux-gnueabihf-gcc  
2 $export CXX=arm-linux-gnueabihf-g++
其他的全局变量同上。

以下列几个常用的第三方库交叉编译步骤

1>> sqlite3 http://www.sqlite.org/download.html sqlite-autoconf-3081002.tar.gz

  • step1:  make clean

  • step2:  ./configure --host=arm-linux-gnueabihf --prefix=/usr/local/tools/sqlite3

  • step3:  make

  • step4:  make install



 

2>>curl http://curl.haxx.se/download.html  curl-7.43.0.tar.gz

  • step1:  make clean

  • step2:  ./configure --host=arm-linux-gnueabihf --prefix=/usr/local/tools/curl

  • step3:  make

  • step4:  make install



3>> openssl: http://www.openssl.org/source/ openssl-1.0.1p.tar.gz

  • step1: ./config no-asm shared --prefix=/usr/local/tools/openssl

  • step2:  a、修改Makefile CC=arm-linux-gnueabihf-gcc


           b、找到有-m64的地方,将-m64删除。  

  • step3: make

  • step4: make install


收起阅读 »

经验分享:PHP 安全编程建议

要提供互联网服务,当你在开发代码的时候必须时刻保持安全意识。可能大部分 PHP 脚本都对安全问题都不在意,这很大程度上是因为有大量的无经验程序员在使用这门语言。但是,没有理由让你因为对你的代码的不确定性而导致不一致的安全策略。当你在服务器上放任何涉及到钱的东西...
继续阅读 »
要提供互联网服务,当你在开发代码的时候必须时刻保持安全意识。可能大部分 PHP 脚本都对安全问题都不在意,这很大程度上是因为有大量的无经验程序员在使用这门语言。但是,没有理由让你因为对你的代码的不确定性而导致不一致的安全策略。当你在服务器上放任何涉及到钱的东西时,就有可能会有人尝试破解它。创建一个论坛程序或者任何形式的购物车,被攻击的可能性就上升到了无穷大。
为了确保你的 web 内容安全,这里有一些常规的安全准则:
  • 别相信表单
攻击表单很简单。通过使用一个简单的 JavaScript 技巧,你可以限制你的表单只允许在评分域中填写 1 到 5 的数字。如果有人关闭了他们浏览器的 JavaScript 功能或者提交自定义的表单数据,你客户端的验证就失败了。用户主要通过表单参数和你的脚本交互,因此他们是最大的安全风险。你应该学到什么呢?在 PHP 脚本中,总是要验证 传递给任何 PHP 脚本的数据。在本文中,我们向你演示了如何分析和防范跨站脚本(XSS)攻击,它可能会劫持用户凭据(甚至更严重)。你也会看到如何防止会玷污或毁坏你数据的 MySQL 注入攻击。
  • 别相信用户
假定你网站获取的每一份数据都充满了有害的代码。清理每一部分,即便你相信没有人会尝试攻击你的站点。
  • 关闭全局变量
你可能会有的最大安全漏洞是启用了 register_globals 配置参数。幸运的是,PHP 4.2 及以后版本默认关闭了这个配置。如果打开了 register_globals,你可以在你的 php.ini 文件中通过改变 register_globals 变量为 Off 关闭该功能:
register_globals = Off 
新手程序员觉得注册全局变量很方便,但他们不会意识到这个设置有多么危险。一个启用了全局变量的服务器会自动为全局变量赋任何形式的参数。为了了解它如何工作以及为什么有危险,让我们来看一个例子。假设你有一个称为 process.php 的脚本,它会向你的数据库插入表单数据。初始的表单像下面这样:
运行 process.php 的时候,启用了注册全局变量的 PHP 会将该参数赋值到 $username 变量。这会比通过 $_POST['username']或 $_GET['username'] 访问它节省击键次数。不幸的是,这也会给你留下安全问题,因为 PHP 会设置该变量的值为通过 GET 或 POST 的参数发送到脚本的任何值,如果你没有显示地初始化该变量并且你不希望任何人去操作它,这就会有一个大问题。看下面的脚本,假如 $authorized 变量的值为 true,它会给用户显示通过验证的数据。正常情况下,只有当用户正确通过了这个假想的 authenticated_user() 函数验证,$authorized 变量的值才会被设置为真。但是如果你启用了 register_globals,任何人都可以发送一个 GET 参数,例如 authorized=1 去覆盖它:
这个故事的寓意是,你应该从预定义的服务器变量中获取表单数据。所有通过 post 表单传递到你 web 页面的数据都会自动保存到一个称为 $_POST 的大数组中,所有的 GET 数据都保存在 $_GET 大数组中。文件上传信息保存在一个称为 $_FILES 的特殊数据中。另外,还有一个称为 $_REQUEST 的复合变量。要从一个 POST 方法表单中访问 username 字段,可以使用 $_POST['username']。如果 username 在 URL 中就使用$_GET['username']。如果你不确定值来自哪里,用 $_REQUEST['username']。
['post_value'];$get_value = $_GET['get_value'];$some_variable = $_REQUEST['some_value']; ?>  
$_REQUEST 是 $_GET、$_POST、和 $_COOKIE 数组的结合。如果你有两个或多个值有相同的参数名称,注意 PHP 会使用哪个。默认的顺序是 cookie、POST、然后是 GET。 推荐安全配置选项 这里有几个会影响安全功能的 PHP 配置设置。下面是一些显然应该用于生产服务器的:
  • register_globals 设置为 off
  • safe_mode 设置为 off
  • error_reporting 设置为 off。如果出现错误了,这会向用户浏览器发送可见的错误报告信息。对于生产服务器,使用错误日志代替。开发服务器如果在防火墙后面就可以启用错误日志。(LCTT 译注:此处据原文逻辑和常识,应该是“开发服务器如果在防火墙后面就可以启用错误报告,即 on。”)
  • 停用这些函数:system()、exec()、passthru()、shell_exec()、proc_open()、和 popen()。
  • open_basedir 为 /tmp(以便保存会话信息)目录和 web 根目录,以便脚本不能访问这些选定区域外的文件。
  • expose_php 设置为 off。该功能会向 Apache 头添加包含版本号的 PHP 签名。
  • allow_url_fopen 设置为 off。如果你能够注意你代码中访问文件的方式-也就是你验证所有输入参数,这并不严格需要。
  • allow_url_include 设置为 off。对于任何人来说,实在没有明智的理由会想要访问通过 HTTP 包含的文件。
  •  
  • 一般来说,如果你发现想要使用这些功能的代码,你就不应该相信它。尤其要小心会使用类似 system() 函数的代码-它几乎肯定有缺陷。
  • 启用了这些设置后,让我们来看看一些特定的攻击以及能帮助你保护你服务器的方法。
 SQL 注入攻击 由于 PHP 传递到 MySQL 数据库的查询语句是用强大的 SQL 编程语言编写的,就有了某些人通过在 web 查询参数中使用 MySQL 语句尝试 SQL 注入攻击的风险。通过在参数中插入有害的 SQL 代码片段,攻击者会尝试进入(或破坏)你的服务器。假如说你有一个最终会放入变量 $product 的表单参数,你使用了类似下面的 SQL 语句:
$sql = "select * from pinfo where product = '$product'";
如果参数是直接从表单中获得的,应该使用 PHP 自带的数据库特定转义函数,类似:
$sql = 'Select * from pinfo where product = '"'        mysql_real_escape_string($product) . '"';
如果不这样做的话,有人也许会把下面的代码段放到表单参数中:
39'; DROP pinfo; SELECT 'FOO 
那么 $sql 的结果就是:
select product from pinfo where product = '39'; DROP pinfo; SELECT 'FOO' 
由于分号是 MySQL 的语句分隔符,数据库会运行下面三条语句:
select * from pinfo where product = '39'DROP pinfoSELECT 'FOO' 
好了,你丢失了你的表。注意实际上 PHP 和 MySQL 不会运行这种特殊语法,因为 mysql_query() 函数只允许每个请求处理一个语句。但是,一个子查询仍然会生效。要防止 SQL 注入攻击,做这两件事:
  • 总是验证所有参数。例如,如果需要一个数字,就要确保它是一个数字。
  • 总是对数据使用 mysql_real_escape_string() 函数转义数据中的任何引号和双引号。
注意:要自动转义任何表单数据,可以启用魔术引号(Magic Quotes)。一些 MySQL 破坏可以通过限制 MySQL 用户权限避免。任何 MySQL 账户可以限制为只允许对选定的表进行特定类型的查询。例如,你可以创建只能选择行的 MySQL 用户。但是,这对于动态数据并不十分有用,另外,如果你有敏感的用户信息,可能某些人能访问其中一些数据,但你并不希望如此。例如,一个访问账户数据的用户可能会尝试注入访问另一个人的账户号码的代码,而不是为当前会话指定的号码。 防止基本的 XSS 攻击 XSS 表示跨站脚本。不像大部分攻击,该漏洞发生在客户端。XSS 最常见的基本形式是在用户提交的内容中放入 JavaScript 以便偷取用户 cookie 中的数据。由于大部分站点使用 cookie 和 session 验证访客,偷取的数据可用于模拟该用户-如果是一个常见的用户账户就会深受麻烦,如果是管理员账户甚至是彻底的惨败。如果你不在站点中使用 cookie 和 session ID,你的用户就不容易被攻击,但你仍然应该明白这种攻击是如何工作的。不像 MySQL 注入攻击,XSS 攻击很难预防。Yahoo、eBay、Apple、以及 Microsoft 都曾经受 XSS 影响。尽管攻击不包含 PHP,但你可以使用 PHP 来剥离用户数据以防止攻击。为了防止 XSS 攻击,你应该限制和过滤用户提交给你站点的数据。正是因为这个原因,大部分在线公告板都不允许在提交的数据中使用 HTML 标签,而是用自定义的标签格式代替,例如   和 [linkto]。让我们来看一个如何防止这类攻击的简单脚本。对于更完善的解决办法,可以使用 SafeHTML,本文的后面部分会讨论到。
function transform_HTML($string, $length = null) {// Helps prevent XSS attacks    // Remove dead space.    $string = trim($string);    // Prevent potential Unicode codec problems.    $string = utf8_decode($string);    // HTMLize HTML-specific characters.    $string = htmlentities($string, ENT_NOQUOTES);    $string = str_replace("#", "#", $string);    $string = str_replace("%", "%", $string);    $length = intval($length);    if ($length > 0) {        $string = substr($string, 0, $length);    }    return $string;} 
这个函数将 HTML 特定的字符转换为 HTML 字面字符。一个浏览器对任何通过这个脚本的 HTML 以非标记的文本呈现。例如,考虑下面的 HTML 字符串:
Bold Text
一般情况下,HTML 会显示为:Bold Text但是,通过 transform_HTML() 后,它就像原始输入一样呈现。原因是处理的字符串中的标签字符串转换为 HTML 实体。transform_HTML() 的结果字符串的纯文本看起来像下面这样:
Bold Text 
该函数的实质是 htmlentities() 函数调用,它会将 <、>、和 & 转换为 <、>、和 &。尽管这会处理大部分的普通攻击,但有经验的 XSS 攻击者有另一种把戏:用十六进制或 UTF-8 编码恶意脚本,而不是采用普通的 ASCII 文本,从而希望能绕过你的过滤器。他们可以在 URL 的 GET 变量中发送代码,告诉浏览器,“这是十六进制代码,你能帮我运行吗?” 一个十六进制例子看起来像这样:
 
浏览器渲染这个信息的时候,结果就是:
 
为了防止这种情况,transform_HTML() 采用额外的步骤把 # 和 % 符号转换为它们的实体,从而避免十六进制攻击,并转换 UTF-8 编码的数据。最后,为了防止某些人用很长的输入超载字符串从而导致某些东西崩溃,你可以添加一个可选的 $length 参数来截取你指定最大长度的字符串。 [b]使用 SafeHTML
 之前脚本的问题比较简单,它不允许任何类型的用户标记。不幸的是,这里有上百种方法能使 JavaScript 跳过用户的过滤器,并且要从用户输入中剥离全部 HTML,还没有方法可以防止这种情况。当前,没有任何一个脚本能保证无法被破解,尽管有一些确实比大部分要好。有白名单和黑名单两种方法加固安全,白名单比较简单而且更加有效。一个白名单解决方案是 PixelApes 的 SafeHTML 反跨站脚本解析器。SafeHTML 能识别有效 HTML,能追踪并剥离任何危险标签。它用另一个称为 HTMLSax 的软件包进行解析。按照下面步骤安装和使用 SafeHTML:
  • 到 http://pixel-apes.com/safehtml/?page=safehtml 下载最新版本的 SafeHTML。
  • 把文件放到你服务器的类文件夹。该文件夹包括 SafeHTML 和 HTMLSax 功能所需的所有东西。
  • 在脚本中 include SafeHTML 类文件(safehtml.php)。
  • 创建一个名为 $safehtml 的新 SafeHTML 对象。
  • 用 $safehtml->parse() 方法清理你的数据。
这是一个完整的例子:
alert('XSS Attack')";// Create a safehtml object.$safehtml = new safehtml();// Parse and sanitize the data.$safe_data = $safehtml->parse($data);// Display result.echo 'The sanitized data is 
' . $safe_data;?>
如果你想清理脚本中的任何其它数据,你不需要创建一个新的对象;在你的整个脚本中只需要使用 $safehtml->parse() 方法。 什么可能会出现问题? 你可能犯的最大错误是假设这个类能完全避免 XSS 攻击。SafeHTML 是一个相当复杂的脚本,几乎能检查所有事情,但没有什么是能保证的。你仍然需要对你的站点做参数验证。例如,该类不能检查给定变量的长度以确保能适应数据库的字段。它也不检查缓冲溢出问题。XSS 攻击者很有创造力,他们使用各种各样的方法来尝试达到他们的目标。可以阅读 RSnake 的 XSS 教程http://ha.ckers.org/xss.html ,看一下这里有多少种方法尝试使代码跳过过滤器。SafeHTML 项目有很好的程序员一直在尝试阻止 XSS 攻击,但无法保证某些人不会想起一些奇怪和新奇的方法来跳过过滤器。注意:XSS 攻击严重影响的一个例子 http://namb.la/popular/tech.html,其中显示了如何一步一步创建一个让 MySpace 服务器过载的 JavaScript XSS 蠕虫。 用单向哈希保护数据 该脚本对输入的数据进行单向转换,换句话说,它能对某人的密码产生哈希签名,但不能解码获得原始密码。为什么你希望这样呢?应用程序会存储密码。一个管理员不需要知道用户的密码,事实上,只有用户知道他/她自己的密码是个好主意。系统(也仅有系统)应该能识别一个正确的密码;这是 Unix 多年来的密码安全模型。单向密码安全按照下面的方式工作:
  • 当一个用户或管理员创建或更改一个账户密码时,系统对密码进行哈希并保存结果。主机系统会丢弃明文密码。
  • 当用户通过任何方式登录到系统时,再次对输入的密码进行哈希。
  • 主机系统丢弃输入的明文密码。
  • 当前新哈希的密码和之前保存的哈希相比较。
  • 如果哈希的密码相匹配,系统就会授予访问权限。
主机系统完成这些并不需要知道原始密码;事实上,原始密码完全无所谓。一个副作用是,如果某人侵入系统并盗取了密码数据库,入侵者会获得很多哈希后的密码,但无法把它们反向转换为原始密码。当然,给足够时间、计算能力,以及弱用户密码,一个攻击者还是有可能采用字典攻击找出密码。因此,别轻易让人碰你的密码数据库,如果确实有人这样做了,让每个用户更改他们的密码。 加密 Vs 哈希 技术上来来说,哈希过程并不是加密。哈希和加密是不同的,这有两个理由:不像加密,哈希数据不能被解密。是有可能(但非常罕见)两个不同的字符串会产生相同的哈希。并不能保证哈希是唯一的,因此别像数据库中的唯一键那样使用哈希。
function hash_ish($string) {    return md5($string);}
上面的 md5() 函数基于 RSA 数据安全公司的消息摘要算法(即 MD5)返回一个由 32 个字符组成的十六进制串。然后你可以将那个 32 位字符串插入到数据库中和另一个 md5 字符串相比较,或者直接用这 32 个字符。 破解脚本 几乎不可能解密 MD5 数据。或者说很难。但是,你仍然需要好的密码,因为用一整个字典生成哈希数据库仍然很简单。有一些在线 MD5 字典,当你输入 06d80eb0c50b49a509b49f2424e8c805 后会得到结果 “dog”。因此,尽管技术上 MD5 不能被解密,这里仍然有漏洞,如果某人获得了你的密码数据库,你可以肯定他们肯定会使用 MD5 字典破译。因此,当你创建基于密码的系统的时候尤其要注意密码长度(最小 6 个字符,8 个或许会更好)和包括字母和数字。并确保这个密码不在字典中。 用 Mcrypt 加密数据 如果你不需要以可阅读形式查看密码,采用 MD5 就足够了。不幸的是,这里并不总是有可选项,如果你提供以加密形式存储某人的信用卡信息,你可能需要在后面的某个地方进行解密。最早的一个解决方案是 Mcrypt 模块,这是一个用于允许 PHP 高速加密的插件。Mcrypt 库提供了超过 30 种用于加密的计算方法,并且提供口令确保只有你(或者你的用户)可以解密数据。让我们来看看使用方法。下面的脚本包含了使用 Mcrypt 加密和解密数据的函数:
mcrypt() 函数需要几个信息:
  • 需要加密的数据
  • 用于加密和解锁数据的口令,也称为键。
  • 用于加密数据的计算方法,也就是用于加密数据的算法。该脚本使用了 MCRYPT_SERPENT_256,但你可以从很多算法中选择,包括 MCRYPT_TWOFISH192、MCRYPT_RC2、MCRYPT_DES、和 MCRYPT_LOKI97。
  • 加密数据的模式。这里有几个你可以使用的模式,包括电子密码本(Electronic Codebook) 和加密反馈(Cipher Feedback)。该脚本使用 MCRYPT_MODE_CBC 密码块链接。
  • 一个 初始化向量-也称为 IV 或者种子,用于为加密算法设置种子的额外二进制位。也就是使算法更难于破解的额外信息。
  • 键和 IV 字符串的长度,这可能随着加密和块而不同。使用 mcrypt_get_key_size() 和 mcrypt_get_block_size() 函数获取合适的长度;然后用 substr() 函数将键的值截取为合适的长度。(如果键的长度比要求的短,别担心,Mcrypt 会用 0 填充。)
如果有人窃取了你的数据和短语,他们只能一个个尝试加密算法直到找到正确的那一个。因此,在使用它之前我们通过对键使用md5() 函数增加安全,就算他们获取了数据和短语,入侵者也不能获得想要的东西。入侵者同时需要函数,数据和口令,如果真是如此,他们可能获得了对你服务器的完整访问,你只能大清洗了。这里还有一个数据存储格式的小问题。Mcrypt 以难懂的二进制形式返回加密后的数据,这使得当你将其存储到 MySQL 字段的时候可能出现可怕错误。因此,我们使用 base64encode() 和 base64decode() 函数转换为和 SQL 兼容的字母格式和可检索行。 破解脚本 除了实验多种加密方法,你还可以在脚本中添加一些便利。例如,不用每次都提供键和模式,而是在包含的文件中声明为全局常量。 生成随机密码 随机(但难以猜测)字符串在用户安全中很重要。例如,如果某人丢失了密码并且你使用 MD5 哈希,你不可能,也不希望查找回来。而是应该生成一个安全的随机密码并发送给用户。为了访问你站点的服务,另外一个用于生成随机数字的应用程序会创建有效链接。下面是创建密码的一个函数:
 0) &&        (! is_null($num_chars))) {        $password = '';        $accepted_chars = 'abcdefghijklmnopqrstuvwxyz1234567890';        // Seed the generator if necessary.        srand(((int)((double)microtime()*1000003)) );        for ($i=0; $i<=$num_chars; $i++) {            $random_number = rand(0, (strlen($accepted_chars) -1));            $password .= $accepted_chars[$random_number] ;        }        return $password;     }}?> 
使用脚本 make_password() 函数返回一个字符串,因此你需要做的就是提供字符串的长度作为参数:
 
函数按照下面步骤工作:
  • 函数确保 $num_chars 是非零的正整数。
  • 函数初始化 $accepted_chars 变量为密码可能包含的字符列表。该脚本使用所有小写字母和数字 0 到 9,但你可以使用你喜欢的任何字符集合。(LCTT 译注:有时候为了便于肉眼识别,你可以将其中的 0 和 O,1 和 l 之类的都去掉。)
  • 随机数生成器需要一个种子,从而获得一系列类随机值(PHP 4.2 及之后版本中并不需要,会自动播种)。
  • 函数循环 $num_chars 次,每次迭代生成密码中的一个字符。
  • 对于每个新字符,脚本查看 $accepted_chars 的长度,选择 0 和长度之间的一个数字,然后添加 $accepted_chars中该数字为索引值的字符到 $password。
  • 循环结束后,函数返回 $password。

作者:SamarRizvi 译者:ictlyh来源:http://www.codeproject.com/Articles/363897/PHP-Security
收起阅读 »

开发经验:如何优雅的进行页面间的跳转

在你的开发过程中,是否遇到过如下的需求: 在tableView类型的展示列表中,点击每个cell中人物头像都可以跳转到人物详情,可参见微博中的头像,同理包括转发、评论按钮、各种链接及linkcard。跳转到任意页面 产品要求,某个页面的不同banner图,点击...
继续阅读 »
在你的开发过程中,是否遇到过如下的需求:
  1. 在tableView类型的展示列表中,点击每个cell中人物头像都可以跳转到人物详情,可参见微博中的头像,同理包括转发、评论按钮、各种链接及linkcard。
  2. 跳转到任意页面

  • 产品要求,某个页面的不同banner图,点击可以跳转到任何一个页面,可能是原生的页面A、页面B,或者是web页C。
  • 在web页面,可以跳转到任何一个原生页面。
  • 在远程推送中跳转到任意指定的页面。
以上2种需求,我想大多数开发者都遇到过,并且可以实现这种功能。毕竟,这是比较基础的功能。但是代码未必那么优雅。一般处理办法针对1.,一般初学者会用target或者block等方法在tableView的代理方法拿到事件,并把要执行的跳转写到controller里。功能是可以实现的,但问题是这种cell及相似的cell(布局有些变化,或者多几个少几个控件)一般出现在多个页面。这样的话相同的代码就会出现在多个地方。就算把跳转方法抽取出来写成category,但是target或者block总是每个地方都要写的。针对2.,初级的方法是每个地方写一坨判断及跳转,高级一些是抽取出来写在基类或者category。优雅的解决办法纵观上面各种情况,总结起来就是一句话,在任意的地方触发事件(可以是推送,拦截的js跳转,各种控件的点击事件)可以跳转到任意界面。所以我们可以统一用一个控制跳转的manager来完成跳转。
  • 与后端约定好数据结构,例如:
NSDictionary *target = @{@"action" : @"user",                         @"data"   : @{@"user_id" : @(123456)}};
就是跳转到id为123456的用户页面,如果跳转需要更多的数据,可以在data的value里面继续添加。
  • 创建一个用来跳转的类,可以起的牛x的名字,XXCoreActionManager。
创建一个类方法:
+ (BOOL)doActionForTarget:(NSDictionary *)target{    //根据你的app结构,来取得你当前的controller,由它来进行跳转    UIApplication *application = [UIApplication sharedApplication];    AppDelegate *myAppDelegate = (AppDelegate *)[application delegate];    UIViewController *viewController;    if ([myAppDelegate getTabbarSelectedView]) {        viewController = [myAppDelegate getTabbarSelectedView].visibleViewController;    }else {        return NO;    }    if([json[@"action"] isEqualToString:@"film_view"]){        MFMaterialListViewController *materialListVC = [[MFMaterialListViewController alloc] initWithNibName:@"MFMaterialListViewController" bundle:nil];        materialListVC.hidesBottomBarWhenPushed = YES;        materialListVC.filmId = json[@"data"][@"film_id"];        [viewController.navigationController pushViewController:materialListVC animated:YES];        return YES;    }else if([json[@"action"] isEqualToString:@"home"]){        [myAppDelegate getTabbar].selectedIndex = 0;        [viewController.navigationController popToRootViewControllerAnimated:YES];        return YES;    }    return NO;}
在刚才定义的数据结构中,action的值为需要跳转的页面,data的值跳转所需要要的参数,比如id、type等。服务器只需要传入相应的数据就可以用
[XXCoreActionManager doActionForTarget:target];
  • 针对头像、评论、转发等多处使用的子控件,可以把事件由自己接收,通过XXCoreActionManager来进行跳转。即做到了代码分离,使之成为真正独立的控件,便于复用。
下面是一个简单例子:
implementation MFUserHeadButton-(void)awakeFromNib{    [self addTarget:self action:@selector(toUserDetail) forControlEvents:UIControlEventTouchUpInside];}- (void)toUserDetail{    NSDictionary *target = @{@"action":@"user",                           @"data":@{@"user_id":@(self.tag)}};    [XXCoreActionManager doActionForTarget:target];}
这就是一个简单的实现跳转到个人页功能的头像控件实现。如果你问user_id的值怎么来的?当然是configCell的时候传给view的tag的。你可能会说,我的跳转需要多个参数啊,你一个tag不够用啊亲。可以定义一个NSDictionary属性接收啊。如果你用原生的UI控件,那让强大的runtime给你加喽
- (void)setDict:(NSDictionary *)dict {        objc_setAssociatedObject(self, dictKey, dict, OBJC_ASSOCIATION_RETAIN_NONATOMIC);}- (NSDictionary *)dict {        return objc_getAssociatedObject(self, dictKey);}
总结[list=1]
  • 通过XXCoreActionManager,你可以做到无论你身在何处(哪一个controller),要到何处去(跳转到哪一个controller),你只需要叫来XXCoreActionManager,告诉它你的目的地(target)。你就可以做到想跳就跳。真正的write once,use anywhere。
  • 针对各种有跳转功能的控件,可以做到真的解耦。只需要把它放到他需要显示的位置。告诉它对应的参数就可以了。方便复用和后期的维护。
  • 这次想说的只是一个思路,代码很简单。其实可以使用的地方还有很多。不只是跳转各位童鞋可以自己思考。有什么不明白的可以留言,如果觉得那里不合适更欢迎留言指教或交流。


  • 写在后面的废话

    从读大学接触到计算机技术这一领域,我就被这个圈子的氛围深深的触动了,这是一个如此自由、分享、开放的圈子。我从无数人的的分享中汲取着知识(开源的代码,分享的博客),我受益于这种环境,我就想对它做出回馈,写出这篇文章,即希望能帮助一些人,也希望能与大家有更多的交流。最后,谢谢那些无私的做出各种奉献的人。
     
    来源:csdn 收起阅读 »

    环信移动客服“智能知识库+智能机器人”技术开启3.0时代

    7月28日,环信B轮融资及移动客服新品发布会在北京JW万豪酒店举行。发布会上,环信CEO刘俊彦宣布环信成功获得B轮融资1250万美元。同时环信CTO马晓宇宣布环信移动客服3.0产品也正式上线,而环信移动客服凭借IM长连接垄断技术结合“智能知识库+智能机器人” ...
    继续阅读 »
    7月28日,环信B轮融资及移动客服新品发布会在北京JW万豪酒店举行。发布会上,环信CEO刘俊彦宣布环信成功获得B轮融资1250万美元。同时环信CTO马晓宇宣布环信移动客服3.0产品也正式上线,而环信移动客服凭借IM长连接垄断技术结合“智能知识库+智能机器人” 组合技术将开启移动客服3.0新时代。


    1.png



    环信CTO马晓宇现场解读环信移动客服3.0

    传统的客服行业是一个劳动密集型企业,因为人力成本的不断提高,导致传统呼叫中心已经从北上广转移到大连、成都等地,未来甚至将要迁往新疆、西藏、青海等人力成本更低的地方。环信CEO马晓宇表示环信希望通过技术来解决人力成本不断升高的问题,所以环信适时推出了智能的移动客服系统。


    2.png



    智能的两个要素
    • 一个是智能知识库;
    • 一个智能机器人。

    智能知识库环信移动客服3.0版本会内置几个标准的行业知识库,基于人工智能深度挖掘技术,比较容易维护这个知识库,大家如果用得越多,知识库会更敏感,更能够快速回答问题。如果有一个用户说我要重置密码,智能知识库系统自动在客服工作端显示出重置密码的流程,客服就可以根据标准流程走下来。还有一个智能机器人技术,环信移动客服将智能机器人技术和知识库结合,能够解决回答80%的常见问题,剩下的20%才需要人工来解决

    另外,环信在移动客服里开始逐渐部署了大数据技术,环信会提供15个新的数据统计报表,从最简单的客服当前工作状态,客服每天工作量,客服会话小结等。在这基础上提供渠道统计报表,就可以知道你的客服用户需求,比如是来自微信还是移动APP还是网页,做一些渠道分析。另外我们还提供用户满意度报表,这样不光能提高整个用户满意度,同时我们希望这个产品是能帮助APP运营者,开发者能快速迭代,能真正尽快改进产品,不断满足客户需求。帮助客户将客服系统从成本中心向营销中心和盈利中心转换

    最后马晓宇表示环信移动客服是一个开放平台,整个内部是平台插件化可扩展化体系,通过插件形式打造可扩展的平台,希望基于这个满足SaaS服务成千上万客户不同需求,可以进行二次开发。同时在这个基础上环信还有一个生态圈部署。现在环信有几个合作伙伴,私有云部署有两家私有云授权认证集成商,移动客服领域有两家做增值服务的授权认证集成商,我们希望环信能继续发展下去,发展过程中和合作伙伴一起把市场做好,让我们的合作伙伴也的确能挣到钱。

    据悉,环信移动客服典型用户包括国美在线、58到家、楚楚街9块9等上百家互联网巨头企业客户,累计签约客服座席已经达4万个。根据艾媒咨询现场发布的《2015年中国移动客服市场发展研究报告》显示环信在新兴的移动客服市场占有率第一,APP客户规模最大。不难预料,有着连接“人与商业”愿景的环信凭借惊人的成长速度将最有希望成为下一个“独角兽”。 收起阅读 »

    环信移动客服3.0上线签约国美在线、58到家、楚楚街9块9等龙头企业

    7月28日,环信B轮融资及移动客服新品发布会在北京JW万豪酒店举行。发布会上,环信CEO刘俊彦宣布,环信成功获得B轮融资,同时环信移动客服3.0产品也正式上线,而环信将以“连接人与商业”为愿景,开启万亿级企业云服务市场。 据悉,环信移动客服产品已...
    继续阅读 »
    7月28日,环信B轮融资及移动客服新品发布会在北京JW万豪酒店举行。发布会上,环信CEO刘俊彦宣布,环信成功获得B轮融资,同时环信移动客服3.0产品也正式上线,而环信将以“连接人与商业”为愿景,开启万亿级企业云服务市场。


    5.png



    据悉,环信移动客服产品已经有国美在线、58到家、楚楚街等大批龙头企业签约,累计签约客服座席已经达4万个,而按艾媒咨询的报告显示,环信已占据市场份额第一的宝座

    发布会现场,据启动环信移动客服3.0产品上线的环信CTO马晓宇介绍,环信之所以受到市场如此欢迎,是因为环信移动客服是有别于传统客服的划时代产品。在环信CTO马晓宇看来,客服经历了三个时代——
    1. 传统 call center的时代: 互联网尚未普及,电话客服客户等待时间长,客户服务人员压力大,工作重复内容多;
    2. 到了PC网页客服时代,随着互联网的普及,网页客服的成本明显小于电话客服,客户服务人员工作量较小,客户满意度有所提高,但相应依然不能及时有效;
    3. 当今,随着智能手机用户的快速增长,客户要求能够随时在移动端获取咨询服务。移动端客服的重要性将不断上升。移动客服时代随之到来。



    9.png


    然而在环信基于IM长连接技术推出移动客服之前,业界并没有一款真正适合移动端和社交化时代的可靠的云端移动客服产品。此前,业界普遍存在的是两种移动客服产品
    1. 一类是工单客服,可以被视为移动客服1.0,基于工单方式和客服交互,技术实现简单,但无法做到实时交互,沟通效率低,用户体验差。
    2. 另一类是轮询技术客服,可以被视为移动客服2.0,基于HTTP轮询技术,通过不断向服务器发送查询请求来准实时的收取消息。不能做到实时收取消息,流量和电量消耗高,APP在后台时无法接收消息,容易丢失客户。

    而环信推出的移动客服产品是业界唯一一款具有IM长连接技术的移动客服产品,这被视为更适合移动端的客服产品。

    这一类型的移动客服可以定义为“交互型智能移动客服”,可以被视为移动客服3.0,以环信为代表的这一类新型移动客服是基于亿级IM长连接,系统稳定;智能机器人技术可处理大部分重复问题。相较环信移动客服的能力,传统的电话、工单、轮询客服在移动端和社交趋势下就显得捉襟见肘,有些OUT了。
     
    • 环信移动客服实现了跨平台多渠道接入:支持 App、微信公众账号、微博、网页等,均可以快速统一接入客户服务后台管理。

    8.png

    • 其次,满足了开放性与自定义信息:这种新型的移动客服实现了代码开源、UI开源,还提供多套UI模版,便于与APP快速集成,平滑接入。同时第三方集成功能也很强大,可与第三方工单、知识库、CRM 系统等进行扩展集成。
    • 第三,富媒体消息交互体验:移动客服平台提供了基于IM技术的类似微信体验的友好富媒体消息交互,不仅可以实时收发文字、表情,还可以即时收发图片、位置、实时语音、还可自定义消息,大大方便了与客户的沟通交流。
    • 第四,精准客户画像功能:移动客服的IM沟通帮助企业辅助判断客户需求与诉求,通过自定义客户分类标签,客户再次访问时可获知客户的类型。并且还支持自定义会话小结,根据会话小结统计会话的分类,通过会话小结追踪客户诉求。通过轨迹分析功能,即通过发送客户访问页面的轨迹,判断客户意图,获取客户个性化细节,了解客户基础信息,分析客户行为,可以极大提高订单效率。
    • 第五,“智能机器人+智能知识库”:作为一套智能化的客服系统,让企业建立基于业务的智能知识库,智能辅助归结业务信息和应答客户信息,历史常见问题系统梳理,提高客服效率。“智能机器人+智能知识库”组合目前可自动回复80%常见问题,随着智能知识库的不断训练,这一比例能够提高到90%。
    • 第六、真正实现不丢订单:环信是中国乃至全球领先的即时通讯云服务提供商,上线1年来,已成为唯一一家经历了亿级长连接真实稳定运行的即时通讯云平台,中国主流的采用第三方即时通讯云服务的App几乎都是环信的客户,每日环信平台的消息量达到数亿条,有着即时通讯云领域亿级长连接的绝对垄断优势。环信基于IM长连接技术,帮助企业实现超线拉取排队会话,让等待时间过长或有订单需求的客户得到优先服务,提升客服效率,即使客户关闭会话,退出App,甚至关闭手机,基于IM长连接技术依然能找回客户会话,提升客服效率,不丢客户订单。同时,基于IM长连接技术,即使在断网或复杂网络切换时也依然能找回客户会话,不丢客户订单。
    • 第七、实现了质检系统透明管理:移动客服自带实时监控系统,可实时监控当前所有会话,管理员在线质检,在线查看会话信息,还提供了历史会话查询、质检考核。通过实时与历史查看,可以统计出客服代表的接入量、在线时间及应答等待时间。



    6.png


    环信CTO Johnson向大家介绍客服产品

    总之,通过部署环信移动客服,较于传统客服产品可以节省成本约60%,在移动端省电省流量高达80%,同时留住70%会话客户,订单量和客单价均可以获得不同幅度提升。 收起阅读 »

    环信移动客服受电商青睐背后:社交经济时代的全渠道营销变革

    2015年7月28日,环信B轮融资发布会如期召开了。据了解,此轮环信共获得1250万美元融资。至此,环信已经在1年内完成了4轮融资,前三轮分别是2014年5月经纬中国天使伦融资500万人民币,2014年8月SIG A轮融资500万美金,2014年10红杉300...
    继续阅读 »
    2015年7月28日,环信B轮融资发布会如期召开了。据了解,此轮环信共获得1250万美元融资。至此,环信已经在1年内完成了4轮融资,前三轮分别是2014年5月经纬中国天使伦融资500万人民币,2014年8月SIG A轮融资500万美金,2014年10红杉300万美金A+轮融资。


    QQ截图20150729110432_conew1.png



    这一轮融资依然被前几轮老股东“三巨头”内部瓜分,领头的是红杉资本、经纬中国和SIG跟投,诸多投资机构欲进无门,望而兴叹。发布会现场,依然有VC代表赶来想碰碰运气,追着环信的人问未来还有没有进入的可能。


    3_conew1.png



    经纬副总裁 熊飞 给环信刘俊彦 颁发融资支票

    这现象的不同寻常之处在于,这是一个做2B领域的创业项目,此前受到业界如此猛烈追捧的一般都是2C的企业。为何环信一个做2B业务的企业会猛然间冒出来受到如此关注?
     
    据了解,让环信炙手可热的是其背后蕴含的巨大商机。而支撑环信估值暴涨的商机正是近来被业界关注的万亿级企业云服务市场前景,而且环信的“即时通讯云+移动客服”业务切中的恰是企业云服务市场王冠上的宝钻。
     
    2015年将成为企业云服务市场的爆发元年,这一端倪在企业云服务市场率先爆发的美国已经十分清晰。据有关专家分析,在过去的1年时间里美国的企业服务市场,已经有超过15家企业IPO,他们的募集资金达到70亿美元,总市值超过400亿美元,其中有Zendesk、Hubspot、New Relic、Hortonworks、Box等不少明星企业。而且,美国目前这样规模的企业云市场还正处在从青年走向壮年的阶段。据分析,从市值排名前十的云计算企业服务公司的市值总和看,2008年市值总和是250亿美元,到2015年这一数字已经是1800亿美元了,7年里增长了超过7倍。而预计到2016年,美国才会出现第一个云服务市场占有率超过传统软件的垂直领域,就是CRM。而“客服”是CRM四大细分市场之一。而且,客服是CRM细分领域中最大的一个,占市场总额的37%。在北美,2015年客服软件市场采购总额高达96亿美元。这个市场中已经出现了两家“独角兽”公司,就是近来受到各界关注和追捧的Zendesk和Freshdesk。


    1_conew1.png


    环信北美对标公司
     
    中国的市场机会可能比美国更令人兴奋,在中国企业云服务市场还是一片空白。相交美国,为企业2700万家企业客户,提供云服务的三家大的领军公司Oracle、SAP、Salesforce市值总和在3500亿美金左右。而中国,目前有2200万企业,但中国至今还没有百亿美元身价的公司甚至还没有基于SaaS的10亿美元身价的公司。这也许正是最先能嗅到风信的VC们挤破头的想投环信的缘由。

    有意思的是,据记者发现,由于无法进入环信的投资圈,VC们并没有放弃这一领域的赌胜机会和投资热情。因而,自从环信变得越来越炙手可热但却望而兴叹后,业界“类环信”项目在连带效应下成为VC们宣泄相对过剩资金的一个突破口。近来有不少作为环信影子的公司,或者学环信的公司获得了融资,甚至有创业者表示:环信成功之前,“类环信”公司想拿融资,得跟投资人费一番口舌,而环信成功后,“类环信”只要拿换新的概念改一改说自己做的跟环信一样就通过了。

    更有意思的是,在环信的IM云+客服模式被证明获得成功之后,百度、阿里、腾讯、金蝶、个推等相继跟随,推出了自己的IM业务,虽然,被大平台追逐,但在环信CEO刘俊彦看来这并没有什么可怕的,环信积累的技术优势和市场优势不是一两天能追得上的。据了解,环信的根基——即时通讯云能达到亿级稳定长连接并不容易,以环信网罗的中国IT界最顶尖的IM技术精英,需要至少1年时间了解服务器架构,真实稳定积累千万、亿万系统的维护经验。但一家100人的创业企业得到BAT带头的互联网巨头公司的特别“关照”,还是人感到兴奋的。

    还有值得关注的是,环信也引起了美国Zendesk和layer的足够重视,在环信公布“连接人与商业”的愿景后,我们可以看到Zendesk的官网增加了一句类似的话:Zendesk brings companies and their customers closer together.

    同时,也传闻Zendesk正在收购整合提供IM服务的公司,而layer也有被传闻称将推类似环信的业务。 收起阅读 »

    一个双网卡导致的网络故障

    内网有个机器有2个网卡,并且是不同的网段和网关。 其中的B服务器有2个网卡。这个时候我们就只有默认网关为10.1.1.1 那查看路由表就是如下[root@localhost ~]# ip route show table all 10.1.1.0/...
    继续阅读 »
    内网有个机器有2个网卡,并且是不同的网段和网关。


    network.png


    其中的B服务器有2个网卡。这个时候我们就只有默认网关为10.1.1.1 那查看路由表就是如下
    [root@localhost ~]# ip route show table all
    10.1.1.0/24 dev eth0 proto kernel scope link src 10.1.1.247
    10.1.2.0/24 dev eth1 proto kernel scope link src 10.1.2.239
    169.254.0.0/16 dev eth0 scope link metric 1002
    169.254.0.0/16 dev eth1 scope link metric 1003
    default via 10.1.1.1 dev eth0

    [root@localhost ~]# ip rule show
    0: from all lookup local
    32766: from all lookup main
    32767: from all lookup default

    这个时候我们可以发现,从1网段到1网段来回都没有问题,2网段来回也没有问题。但是从server A到server B的2网段是不通的。 因为你去到2网段后,server B的默认路由是10.1.1.1。
    所以我们需要设置server B上,来自哪个网卡的路由就从哪个网卡出去。这样server A到server B的2网段就没有问题了。

    首先添加2个route table
    $ cat /etc/iproute2/rt_tables
    #
    # reserved values
    #
    255 local
    254 main
    253 default
    252 lan1
    251 lan2
    0 unspec

    然后再添加ip route和ip rule
    ip route flush table lan1
    ip route add default via 10.1.1.1 dev eth0 src 10.1.1.247 table lan1
    ip rule add from 10.1.1.247 table lan1

    ip route flush table lan2
    ip route add default via 10.1.2.1 dev eth1 src 10.1.2.239 table lan2
    ip rule add from 10.1.2.239 table lan2

    这个时候我们再查看路由表如下
    [root@localhost ~]# ip route show all
    10.1.1.0/24 dev eth0 proto kernel scope link src 10.1.1.247
    10.1.2.0/24 dev eth1 proto kernel scope link src 10.1.2.239
    169.254.0.0/16 dev eth0 scope link metric 1002
    169.254.0.0/16 dev eth1 scope link metric 1003
    default via 10.1.1.1 dev eth0

    [root@localhost ~]# ip rule show
    0: from all lookup local
    32764: from 10.1.2.239 lookup lan2
    32765: from 10.1.1.247 lookup lan1
    32766: from all lookup main
    32767: from all lookup default

    这个时候从表面上似乎解决了问题,从server A访问server B的2网段也能正常返回,从server C访问server B的1网段也可以正常返回。
    但是我们发现,这个时候从server B访问server A的1网段的时候,一直网络状态在SYN的状态。


    half-tcpdump.png


    上面tcpdump的结果我们发现是有很多的TCP重传。这个时候我们发现,上面的ip rule只是设定了,来自2网段的走lan2(又设定了src为自己), 来自1网段的走lan1(又设定了src 为自己的IP)。而没有设定如果主动出去是怎么样的。
    因此我们把上面的ip rule加了2条.
    ip route flush table lan1
    ip route add default via 10.1.1.1 dev eth0 src 10.1.1.247 table lan1
    ip rule add from 10.1.1.247 table lan1
    ip rule add from 10.1.1.247 to 10.1.1.0/24 table main

    ip route flush table lan2
    ip route add default via 10.1.2.1 dev eth1 src 10.1.2.239 table lan2
    ip rule add from 10.1.2.239 table lan2
    ip rule add from 10.1.2.239 to 10.1.2.0/24 table main

    然后我们查看路由表如下:
    [root@localhost ~]# ip route show table all
    default via 10.1.1.1 dev eth0 table lan1 src 10.1.1.247
    10.1.1.0/24 dev eth0 proto kernel scope link src 10.1.1.247
    10.1.2.0/24 dev eth1 proto kernel scope link src 10.1.2.239
    169.254.0.0/16 dev eth0 scope link metric 1002
    169.254.0.0/16 dev eth1 scope link metric 1003
    default via 10.1.1.1 dev eth0
    default via 10.1.2.1 dev eth1 table lan2 src 10.1.2.239

    [root@localhost ~]# ip rule show
    0: from all lookup local
    32762: from 10.1.2.239 to 10.1.2.0/24 lookup main
    32763: from 10.1.2.239 lookup lan2
    32764: from 10.1.1.247 to 10.1.1.0/24 lookup main
    32765: from 10.1.1.247 lookup lan1
    32766: from all lookup main
    32767: from all lookup default

    从上面这个例子中可以窥见,平时我们用netstat -rn这样来查看路由是没有问题的,但是当出现自定义route table的时候,我们需要注意的一些东西,一个是route table本身,还有是ip rule去定义使用哪个table。
    作者:崔永强
      收起阅读 »

    luckyOne - HTML5&CSS3抽奖小程序

    程序可用于各类活动,如年会、发布会等。 支持回车和空格键控制。   附件中是环信本次发布会使用的版本。 空格/回车控制抽奖的启动和开始,由于中奖者大图弹出是现场第二轮抽奖时临时加的,不完善。每次启动停止后需F5刷新重新开始新的一轮。最后按键盘"o"键有...
    继续阅读 »
    程序可用于各类活动,如年会、发布会等。
    支持回车和空格键控制。
     
    附件中是环信本次发布会使用的版本。
    空格/回车控制抽奖的启动和开始,由于中奖者大图弹出是现场第二轮抽奖时临时加的,不完善。每次启动停止后需F5刷新重新开始新的一轮。最后按键盘"o"键有个结束特效幻灯片。

    通用版请访问Github库:https://github.com/haozki/luckyOne
    欢迎大家下载使用和交流。 收起阅读 »

    wordpress静态化

    下面这个是结合了很多参考加上自己实践最终确认能用的。不过这个还是跟主题有很大关系。不是所有主题都是可以完全转成静态的。下面这个配置文件是nginx的,apache的用户就没有这样的烦恼了。 大部分主题都是可以使用的,但是有些加了一些动态验证这样代码的,要那样的...
    继续阅读 »
    下面这个是结合了很多参考加上自己实践最终确认能用的。不过这个还是跟主题有很大关系。不是所有主题都是可以完全转成静态的。下面这个配置文件是nginx的,apache的用户就没有这样的烦恼了。
    大部分主题都是可以使用的,但是有些加了一些动态验证这样代码的,要那样的就只能用fastcgi cache来进行处理了。
    这里使用的是wordpress的supercache模块。
    upstream php-fpm {
    server unix:/var/run/phpfpm.sock;
    }

    server {
    listen 80;
    server_name timo.piqiu.me;

    root /opt/web/wordpress;
    index index.php;

    access_log logs/timo.piqiu.me.access.log proxy;
    error_log logs/timo.piqiu.me.error.log;

    location = /favicon.ico {
    log_not_found off;
    access_log off;
    }

    location = /robots.txt {
    allow all;
    log_not_found off;
    access_log off;
    }

    location ~ /\.svn/* {
    deny all;
    }

    location ~ /\.git/* {
    deny all;
    }

    location /nginx_status {
    stub_status on;
    access_log off;
    }

    set $cache_uri $request_uri;

    # POST requests and urls with a query string should always go to PHP
    if ($request_method = POST) {
    set $cache_uri 'null cache';
    }
    if ($query_string != "") {
    set $cache_uri 'null cache';
    }

    # Don't cache uris containing the following segments
    if ($request_uri ~* "(/wp-admin/|/xmlrpc.php|/wp-(app|cron|login|register|mail).php|wp-.*.php|/feed/|index.php|wp-comments-popup.php|wp-links-opml.php|wp-locations.php|sitemap(_index)?.xml|[a-z0-9_-]+-sitemap([0-9]+)?.xml)") {
    set $cache_uri 'null cache';
    }

    # Don't use the cache for logged in users or recent commenters
    if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_logged_in") {
    set $cache_uri 'null cache';
    }

    # Use cached or actual file if they exists, otherwise pass request to WordPress
    location / {
    try_files /wp-content/cache/supercache/$http_host/$cache_uri/index.html $uri $uri/ /index.php ;
    }
    location ~ \.php$ {
    try_files /wp-content/cache/supercache/$http_host/$cache_uri/index.html $uri $uri/ /index.php ;
    fastcgi_pass php-fpm;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME /opt/web/wordpress$fastcgi_script_name;
    fastcgi_intercept_errors on;
    include fastcgi_params;
    #
    # fastcgi_cache cache_fastcgi;
    #
    # fastcgi_cache_valid 200 302 301 24h;
    # fastcgi_cache_valid any 1m;
    #
    # fastcgi_cache_min_uses 1;
    #
    # fastcgi_cache_use_stale error timeout invalid_header http_500;
    # fastcgi_cache_key $request_method://$host$request_uri;
    }

    # Cache static files for as long as possible
    location ~* .(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|css|rss|atom|js|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {
    expires max; log_not_found off; access_log off;
    }

    location ~ ^/(status|ping)$ {
    include /opt/server/nginx/conf/fastcgi_params;
    fastcgi_pass unix:/var/run/phpfpm.sock;
    fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
    allow 127.0.0.1;
    deny all;
    }
    }
    收起阅读 »

    redis replication问题一解

    公司有个redis比较大,同时又是跨IDC同步,但是最近发现一旦连接断了之后,好久都不能完全同步。 查看了一下log。[12826] 01 Apr 16:54:37.675 # I/O error trying to sync with MASTER: co...
    继续阅读 »
    公司有个redis比较大,同时又是跨IDC同步,但是最近发现一旦连接断了之后,好久都不能完全同步。

    查看了一下log。
    [12826] 01 Apr 16:54:37.675 # I/O error trying to sync with MASTER: connection lost
    [12826] 01 Apr 16:54:38.555 * Connecting to MASTER 10.x.x.x:6379
    [12826] 01 Apr 16:54:38.555 * MASTER <-> SLAVE sync started
    [12826] 01 Apr 16:54:38.621 * Non blocking connect for SYNC fired the event.
    [12826] 01 Apr 16:54:38.692 * Master replied to PING, replication can continue...
    [12826] 01 Apr 16:54:45.229 * MASTER <-> SLAVE sync: receiving 390598473 bytes from master

     
    通过info观察也是一直去master上同步,有时候看着马上就完成了,就报以上的错误。 以前使用redis很老的版本2.4一直都没有这样的问题,自从换了2.6以后才出现这样的问题的。
    放狗查了下原来是 client-output-buffer-limit  这个参数导致的。默认是:
    client-output-buffer-limit slave 256mb 64mb 60

    但是不是很明白这个参数的含义,看了redis文档还正有说这个的。

    大体意思就是如下:

    hard limit是一旦redis到达这个值后会马上关闭client连接。
    soft limit是一种依赖于时间的。 比如一个soft limit被设置为32MB 10s, 那就意味着当client的output buffer超过32MB,并且持续10秒钟,那这个连接就会被断开。

    默认值就是hard 为256M, soft为 32M 60秒

    普通客户端的默认limit为0, 就是任何时候都没有limit,因为普通的client使用阻塞来实现发送命令和接收完整的返回,在发送下一个命令之前,所以在普通的client的情况下关闭连接是不合适的。

    但是要特别注意pub/sub客户端,这种方式一次处理和输出的数据都会特别大。

    我们可以使用config set 来进行设置,但是注意使用config set的时候不支持MB,GB 这样的单位。
    下面这个是redis官网的一个具体说明:

    http://redis.io/topics/clients
    Output buffers limits

    Redis needs to handle a variable-length output buffer for every client, since a command can produce a big amount of data that needs to be transferred to the client.

    However it is possible that a client sends more commands producing more output to serve at a faster rate at which Redis can send the existing output to the client. This is especially true with Pub/Sub clients in case a client is not able to process new messages fast enough.

    Both the conditions will cause the client output buffer to grow and consume more and more memory. For this reason by default Redis sets limits to the output buffer size for different kind of clients. When the limit is reached the client connection is closed and the event logged in the Redis log file.

    There are two kind of limits Redis uses:
    • The hard limit is a fixed limit that when reached will make Redis closing the client connection as soon as possible.
    • The soft limit instead is a limit that depends on the time, for instance a soft limit of 32 megabytes per 10 seconds means that if the client has an output buffer bigger than 32 megabytes for, continuously, 10 seconds, the connection gets closed.
    Different kind of clients have different default limits:
    • Normal clients have a default limit of 0, that means, no limit at all, because most normal clients use blocking implementations sending a single command and waiting for the reply to be completely read before sending the next command, so it is always not desirable to close the connection in case of a normal client.
    • Pub/Sub clients have a default hard limit of 32 megabytes and a soft limit of 8 megabytes per 60 seconds.
    • Slaves have a default hard limit of 256 megabytes and a soft limit of 64 megabyte per 60 second.


    It is possible to change the limit at runtime using the CONFIG SET command or in a permanent way using the Redis configuration file redis.conf. See the exampleredis.conf in the Redis distribution for more information about how to set the limit.
    作者:戚俊奇 收起阅读 »