基于图灵api实现微信聊天机器人
基于图灵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实现微信聊天机器人相关推荐
- 微信公众号图灵机器人开发php,使用图灵api创建微信聊天机器人
需要准备的资源: 图灵机器人账号 微信公共账号 点击访问 图灵机器人官网,快快注册,拥有自己的聊天机器人,可以在这里先体验一下 今天主要简述微信公共平台聊天机器人的搭建,首先需要注册微信公共账号,之后 ...
- AI聊天机器人接口制作php,使用图灵api创建微信聊天机器人_php技巧
需要准备的资源: 图灵机器人账号 微信公共账号 点击访问 图灵机器人官网,快快注册,拥有自己的聊天机器人,可以在这里先体验一下 今天主要简述微信公共平台聊天机器人的搭建,首先需要注册微信公共账号,之后 ...
- 微信公众号图灵机器人开发php,使用图灵api创建微信聊天机器人_PHP
需要准备的资源: 图灵机器人账号 微信公共账号 点击访问 图灵机器人官网,快快注册,拥有自己的聊天机器人,可以在这里先体验一下 今天主要简述微信公共平台聊天机器人的搭建,首先需要注册微信公共账号,之后 ...
- 微信公众号图灵机器人开发php,使用图灵机器人api搭建微信聊天机器人php实现,图灵微信聊天机器人...
使用图灵机器人api搭建微信聊天机器人php实现,图灵微信聊天机器人之前通过hook技术实现了微信pc端发送消息功能,如果在结合图灵机器人就能实现微信聊天机器人. 代码下载:http://blog.y ...
- 基于python以及AIUI WebSocket,WeChatPYAPI实现的微信聊天机器人
基于python以及AIUI WebSocket,WeChatPYAPI实现的微信聊天机器人 做此文的目的首先是学习Markdown的用法哈哈哈哈,其实也是记录自己学习的一个过程. 以后我也会将自己在 ...
- Python30行代码实现微信聊天机器人(基于WXPY+百度理解与交互技术UNIT)
引言: 前几天看到新闻说一个程序员开发了微信聊天机器人陪女朋友聊天,感觉有兴趣,之前听说过WXPY,由于本人Python真的很菜,一直没有动手,受新闻启发开发了一个简单的基于Python微信机器人.有 ...
- 基于ChatGPT实现微信聊天机器人
ChatGPT近期以强大的对话和信息整合能力风靡全网,可以写代码.改论文.讲故事,几乎无所不能,这让人不禁有个大胆的想法,能否用他的对话模型把我们的微信打造成一个智能机器人,可以在与好友对话中给出意想 ...
- 搭建属于自己的基于ChatGPT的微信聊天机器人(方法)
文章目录 1. GitHub开源项目 2. 前期准备 (1) 获取openAI API key 3. 准备部署环境 (1) 配置代理 (2) 配置python环境 4. 部署 (1) 修改配置文件 ( ...
- 部署一个基于ChatGPT的微信聊天机器人以及产生的思考
文章目录 前言 功能 反响 思考 这篇文章主要展示了基于ChatGPT的微信聊天机器人的效果,以及在部署过程中我产生的一些思考.部署一个这样的机器人的具体方法我过两天会单独写一篇文章. 前言 最近几个 ...
最新文章
- keep健身软件电脑版_keep下载安装2020官方版-keep健身软件免费版下载v6.125.0 安卓最新版...
- 安装VMware-workstation-full-14.1.1-7528167 附带下载地址
- 鸿蒙系统比比安卓系统好么,鸿蒙系统与安卓系统的区别 鸿蒙系统与安卓系统哪个更好...
- sql text转image_[转]故障分析 | 记一次 MySQL 主从双写导致的数据丢失问题
- linux 批量替换所有文件中包含的字符串
- unity_小功能实现(敌人巡逻功能)
- boost::multiprecision模块mpfr相关的测试程序
- Oracle数据库基础入门《一》Oracle服务器的构成
- AC日记——Paint Pearls hdu 5009
- 清华来了第二位菲尔兹奖得主,是丘成桐力荐的老朋友Caucher Birkar
- maven项目乱码以及项目名出现红叉
- 为U盘装备Ubuntu工作学习两不误
- matlab arcsin 弧度,角度换算弧度(角度换算弧度计算器)
- 《RunningMan》评论及弹幕情感分析
- 【华为云技术分享】LwM2M协议的学习与分享
- 怎么从apk源码中查看服务器地址,反编译apk查看源码
- 解决 微信小程序 input错位
- Android 11.0 12.0强制app横屏显示
- 找零钱问题(C语言实现)——贪心算法应用(1)
- Ural 2045. Richness of words 打表找规律
热门文章
- 《JavaScript高级编程》HTML中的JavaScript
- Codeforce 731B. Coupons and Discounts
- BZOJ2437: [Noi2011]兔兔与蛋蛋
- Learning ROS for Robotics Programming Second Edition学习笔记(六) indigo xtion pro live
- 提升方法boosting
- Xcode Library
- 主从服务器 php分配,MYSQL 主从服务器配置
- 车载行车记录仪EMC浪涌防护方案图
- bool 和_Bool , bool _Bool
- CocosCreator-精灵动态加载图片资源,实例化精灵