基于图灵api实现微信聊天机器人

尝试了一下最近很火的聊天机器人,记录下实现过程。
微信公众平台提供的接口很简单,先看看消息交互流程:

说的通俗一些,用户使用微信发送消息 -> 微信将数据发送给开发者 -> 开发者处理消息并返回数据至微信 -> 微信把返回数据发送给用户,期间数据交互通过XML完成,就这么简单。
下面写个实例,开发微信智能聊天机器人:

1. 注册微信公众平台账号

微信公众平台:
https://mp.weixin.qq.com/
注: 目前一张身份证只能注册两个账号,账号名称关乎加微信认证,请慎重注册。

2. 申请服务器/虚拟主机

没有服务器/虚拟主机的童鞋可以使用BAE和SAE,不多介绍。我自己是在搬瓦工上面购买的一个VPS,之前主要用来翻墙使用。

3. 开启开发者模式

微信公众平台有两个模式,一个是编辑模式(傻瓜模式),简单但功能单一。另一个是开发者模式,可以通过开发实现复杂功能。两个模式互斥,显而易见,登录微信公众平台并通过“开发”菜单开启开发者模式。

4. 填写接口配置信息

同样是在“开发”-“基本配置”- “服务器配置”菜单中配置,需要配置两项参数:
URL: 服务器地址,目前仅支持80端口
TOKEN: 令牌,随意填写,以”hello2017”为例,用于生成签名

填写完把下面代码保存为index.php并上传至http://your.server.ip/chat/目录,最后点击“提交”完成验证。其中your.server.ip是你的服务器IP地址或者域名。

