找回密码
 立即注册

QQ登录

只需一步,快速开始

微信公众平台机器人教程

4
回复
8512
查看
  [复制链接]

1345

主题

1421

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
12059

社区QQ达人

来源: 2013-12-23 23:26:51 显示全部楼层 |阅读模式
阿里云双11新人礼包
首先要去微信公众平台申请一个帐号
http://mp.weixin.qq.com/

申请一个SAE应用
我的是http://weixintalk.sinaapp.com

设置微信接口地址
微信平台->设置->回复设置->自定义回复->调用公众平台消息接口>>
url写这个url,token随便定一个"helloczq"

开启SAE服务
由于我们需要教机器人一些日常用语,所以我们必须要一个存储他们的空间,这里暂时使用SAE的kvdb服务,请先到sae开启。

定义规则
我们先给他定义一个简单的规则,比如
求助是
help
教他学东西是
"_" + 问题 + ":" + 回答
比如:_hi:hello,就是回复hello给hi
如果一样东西有很多人教他,机器人应该优先回复旧的东西。

聊天代码
规则定好了,我们先写一个聊天的类
  1. class talk {
  2. public function reply($str) {
  3. $kv = new SaeKV ();
  4. $kv->init (); //用户输入帮助语句,可以自定义帮助语法
  5. if ($str == 'help' || $str == '求助'){
  6. return "要教我读书,请英文下划线开头,接着问题,接着英文冒号,接着回答";
  7. } //下划线开头的教学模式
  8. if (substr($str, 0,1) == '_'){
  9. //教
  10. $pos = strpos($str, ':');
  11. if ($pos > -1){ //问题
  12. $q = substr($str, 1,$pos - 1); //答案
  13. $a = substr($str, $pos + 1);
  14. //加入知识库
  15. $ret = $kv->get('know_' . md5($q)); if ($ret === false || !is_array($ret))
  16. $ret = array();
  17. $ret[] = $a;
  18. $kv->set('know_' . md5($q), $ret);
  19. return "known::" . $q . '/' . $a ;
  20. }
  21. }
  22. $ret = $kv->get('know_' . md5($str));//查询数据库,寻找问题答案
  23. if ($ret === false || !is_array($ret) || count($ret) == 0){
  24. return '我什么都不知道,输入"help"求助';
  25. }else{
  26. //随机一个
  27. while(count($ret) > 1){
  28. $re = array_shift($ret);
  29. if (rand(0, 1) == 0)
  30. return $re;
  31. }
  32. return array_shift($ret);
  33. }
  34. }
复制代码



这个类会自动回复,教学,大家可以简单测试一下

接入微信
其实就是把上面那个类和官方的php代码拼起来...
以下是全部代码,包括验证部分
  1. define ( "TOKEN", "helloczq" );
  2. $wechatObj = new wechat ();
  3. $wechatObj->valid ();
  4. $wechatObj->responseMsg ();
  5. class wechat {
  6. public function valid() {
  7. $echoStr = $_GET ["echostr"];
  8. if (! $this->checkSignature ())
  9. exit ();
  10. }
  11. public function responseMsg() {
  12. $postStr = $GLOBALS ["HTTP_RAW_POST_DATA"];
  13. if (! empty ( $postStr )) {
  14. $postObj = simplexml_load_string ( $postStr, 'SimpleXMLElement', LIBXML_NOCDATA );
  15. $fromUsername = $postObj->FromUserName;
  16. $toUsername = $postObj->ToUserName;
  17. $content = trim ( $postObj->Content );
  18. $time = time ();
  19. $talk = new talk();
  20. $textTpl = "


  21. %s


  22. 0
  23. ";
  24. $msgType = "text";
  25. $contentStr = $talk->reply($content);
  26. $resultStr = sprintf ( $textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr );
  27. echo $resultStr;

  28. } else {echo $_GET ["echostr"];
  29. exit ();
  30. }
  31. }
  32. private function checkSignature() {
  33. $signature = $_GET ["signature"];
  34. $timestamp = $_GET ["timestamp"];
  35. $nonce = $_GET ["nonce"];
  36. $token = TOKEN;
  37. $tmpArr = array (
  38. $token,
  39. $timestamp,
  40. $nonce
  41. );
  42. sort ( $tmpArr );
  43. $tmpStr = implode ( $tmpArr );
  44. $tmpStr = sha1 ( $tmpStr );

  45. if ($tmpStr == $signature) {
  46. return true;
  47. } else {
  48. return false;
  49. }
  50. }
  51. }
  52. class talk {
  53. public function reply($str) {
  54. $kv = new SaeKV ();
  55. $kv->init ();
  56. if ($str == 'help' || $str == '求助'){
  57. return "要教我读书,请英文下划线开头,接着问题,接着英文冒号,接着回答";
  58. }
  59. if (substr($str, 0,1) == '_'){
  60. $pos = strpos($str, ':');
  61. if ($pos > -1){
  62. $q = substr($str, 1,$pos - 1);
  63. $a = substr($str, $pos + 1);
  64. $ret = $kv->get('know_' . md5($q));
  65. if ($ret === false || !is_array($ret))
  66. $ret = array();
  67. $ret[] = $a;
  68. $kv->set('know_' . md5($q), $ret);
  69. return "known::" . $q . '/' . $a ;
  70. }
  71. }
  72. $ret = $kv->get('know_' . md5($str));
  73. if ($ret === false || !is_array($ret) || count($ret) == 0){
  74. return '我什么都不知道,输入"help"求助';
  75. }else{
  76. //随机一个
  77. while(count($ret) > 1){
  78. $re = array_shift($ret);
  79. if (rand(0, 1) == 0)
  80. return $re;
  81. }
  82. return array_shift($ret);
  83. }
  84. }
  85. }
  86. ?>
复制代码


回复

使用道具 举报

1

主题

3

帖子

27

积分

新手上路

Rank: 1

积分
27
2014-1-6 10:16:06 显示全部楼层
可以再详细点吗   我是菜鸟啊
回复 支持 反对

使用道具 举报

1345

主题

1421

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
12059

社区QQ达人

2014-1-7 01:01:07 显示全部楼层
阿里云双11新人礼包
hdkygs 发表于 2014-1-6 10:16
可以再详细点吗   我是菜鸟啊

你好,请继续关注微信论坛“微信开发者”板块,会不定时更新更多微信开发技术
回复 支持 反对

使用道具 举报

5

主题

1499

帖子

4623

积分

论坛元老

Rank: 8Rank: 8

积分
4623

社区QQ达人

2016-1-21 09:41:48 显示全部楼层
网程微建站平台(www.phpwc.com,qq:3222486313)是网程公司独立开发的多用户智能微信公众号第三方管理平台(简称:网程微平台),企业无需购买域名、服务器、3分钟就可以在线建立自己的微信网站,现已开发80多种功能应用,近百套行业模版,360°整合CRM系统+网页展示+客户服务+吸粉宣传+收款成交五大服务,满足99%企业/商家互联网营销需求。
网程微建站:www.phpwc.com(微信公众号第三方平台),免费接入,另招全国代理商,QQ:3222486313
回复 支持 反对

使用道具 举报

1

主题

2560

帖子

6440

积分

论坛元老

Rank: 8Rank: 8

积分
6440

社区QQ达人

QQ
2016-8-19 11:09:03 显示全部楼层
阿里云双11新人礼包
林州网程科技有限公司成立于2015年2月,基于微信公众平台为企业提供开发、运营、培训、推广一体化解决方案,帮助企业实现线上线下互通(O2O),社会化客户关系管理(SCRM),移动电商,营销推广、轻应用、社会化营销工具、定制应用等多个层面的业务开发,具备行业领先的研发能力,是一家专注于企业级移动互联网业务的高新技术企业,致力于为各类企事业单位提供先进的、专业化“互联网+”解决方案。(详情请登录网程微平台官网:www.phpwc.com,qq:3285043939)
网程微建站(www.phpwc.com)——微信第三方开发,QQ:3285043939
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册