在这篇教程中,我们将介绍如何在微信公众平台上开发:【小黄鸡聊天机器人】的功能。微信公众号,客户多了,来不及每个都体贴的照顾;是不是很想有个机器人自动陪聊来顶一下?这里就说说微信聊天机器人的开发。

第一部分 基于模拟请求的方式

  1. 1

    模拟请求数据(先看一下小黄鸡的网页版界面)

  2. 2

    我们通过模拟http请求来实现,上面对话抓包如下:

    (下图分别是:发送消息的包,接收消息的包)

  3. 3

    根据上面的包,模拟发起请求如下

  4. 4

    接下来,我们做下与微信的对接,代码如下

  5. 5

    看下演示效果

    END

第二部分 基于接口的方式

  1. 1

    申请小黄鸡接口SimSimi,发音为〝shim-shimee〞,中文翻译:小黄鸡,由韩文simsim(심심)演变而成。 “심심”原意为“无聊”。SimSimi 由ISMaker于2002年建立流行的人工智能对话系统。

    接口申请流程:

    1. 注册账号2. 激活账号3. 申请7天试用接口(或者付费购买接口,价格30美元10 万次)4. 获得Key

  2. 2

    接口分析(如下图)

  3. 3

    程序实现

    构造Url参数

       $params['key'] = "d4899e2a-7ea8-40ab-a0d2-f258ddd7de15";    $params['lc'] = "ch";    $params['ft'] = "1.0";    $params['text'] = $keyword;        $url = "http://sandbox.api.simsimi.com/request.p?".http_build_query($params);

    CURL获取内容

       $ch = curl_init();    curl_setopt($ch, CURLOPT_URL, $url);    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);    $output = curl_exec($ch);    curl_close($ch);

    获取回复内容

       $message = json_decode($output,true);    $result = "";    if ($message['result'] == 100){        $result = $message['response'];    }else{        $result = $message['result'].$message['msg'];    }

    小黄鸡完整代码simsimi.php

    function callSimsimi($keyword) {    $params['key'] = "d4899e2a-7ea8-40ab-a0d2-f258ddd7de15";    $params['lc'] = "ch";    $params['ft'] = "1.0";    $params['text'] = $keyword;        $url = "http://sandbox.api.simsimi.com/request.p?".http_build_query($params);    $ch = curl_init();    curl_setopt($ch, CURLOPT_URL, $url);    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);    $output = curl_exec($ch);    curl_close($ch);    $message = json_decode($output,true);    $result = "";    if ($message['result'] == 100){        $result = $message['response'];    }else{        $result = $message['result']."-".$message['msg'];    }    return $result; }

  4. 4

    接入微信公众平台

    将官方文件的$contentStr = “Welcome to wechat world!”; 修改为接口调用$contentStr = callSimsimi($keyword);

    整段代码如下:

    define("TOKEN", "pondbay");

    $wechatObj = new wechatCallbackapiTest();

    if (isset($_GET['echostr'])) {

    $wechatObj->valid();

    }else{

    $wechatObj->responseMsg();

    }

    class wechatCallbackapiTest

    {

    public function valid()

    {

    $echoStr = $_GET["echostr"];

    if($this->checkSignature()){

    echo $echoStr;

    exit;

    }

    }

    private function checkSignature()

    {

    $signature = $_GET["signature"];

    $timestamp = $_GET["timestamp"];

    $nonce = $_GET["nonce"];

    $token = TOKEN;

    $tmpArr = array($token, $timestamp, $nonce);

    sort($tmpArr);

    $tmpStr = implode( $tmpArr );

    $tmpStr = sha1( $tmpStr );

    if( $tmpStr == $signature ){

    return true;

    }else{

    return false;

    }

    }

    public function responseMsg()

    {

    $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];

    if (!empty($postStr)){

    $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);

    $RX_TYPE = trim($postObj->MsgType);

    switch ($RX_TYPE)

    {

    case "text":

    $resultStr = $this->receiveText($postObj);

    break;

    case "event":

    $resultStr = $this->receiveEvent($postObj);

    break;

    }

    echo $resultStr;

    }else {

    echo "";

    exit;

    }

    }

    private function receiveText($object)

    {

    $funcFlag = 0;

    $keyword = trim($object->Content);

    include('simsimi.php');

    $contentStr = callSimsimi($keyword);

    $resultStr = $this->transmitText($object, $contentStr, $funcFlag);

    return $resultStr;

    }

    private function receiveEvent($object)

    {

    $contentStr = "";

    switch ($object->Event)

    {

    case "subscribe":

    $contentStr = "欢迎关注方倍工作室\n小黄鸡为您服务!";

    }

    $resultStr = $this->transmitText($object, $contentStr);

    return $resultStr;

    }

    private function transmitText($object, $content, $flag = 0)

    {

    $textTpl = "<xml>

    <ToUserName><![CDATA[%s]]></ToUserName>

    <FromUserName><![CDATA[%s]]></FromUserName>

    <CreateTime>%s</CreateTime>

    <MsgType><![CDATA[text]]></MsgType>

    <Content><![CDATA[%s]]></Content>

    <FuncFlag>%d</FuncFlag>

    </xml>";

    $resultStr = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time(), $content, $flag);

    return $resultStr;

    }

    }

  5. 5

    至此,这种方式开发聊天机器人,也OK了

