微信公众号实现智能聊天-接入第三方智能机器人平台
我已将博客放到csdn平台了,后面也是打算在csdn上编写博客,本文在csdn博客的地址:http://blog.csdn.net/wsa518/article/details/51112020
上一篇博客我介绍了如何申请一个新浪云,并创建一个云应用,应用的开发语言为PHP。这篇博客将详细介绍编码实现微信公众号智能聊天功能。
大家先打开微信公众号的开发文档:https://mp.weixin.qq.com/wiki,找到“接入指南”
解压缩后修改文件名并拷贝到我们的项目(从新浪云svn上Check Out下来的项目)中,如下图所示(这里我删除了“config.yaml”文件和替换了“index.php”文件):
现在我们通过svn将代码提交到新浪云上,去微信公众号后台的“开发” -> “基本配置”中修改下配置:
先创建一个名叫TuringRobot类,用来处理图灵机器人的逻辑,这里我暂时只实现了图灵机器人的文本、链接、新闻和菜谱消息的处理,有兴趣的可以再深入研究下其他类型的回复:
<?php
/*** Created by PhpStorm.* User: Ainsworth* Date: 16/4/9* Time: 下午5:20*/define("TURING_API_URL", "http://www.tuling123.com/openapi/api");
define("TURING_API_KEY", "您申请的图灵机器人Api Key");class TuringRobot
{/*** 获取图灵机器人的回复** @param $content* @param $user_id* @return string*/public function getInfo($content, $user_id){$url = TURING_API_URL . "?key=" . TURING_API_KEY . "&info=" . $content . "&userid=" . $user_id;$ch = curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);$output = curl_exec($ch);curl_close($ch);return json_decode($output, true);}/*** 回复文本消息** @param $info* @return mixed*/public function textInfo($info){return $info["text"];}/*** 回复链接消息** @param $info* @return string*/public function linkInfo($info){return $info["text"] . "\n" . $info["url"];}/*** 回复新闻消息** @param $info* @return string*/public function newsInfo($info){$news = $info["text"] . "\n\n";$list = $info["list"];foreach ($list as $l) {error_log($l["icon"]);$news .= $l["article"] . "\n" . $l["detailurl"] . "\n";}return $news;}/*** 回复菜谱消息** @param $info* @return array*/public function cookbookInfo($info){$new_list = array();$list = $info["list"];for ($i = 0; $i < count($list); $i++) {// 由于微信图文消息最多发8条, 所以这边限制下if ($i > 8) break;$new_list[$i] = array("title" => $list[$i]["name"],"description" => $list[$i]["info"],"picurl" => $list[$i]["icon"],"url" => $list[$i]["detailurl"]);}error_log(serialize($new_list));return $new_list;}}
接下来我们回到index.php文件中,在wechatCallbackapiTest类中加入文本和图片消息的微信回复格式处理:
/*** 回复文本消息模板** @param $obj* @param $content* @return string*/
private function textTemplate($obj, $content)
{$time = time();return "<xml><ToUserName><![CDATA[$obj->FromUserName]]></ToUserName><FromUserName><![CDATA[$obj->ToUserName]]></FromUserName><CreateTime>$time</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[$content]]></Content></xml>";
}/*** 回复图文消息模板** @param $obj* @param $news* @return string*/
private function newsTemplate($obj, $news)
{$time = time();$num = count($news);$textTpl = "<xml><ToUserName><![CDATA[$obj->FromUserName]]></ToUserName><FromUserName><![CDATA[$obj->ToUserName]]></FromUserName><CreateTime>$time</CreateTime><MsgType><![CDATA[news]]></MsgType><ArticleCount>$num</ArticleCount><Articles>";foreach ($news as $new) {$textTpl .= $this->transmitNewItem($new["title"], $new["description"], $new["picurl"], $new["url"]);}$textTpl .= "</Articles></xml>";return $textTpl;
}private function transmitNewItem($title, $description, $picurl, $url)
{return "<item><Title><![CDATA[$title]]></Title><Description><![CDATA[$description]]></Description><PicUrl><![CDATA[$picurl]]></PicUrl><Url><![CDATA[$url]]></Url></item>";
}
写好后,加入一个处理文本消息的函数(即我们在微信公众号里发送聊天的文本内容,根据发送过来的内容做一些处理):
/*** 接受文本消息并处理** @param $obj* @return string*/
private function receiveText($obj)
{$content = $obj->Content;// 图灵机器人消息处理$robot = new TuringRobot();$info = $robot->getInfo($content, $obj->FromUserName);switch ($info["code"]) {case 100000: // 文本类return $this->textTemplate($obj, $robot->textInfo($info));case 200000: // 链接类return $this->textTemplate($obj, $robot->linkInfo($info));case 302000: // 新闻类return $this->textTemplate($obj, $robot->newsInfo($info));case 308000: // 菜谱类return $this->newsTemplate($obj, $robot->cookbookInfo($info));case 313000: // 儿歌类(儿童版)case 314000: // 诗歌类(儿童版)default:return "亲,你能说的再简单点吗?我有点理解不过来啦!";}
}
在responseMsg函数中调用(这里我删除了一些暂时不使用的代码,大家按照我写的来即可),这里我也只处理了文本消息,如果你对公众号发送图片或者语音什么的,我这边默认是统一回复“亲,你说的是啥,我只能理解文字啊!”:
public function responseMsg()
{//get post data, May be due to the different environments$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];//extract post dataif (!empty($postStr)) {/* libxml_disable_entity_loader is to prevent XML eXternal Entity Injection,the best way is to check the validity of xml by yourself */libxml_disable_entity_loader(true);$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);$result = '';switch ($postObj->MsgType) {case 'event':// 关注后自动回复if ($postObj->Event == 'subscribe') {$result = $this->textTemplate($postObj, 'hi,你怎么才关注我,我都等你一万年了!');}break;case 'text': // 文本消息$result = $this->receiveText($postObj);break;case 'image': // 图片消息case 'voice': // 语言消息case 'video': // 视频消息case 'shortvideo': // 小视频消息case 'link': // 链接消息default:$result = $this->textTemplate($postObj, '亲,你说的是啥,我只能理解文字啊!');break;}echo $result;} else {echo '';exit;}
}
最后,把index.php头部位置的代码改下:
$wechatObj = new wechatCallbackapiTest();
$wechatObj->valid();
改为:
$wechat = new wechatCallbackapiTest();
if (isset($_GET["echostr"])) {$wechat->valid();
} else {$wechat->responseMsg();
}
还有别忘了引入TuringRobot.php哦!
include 'TuringRobot.php';
将所有的代码提交至新浪云上,回到微信公众平台点击“启用”:
下面我们来测试一下:
最后的最后呢,我放上我的公众号二维码,大家可以测试看看!(最后我建议如果公众号已经在运营阶段,最好是开发的时候本地测试,可以去看我的这篇博客:http://my.oschina.net/wanggong/blog/648671)
转载于:https://my.oschina.net/wanggong/blog/655891
微信公众号实现智能聊天-接入第三方智能机器人平台相关推荐
- 微信公众号天气与聊天机器人小功能
微信公众号小功能 以下都是借鉴的微信公众平台的文档加老师指点和自行的理解. (1)微信公众号发送地区回复现在和未来五天天气情况 (2)发送语音和智能机器人聊天 一.调用天气预报接口 实现微信公众号发送 ...
- 微信公众号之智能绑定实现初始版本
微信公众号智能绑定实现步骤: 微信公众号智能绑定功能所有的步骤都是以模拟实现的. 1.模拟打开微信公众帐号登录页面: URL地址:https://mp.weixin.qq.com/ 2.读取自 ...
- 如何在微信公众号中添加聊天机器人——我的阿尔法狗1.0领养与使用指南
最近开了一个公众号弄着玩,之前也在一些群里看到过一些聊天机器人,所以就想将聊天机器人接入微信公众号试试. 现在网上已经有比较成熟的一些产品,有的免费,有的收费,都可以直接接入微信公众号,实现一些基本的 ...
- 微信公众号开发之服务器接入指南之Java版本
微信公众号开发的官方文档: https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421135319 其中我们开发好的服务器,在配置到 ...
- nodejs微信公众号开发第一步(接入指南)--wechat模块
用模块接入微信就非常简单了.只用配置好参数,逻辑大神都写好了,站在巨人的肩膀上的感觉就是不错 本文测试用的是微信测试号. -- express生成项目框架 express命令行创建项目 :点击这里, ...
- JAVA微信公众号后台开发 接口接入
前期准备 注册一个公众号,完成认证,阅读开发手册,选取开发工具,配置环境等等. 微信公众号开发标准 通过阅读文档我们了解到微信服务器向开发者提供接口,具体的流程如下 由上图可以看出,开发者需要做的:接 ...
- 将微信公众号变为自动聊天机器人(一)引言
引言 最近申请了一个微信公众号,一方面更方便分享技术文章,另一方面也是为了接触一下微信开发相关知识,进一步拓展自己的知识面. 由于本人之前也并没有微信开发相关知识,本着共同学习原则,有哪里讲的不对希望 ...
- 微信公众号开发之实现自定义微信公众号菜单和跳转第三方网页
自定义菜单创建接口: http请求方式:POST(请使用https协议) https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCE ...
- 微信公众号广告平台服务器,微信公众号的与众不同,从第三方平台开始
"人外有人,天外有天".随着公众平台日益渐火,微信公众号的建设单纯只靠健全他的自定义菜单,完善消息回复体系,稳定高质量更文频率,就能给自己的平台带来源源不断的粉丝了吗 为什么需要创 ...
最新文章
- Windows 服务器开机自启动
- oracle完全删除实例
- Plan with Global Optimization
- 必看2021年80后夫妻同时过信息系统项目管理师
- asp.net Linux 界面,在 ASP.NET 中实现不同角色的用户使用不同登录界面的方法
- mac下Python2运行SparkSQL
- 螺旋进刀非法平面选择_进刀方法、刀片类型、术语...螺纹加工重点知识你都知道吗?...
- html语言中base,HTML base 标签
- 数据集图片批量重命名
- 西门子S7-200的PLC,CPU224XP的模拟量接线怎样接
- windows XP系统自动关机
- 弹幕游戏:Ryan 最近迷上了弹幕游戏。所谓弹幕游戏,指的是玩家操控一位角色对来袭的大量敌人进行攻击,并在过程中升级、强化自我的能力,最终打败 Boss 的一类游戏...
- 黑群晖折腾记(二)-为不支持通信的UPS 增加断电自动关 NAS
- c语言判断字符是否对称,2020-07-23(C语言)数据结构-试设计算法判断该链表的全部n个字符是否中心对称。...
- IllegalArgumentException 介绍
- 不错的大数据课程体系(感谢某机构,希望不属于侵权)
- sql server 按拼音分类排序的功能
- 计算机一级试题库原题吗,全国计算机一级考试试题库(20210207022735)
- InfoSphere Guardium在医疗保健行业中对System Z的好处
- 第十届蓝桥杯大赛软件类省赛 JAVA 大学 A 组
热门文章
- Python 中错误 ConnectionError: Max retries exceeded with url
- Android 传感器 II-运动传感器
- CKA真题:题目和解析-1
- appwidget百度桌面搜索
- SEERC 2008 Problem A Stock Exchange
- 将app变为桌面程序,开机后不再显示原桌面,而是显示我们的app界面
- 微信拼手气红包C语言,微信拼手气红包背后的算法逻辑
- 机器算法有哪几种 python_机器学习10种经典算法的Python实现
- 索引很难么?带你从头到尾捋一遍MySQL索引结构,不信你学不会!
- 去掉button按钮原有样式