之前,微信上的公众帐号也就是以推送信息和做客服为主,自定义回复也相对较薄弱。近日,微信公众平台开放了自定义回复接口,这让公众号能够实现的功能就变的越来越多。
我们知道已经有几家公司通过这个接口实现了比较高级的功能,比如“订酒店”这个帐号。当用户在微信中把自己当前的地理位置(微信可以直接发送地图信息)发送给订酒店之后,订酒店会回复一条信息,告诉用户附近有哪些酒店可以预订,并提供订房的费用和电话号码。再比如白鸦做的“逛”,用户向逛的帐号发送“鞋子”等商品信息,逛会自动回复三条图文并茂的鞋子信息给用户,点击可直接进入逛的移动版页面。
微信公众平台“订酒店”的订房功能是如何实现的,运用什么原理?by kentzhu,快捷酒店管家首席客服
微信自定义机器人的最初需求样本 by 白鸦,Guang.com创始人
受上面两个Case的启发,我结合官方提供的PHP示例做了一个微信版的有道词典”可可翻译“,微信号:kkfanyi,大家可以体验下。
我用Balsamiq Mockups画了一张图来说明微信翻译机器人是如何工作的。首先用户发送文本信息或地理位置信息,然后微信平台将它POST到之前我们预先设置的URL上,也就是一个PHP程序,程序向有道翻译API或百度地图Place API发送请求得到相关的数据(以JSON的形式返回),然后按微信的格式要求组成XML数据,微信理解后以文本形式回复给用户。
技术难点
在开发这个微信翻译机器人的过程中,我遇到了三大技术难点:
1.如何获取有道翻译结果?
2.如何获取用户的地理位置信息(纬度,经度)并从百度地图拿数据?
3.如何判断用户发送的是文本信息还是地理位置信息?
坦率的讲,在做可可翻译的过程中我走了不少的弯路,内外因都有。内因是自己毕竟还只是PHP初学者,在写代码的过程中经常因符号错误等问题耽误了不少时间。外因是腾讯给的PHP示例太TM弱爆了,很难想象出自企鹅这种大公司之手,如果直接用的话是不能返回消息结果的,必须加上$wechatObj->responseMsg();才行,位置信息获取也没有给出demo,官方的开发文档只给了XML数据的格式。还有就是现在的程序员都太自私了,网上搜到的跟微信公众号自定义回复接口开发的技术文章不超过10篇(还有很多是互相抄袭的),在官方开发群也不敢轻易发言,人家动不动就给你提钱的事,哎,桑心啊,不说了。
直接上代码
1.function language($value)函数,通过文本信息获取有道翻译结果。
2.function maps($location)函数,通过经纬度获取百度地图的数据。
3.根据用户发送的地理位置信息获取经纬度。
4.判断用户发送的是文本信息还是地理位置信息。
有童鞋问我为什么不直接上源码而要以截图的方式呈现,原因很简单,不想大家成为伸手党。
写在最后(摘自36Kr)
提供个性化服务的公众帐号,其实就是一个lite版的app。
假设你现在要解决这三个需求:订酒店、查看附近美食、美化图片,那么你需要分别装3个app。但是在微信中,你只要关注3个公众帐号就可以实现这些功能(比如向图片处理类公众帐号发一张图片,对方处理后返回一张带滤镜效果的图给你)。也就是说每一个公众帐号,都是一个app。只是功能相对原生app来说没有那么强大。
我猜测的是,目前 app store 上已经有的分类下的应用,可能微信都会把它们接入进来。而微信本身,我们也将能够看到类似 app store那样,把公众帐号按各个分类展示出来让大家去关注,让各个开发者在微信平台上自由发挥。那时,微信将成为一个类似于 app store 的 store 平台。
作者:@可可_blog