微信公众平台开发入门:[8]聊天机器人可开发相关推荐

  1. 使用JAVA开发微信公众平台(一)——环境搭建与开发接入

    转自:https://www.cnblogs.com/jerehedu/p/6377759.html 一. 初始微信公众平台 微信公众平台,即我们平时所说的"公众号",曾用名&qu ...

  2. 微信公众平台登陆小程序后,在 开发-开发者工具 下,找不到 腾讯云

    新版的微信公众平台在 "开发"-"开发者工具"下面只有"腾讯位置服务",并没有大家所说的腾讯云,没法开通腾讯云服务.根据官方所说是把入口隐藏 ...

  3. 微信公众平台从入门到精通二

    第二章  微信公众平台后台介绍 一.微信公众平台后台欢迎页面 登陆公众平台首先进入的就是欢迎页,跟大部分CMS后台一样,这里会提供的是公众账号的一些运营数据 例如:欢迎你,公众平台教程的页面,里面有: ...

  4. 已嵌入微信公众号内的小图聊天机器人介绍和使用说明

    小图是一个融合常识与专业知识的智能聊天机器人,进入"人工智能遇上知识图谱"公众号,并在聊天窗口中发送消息就可以开始聊天,同时支持多轮多对话,小图能够提供闲聊.生活服务咨询.智能助手 ...

  5. 微信公众平台开发教程(四) 实例入门:机器人(附源码)

    微信公众平台开发教程(四) 实例入门:机器人(附源码) 上一篇文章,写了基本框架,可能很多人会觉得晕头转向,这里提供一个简单的例子来予以说明,希望能帮你解开谜团. 一.功能介绍 通过微信公众平台实现在 ...

  6. 《微信公众平台入门到精通》,青龙老贼,详情版本

    <微信公众平台入门到精通>,青龙老贼,详情版本 <微信公众平台入门到精通>Vol.1   http://segmentfault.com/a/1190000000356021 ...

  7. 滨州学院CSDN高校俱乐部第二次公开课——微信公众平台开发SAE使用

    2013年10月12日晚上7点至9点,俱乐部成员及爱好微信应用技术的同学们在6#408举行了滨州学院CSDN高校俱乐部的第二次公开课.主讲人:曹栋. 他首先介绍了今天讲课的主要内容,什么是公众平台,微 ...

  8. VB.net 微信公众平台开发(一) Token验证

    登录https://mp.weixin.qq.com/ 后,在公众平台后台管理页面 – 开发者中心页,点击"修改配置"按钮,填写URL.Token和EncodingAESKey,其 ...

  9. 微信公众平台开发(9)--消息加解密方式

    点此查看 微信公众号/微信网页/微信支付/企业微信/小程序开发合集及源代码下载 本文目录 1. 前言 2. 判断加解密方式 3. 测试 4. 小结 1. 前言 登录微信公众平台,点击[设置与开发]-[ ...

  10. java微信接收消息_使用Java开发微信公众平台(二)——消息的接收与响应

    上一篇文章中,我们学习了使用Java语言开发微信公众平台的第一部分--环境搭建与开发接入.那么,本篇文章,我们将在此基础上,学习[消息的接收与响应].喜欢本文,请点击下方喜欢按钮呗!❤️ 当然,我们在 ...

最新文章

  1. 计算机代码坑人小程序bat,批处理写的关机小程序--bat
  2. 零基础学习pythonrequests_requests库初体验
  3. C++读取txt中数据的两种方法
  4. Image.Save()发生“GDI+ 中发生一般性错误”
  5. Linux Shell常用技巧(四)
  6. python读取每一行文字二十四_python接口自动化(二十四)--unittest断言——中(详解)...
  7. LeetCode 735. 行星碰撞(栈)
  8. [Usaco2005 nov]Grazing on the Run 边跑边吃草 BZOJ1742
  9. 条件注释判断兼容浏览器版本CSS HACK !--[if !IE]!--[if IE]!--[if lt IE 6]!--[if gte IE 6]...
  10. python写入文件不覆盖_Python第7课:不一样的新建文件
  11. 综述-自动驾驶中基于图像的3D目标检测
  12. 使用计时器setInterval实现倒计时
  13. 关闭android系统自动更新,彻底关闭魅族flyme系统自动更新的方法分享
  14. java时区和时间的关系_Java 时间、日期与时区的关系
  15. 服务器输出音频文件,云服务器音频输出
  16. Android WebView 踩坑日记,字体怎么突然变小了???
  17. 3.5 国际化与本地化
  18. java中使用length获取二维数组的长度
  19. 计算机图形学【GAMES-101】14、动画(物理模拟、质点弹簧系统、粒子系统、运动学、动作捕捉、欧拉方法)
  20. Spring -Spring的 DI - 依赖注入的 使用学习

热门文章

  1. 2020Android不死我不倒,作为一个程序员,你觉得最大的悲哀是什么
  2. python换发型_初学Python的一些细节
  3. Image Matching:SuperGlue论文阅读笔记
  4. 解决无法解析服务器DNS地址
  5. win7升级win10后周期性蓝屏问题解决(经过2个月的测试观察,电脑没有再出现蓝屏)
  6. 整理Ubuntu 14.04 Indicators 以及好的软件
  7. 用Gradle打包出jar文件 前面我们说过,在Android Studio里面使用Gradle来打包应用程序,一般都是build出来一个apk文件。但是有的同学是做实现层的开发,不直接做View层
  8. 区块链技术应用场景之政务链
  9. Affinity propagation 近邻传播算法
  10. java等待所有子线程执行完毕再执行