JSON

微信公众平台聊天机器人

字号+ 作者:H5之家 来源:H5之家 2017-02-11 12:03 我要评论( )

今天我们来看看有哪些比较好玩的聊天机器人,并且通过微信公众号搭建一个自己的聊天机器人。 QQ机器人腾讯有一个可以聊天的QQ机器人,当时觉得特别好玩,它会不

微信公众平台聊天机器人

加入全栈技术交流群(QQ群号:254842154)

今天我们来看看有哪些比较好玩的聊天机器人,并且通过微信公众号搭建一个自己的聊天机器人。

QQ机器人

腾讯有一个可以聊天的QQ机器人,当时觉得特别好玩,它会不厌其烦地陪你聊天,不吃不喝。它的QQ号是:615050000。

小黄鸡

曾经非常火的人人网小黄鸡聊天机器人,陪着大学生度过了多少个空虚寂寞冷的日日夜夜。在这里可以找到开发文档:赛科机器人 。它提供了一个快速接入微信后台的功能:

微信设置后台

假如你的微信公众号没有自己开发的功能,那么只要按照下面的“微信接口”说明,在微信公众号后台设置参数即可。

假如你的微信公众号已经有自己的功能,现在又想加入小黄鸡的功能,那么就要自己开发了。这里特别注意,msg参数需要GBK编码。

下面给出关键性代码(php):

public function response($postObj){ $r["r"] = false; $response = getWebCont(SK_ROBOT_API . iconv("UTF-8","GB2312//IGNORE", $postObj['content'])); //返回的格式是否正确,假如正确,是以[msg]开头的 if(preg_match(SK_REG_ROBOT_RESPONSE_MSG_BEGIN, $response , $match)){ $response = str_replace("[msg]" , "" , $response); $response = str_replace("[/msg]" , "" , $response); $r["r"] = true; $r["res"] = $response; } return $r; }

宏定义:

define ("SK_ROBOT_API","http://dev.skjqr.com/api/weixin.php?email=your_email&appkey=your_appkey&msg="); // 返回的消息以 [msg] 开头 define("SK_REG_ROBOT_RESPONSE_MSG_BEGIN","/\[msg]/");

getWebCont是php中通过curl方式发送请求的自定义方法:

function getWebCont($url, $data = '', $sslVerify = false) { $ch = curl_init(); if ($sslVerify) { curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); } curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); if ($data) { curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); } $body = curl_exec($ch); $head = curl_getinfo($ch); $error = curl_error($ch); curl_close($ch); if ($head['http_code'] == '200') { return $body; } else { //log here return false; } }

可以看到,使用还是比较简单的。

图灵机器人

个人比较喜欢图灵机器人,官方网址:图灵机器人 。 它返回的聊天数据中,类型比较全面,而且是友好的json格式。而小黄鸡返回的就是一个字符串。

图灵机器人返回数据格式

针对它返回的数据,我们可以重新对数据进行整合。这是我写的一个方法:

/* * 注意:info字段需要urlencode编码 * $postObj是微信返回的数据,我对它进行了二次封装 */ public function response($postObj){ $r["r"] = true; $response = getWebCont(TL_ROBOT_API . "userid=" . $postObj['from'] . '&info=' . urlencode($postObj['content'])); if(!$response){ $r['res'] = "我无法理解你的问题。抱歉。"; return $r; } $json = json_decode($response); if(!is_object($json) || !property_exists($json, "code")){ $r['res'] = "我无法理解你的问题。抱歉。"; return $r; } //$r["r"] = true; switch($json->code){ //文本类数据 case 100000: $tmp = $json->text; break; //网址类数据 打开百度 case 200000: $tmp = $json->text . "\n" . $json->url; break; //菜谱 红烧肉怎么做? case 308000: $tmp = $json->text . "\n\n"; foreach($json->list as $kv){ $t = WXResponseHelper::buildHref($kv->name,$kv->detailurl,false); $t .= "(" . $kv->info . ")"; $t .= "\n\n"; if(!WXResponseHelper::maxLen($tmp, $t)){ $tmp .= $t; }else{ break; } } break; //列车信息 深圳到成都的火车 case 305000: $tmp = $json->text . "\n\n"; foreach($json->list as $kv){ $t = $kv->trainnum . "\n"; $t .= $kv->start . "(" . $kv->starttime . ")" . " → " . $kv->terminal . "(" . $kv->endtime . ")"; $t .= "\n\n"; if(!WXResponseHelper::maxLen($tmp, $t)){ $tmp .= $t; }else{ break; } } break; //航班 明天成都飞深圳的飞机 case 306000: $tmp = $json->text . "\n\n"; foreach($json->list as $kv){ $t = $kv->starttime . " - " . $kv->endtime . " " . $kv->flight . "\n\n"; if(!WXResponseHelper::maxLen($tmp, $t)){ $tmp .= $t; }else{ break; } } break; //酒店 深圳南山区附近的酒店 case 309000: $tmp = $json->text . "\n\n"; foreach($json->list as $kv){ $t = $kv->price . " " . $kv->satisfaction . " " . WXResponseHelper::buildHref($kv->name,$kv->icon) . "\n"; if(!WXResponseHelper::maxLen($tmp, $t)){ $tmp .= $t; }else{ break; } } break; //商品价格 惠人榨汁机多少钱 case 311000: $tmp = $json->text . "\n\n"; foreach($json->list as $kv){ $t = $kv->price . " " . WXResponseHelper::buildHref($kv->name,$kv->detailurl) . "\n\n"; if(!WXResponseHelper::maxLen($tmp, $t)){ $tmp .= $t; }else{ break; } } break; //新闻 最新新闻 case 302000: $tmp = $json->text . "\n\n"; foreach($json->list as $kv){ $t = WXResponseHelper::buildHref($kv->article,$kv->icon) . "(" . $kv->source . ")" . "\n\n"; if(!WXResponseHelper::maxLen($tmp, $t)){ $tmp .= $t; }else{ break; } } break; case 40001: $tmp = "key的长度错误(32位)"; break; case 40002: $tmp = "请求内容为空"; break; case 40003: $tmp = "key错误或帐号未激活"; break; case 40004: $tmp = "当天请求次数已用完"; break; case 40005: $tmp = "暂不支持该功能"; break; case 40006: $tmp = "服务器升级中"; break; case 40007: $tmp = "服务器数据格式异常"; break; case 50000: $tmp = "机器人设定的“学用户说话”或者“默认回答”"; break; default: $tmp = "我无法理解你的问题。抱歉。"; break; } $r['res'] = $tmp; return $r; }

宏定义:

//图灵机器人 define("TL_ROBOT_API","http://www.tuling123.com/openapi/api?key=your_appkey&");

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • asp.net第二章:如何让webservice跨平台的时候不返回XML字符串

    asp.net第二章:如何让webservice跨平台的时候不返回XML字符串

    2017-02-06 15:00

  • 微信小程序学习

    微信小程序学习

    2017-01-26 08:00

  • GO语言学习:JSON处理

    GO语言学习:JSON处理

    2017-01-24 08:01

  • 微信小程序新手教程目录文件详解视图渲染详解

    微信小程序新手教程目录文件详解视图渲染详解

    2017-01-03 12:00

网友点评
t