<?php
/*** wechat php test*///define your token
define("TOKEN", "hello2017");
$wechatObj = new wechatCallbackapiTest();
$wechatObj->valid();class wechatCallbackapiTest
{public function valid(){$echoStr = $_GET["echostr"];//valid signature , optionif($this->checkSignature()){echo $echoStr;exit;}}private function checkSignature(){// you must define TOKEN by yourselfif (!defined("TOKEN")) {throw new Exception('TOKEN is not defined!');}$signature = $_GET["signature"];$timestamp = $_GET["timestamp"];$nonce = $_GET["nonce"];$token = TOKEN;$tmpArr = array($token, $timestamp, $nonce);// use SORT_STRING rulesort($tmpArr, SORT_STRING);$tmpStr = implode( $tmpArr );$tmpStr = sha1( $tmpStr );if( $tmpStr == $signature ){return true;}else{return false;}}
}?>

这玩意儿就是微信公众平台校验URL是否正确接入,研究代码没有实质性意义,验证完即可删除文件,就不详细说明了,有兴趣的童鞋可以查看官方文档。
微信公众平台API文档

5. 开发微信公众平台功能

OK,上面提到了,微信公众平台与开发者之间的数据交互是通过XML完成的,既然用到XML,当然得遵循规范,所以在着手开发之前先看看官方接口文档提供的XML规范,以文本消息为例:

<xml>
<!--开发者微信号-->
<ToUserName><![CDATA[toUser]]></ToUserName>
<!--发送方帐号(OpenID)-->
<FromUserName><![CDATA[fromUser]]></FromUserName>
<!--消息创建时间 (整型)-->
<CreateTime>12345678</CreateTime>
<!--消息类别 (text文本消息)-->
<MsgType><![CDATA1]></MsgType>
<!--消息内容-->
<Content><![CDATA[content]]></Content>
<!--消息ID (64位整型)-->
<MsgId>1234567890123456</MsgId>
</xml>

开发者在处理完消息后需要返回数据给微信服务器:

<xml>
<!--接收方帐号(OpenID)-->
<ToUserName><![CDATA[toUser]]></ToUserName>
<!--开发者微信号-->
<FromUserName><![CDATA[fromUser]]></FromUserName>
<!--消息创建时间 (整型)-->
<CreateTime>12345678</CreateTime>
<!--消息类别 (text文本消息)-->
<MsgType><![CDATA1]></MsgType>
<!--回复消息内容-->
<Content><![CDATA[content]]></Content>
<!--星标操作(位0x0001被标志时 星标刚收到的消息)-->
<FuncFlag>0</FuncFlag>
</xml>

除文本消息外,微信公众平台还支持用户发送图片消息、地理位置消息、链接消息、事件推送,而开发者还可以向微信公众平台回复音乐消息和图文消息,各类消息XML规范也可以参见官方文档。

来看看官方提供的一个PHP示例,我结合图灵机器人接口做了一些修改:

<?php
/*** wechat php test*/
$wechatObj = new wechatCallbackapiTest();
$wechatObj->responseMsg();class wechatCallbackapiTest
{// the api key string of the tuling // Replace your own apikey here ! const tuling_apiKey = "d8cca87d4ec446629bd4750cf404d84233";const tuling_apiUrl = "http://www.tuling123.com/openapi/api?key=";const tuling_userid = 0;// response the wechat user by tuling robot according to the keywordfunction responseByTulingRobot( $keyword ){$responseStr = "";$apiUrlStr = self::tuling_apiUrl . self::tuling_apiKey . '&userid=' . self::tuling_userid . '&info=';try{$text = file_get_contents($apiUrlStr . urlencode($keyword));$result = json_decode($text);switch ($result->code) {// text type case 100000 :$responseStr = $result -> text;break;// link type case 200000 :$responseStr = $result -> text . ": </br> " . "<a style=\"color='#000000';\" href=\"" . $result -> url . "\"> ---go---</a>";break;// others default:$responseStr = "I don't know  how to response you !";break;}}catch(Exception $e) {$responseStr = "Sorry I don't know  how to response you !";}return $responseStr;}private function writeLog($content){file_put_contents("/tmp/log.txg", $content, FILE_APPEND);}public function responseMsg(){//get post data, May be due to the different environments$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];$this->writeLog( $postStr );//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);  $fromUsername = $postObj->FromUserName;$toUsername = $postObj->ToUserName;$keyword = trim($postObj->Content);$time = time();$textTpl = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[%s]]></MsgType><Content><![CDATA[%s]]></Content><FuncFlag>0</FuncFlag></xml>";             if(!empty( $keyword )){$msgType = "text";//$contentStr = "Welcome to wechat world!";$contentStr = $this->responseByTulingRobot($keyword);$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);echo $resultStr;writeLog($resultStr);}else{echo "Input something...";}}else {echo "";exit;}}
}?>

简单的测试了下效果如下:

希望本文所述对大家基于php的微信公众平台开发有所帮助。

基于图灵api实现微信聊天机器人相关推荐

  1. 微信公众号图灵机器人开发php,使用图灵api创建微信聊天机器人

    需要准备的资源: 图灵机器人账号 微信公共账号 点击访问 图灵机器人官网,快快注册,拥有自己的聊天机器人,可以在这里先体验一下 今天主要简述微信公共平台聊天机器人的搭建,首先需要注册微信公共账号,之后 ...

  2. AI聊天机器人接口制作php,使用图灵api创建微信聊天机器人_php技巧

    需要准备的资源: 图灵机器人账号 微信公共账号 点击访问 图灵机器人官网,快快注册,拥有自己的聊天机器人,可以在这里先体验一下 今天主要简述微信公共平台聊天机器人的搭建,首先需要注册微信公共账号,之后 ...

  3. 微信公众号图灵机器人开发php,使用图灵api创建微信聊天机器人_PHP

    需要准备的资源: 图灵机器人账号 微信公共账号 点击访问 图灵机器人官网,快快注册,拥有自己的聊天机器人,可以在这里先体验一下 今天主要简述微信公共平台聊天机器人的搭建,首先需要注册微信公共账号,之后 ...

  4. 微信公众号图灵机器人开发php,使用图灵机器人api搭建微信聊天机器人php实现,图灵微信聊天机器人...

    使用图灵机器人api搭建微信聊天机器人php实现,图灵微信聊天机器人之前通过hook技术实现了微信pc端发送消息功能,如果在结合图灵机器人就能实现微信聊天机器人. 代码下载:http://blog.y ...

  5. 基于python以及AIUI WebSocket,WeChatPYAPI实现的微信聊天机器人

    基于python以及AIUI WebSocket,WeChatPYAPI实现的微信聊天机器人 做此文的目的首先是学习Markdown的用法哈哈哈哈,其实也是记录自己学习的一个过程. 以后我也会将自己在 ...

  6. Python30行代码实现微信聊天机器人(基于WXPY+百度理解与交互技术UNIT)

    引言: 前几天看到新闻说一个程序员开发了微信聊天机器人陪女朋友聊天,感觉有兴趣,之前听说过WXPY,由于本人Python真的很菜,一直没有动手,受新闻启发开发了一个简单的基于Python微信机器人.有 ...

  7. 基于ChatGPT实现微信聊天机器人

    ChatGPT近期以强大的对话和信息整合能力风靡全网,可以写代码.改论文.讲故事,几乎无所不能,这让人不禁有个大胆的想法,能否用他的对话模型把我们的微信打造成一个智能机器人,可以在与好友对话中给出意想 ...

  8. 搭建属于自己的基于ChatGPT的微信聊天机器人(方法)

    文章目录 1. GitHub开源项目 2. 前期准备 (1) 获取openAI API key 3. 准备部署环境 (1) 配置代理 (2) 配置python环境 4. 部署 (1) 修改配置文件 ( ...

  9. 部署一个基于ChatGPT的微信聊天机器人以及产生的思考

    文章目录 前言 功能 反响 思考 这篇文章主要展示了基于ChatGPT的微信聊天机器人的效果,以及在部署过程中我产生的一些思考.部署一个这样的机器人的具体方法我过两天会单独写一篇文章. 前言 最近几个 ...

最新文章

  1. keep健身软件电脑版_keep下载安装2020官方版-keep健身软件免费版下载v6.125.0 安卓最新版...
  2. 安装VMware-workstation-full-14.1.1-7528167 附带下载地址
  3. 鸿蒙系统比比安卓系统好么,鸿蒙系统与安卓系统的区别 鸿蒙系统与安卓系统哪个更好...
  4. sql text转image_[转]故障分析 | 记一次 MySQL 主从双写导致的数据丢失问题
  5. linux 批量替换所有文件中包含的字符串
  6. unity_小功能实现(敌人巡逻功能)
  7. boost::multiprecision模块mpfr相关的测试程序
  8. Oracle数据库基础入门《一》Oracle服务器的构成
  9. AC日记——Paint Pearls hdu 5009
  10. 清华来了第二位菲尔兹奖得主,是丘成桐力荐的老朋友Caucher Birkar
  11. maven项目乱码以及项目名出现红叉
  12. 为U盘装备Ubuntu工作学习两不误
  13. matlab arcsin 弧度,角度换算弧度(角度换算弧度计算器)
  14. 《RunningMan》评论及弹幕情感分析
  15. 【华为云技术分享】LwM2M协议的学习与分享
  16. 怎么从apk源码中查看服务器地址,反编译apk查看源码
  17. 解决 微信小程序 input错位
  18. Android 11.0 12.0强制app横屏显示
  19. 找零钱问题(C语言实现)——贪心算法应用(1)
  20. Ural 2045. Richness of words 打表找规律

热门文章

  1. 《JavaScript高级编程》HTML中的JavaScript
  2. Codeforce 731B. Coupons and Discounts
  3. BZOJ2437: [Noi2011]兔兔与蛋蛋
  4. Learning ROS for Robotics Programming Second Edition学习笔记(六) indigo xtion pro live
  5. 提升方法boosting
  6. Xcode Library
  7. 主从服务器 php分配,MYSQL 主从服务器配置
  8. 车载行车记录仪EMC浪涌防护方案图
  9. bool 和_Bool , bool _Bool
  10. CocosCreator-精灵动态加载图片资源,实例化精灵