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

简介:

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

 

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

 
  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]聊天机器人可开发,如需转载请自行联系原博主。

相关文章
ly~
|
7天前
|
存储 供应链 小程序
除了微信小程序,PHP 还可以用于开发哪些类型的小程序?
除了微信小程序,PHP 还可用于开发多种类型的小程序,包括支付宝小程序、百度智能小程序、抖音小程序、企业内部小程序及行业特定小程序。在电商、生活服务、资讯、工具、娱乐、营销等领域,PHP 能有效管理商品信息、订单处理、支付接口、内容抓取、复杂计算、游戏数据、活动规则等多种业务。同时,在企业内部,PHP 可提升工作效率,实现审批流程、文件共享、生产计划等功能;在医疗和教育等行业,PHP 能管理患者信息、在线问诊、课程资源、成绩查询等重要数据。
ly~
40 6
|
7天前
|
小程序 JavaScript API
微信小程序开发学习之页面导航(声明式导航和编程式导航)
这篇文章介绍了微信小程序中页面导航的两种方式:声明式导航和编程式导航,包括如何导航到tabBar页面、非tabBar页面、后退导航,以及如何在导航过程中传递参数和获取传递的参数。
微信小程序开发学习之页面导航(声明式导航和编程式导航)
|
21天前
|
存储 移动开发 监控
微信支付开发避坑指南
【9月更文挑战第11天】在进行微信支付开发时,需遵循官方文档,确保权限和参数配置正确。开发中应注重安全,验证用户输入,合理安排接口调用顺序,并处理异常。上线后需实时监控支付状态,定期检查配置,关注安全更新,确保系统稳定运行。
|
27天前
|
移动开发 小程序 JavaScript
uni-app开发微信小程序
本文详细介绍如何使用 uni-app 开发微信小程序,涵盖需求分析、架构思路及实施方案。主要功能包括用户登录、商品列表展示、商品详情、购物车及订单管理。技术栈采用 uni-app、uView UI 和 RESTful API。文章通过具体示例代码展示了从初始化项目、配置全局样式到实现各页面组件及 API 接口的全过程,并提供了完整的文件结构和配置文件示例。此外,还介绍了微信授权登录及后端接口模拟方法,确保项目的稳定性和安全性。通过本教程,读者可快速掌握使用 uni-app 开发微信小程序的方法。
57 3
|
2月前
|
小程序
Taro@3.x+Vue@3.x+TS开发微信小程序,设置转发分享
本文介绍了Taro中`useShareAppMessage`的使用方法,需在页面配置`enableShareAppMessage: true`并重新编译。
Taro@3.x+Vue@3.x+TS开发微信小程序,设置转发分享
|
2月前
|
小程序 数据安全/隐私保护
Taro@3.x+Vue@3.x+TS开发微信小程序,网络请求封装
在 `src/http` 目录下创建 `request.ts` 文件,并配置 Taro 的网络请求方法 `Taro.request`,支持多种 HTTP 方法并处理数据加密。
Taro@3.x+Vue@3.x+TS开发微信小程序,网络请求封装
|
2月前
|
小程序
Taro@3.x+Vue@3.x+TS开发微信小程序,上传文件
本文介绍如何在Taro项目中使用Nut UI的`&lt;nut-uploader/&gt;`组件实现图片上传功能,并通过示例代码展示了自定义上传逻辑的方法。
Taro@3.x+Vue@3.x+TS开发微信小程序,上传文件
|
2月前
|
小程序 JavaScript Java
微信小程序的后端开发需要使用什么语言?
【8月更文挑战第22天】微信小程序的后端开发需要使用什么语言?
312 65
|
2月前
|
小程序 JavaScript
Taro@3.x+Vue@3.x+TS开发微信小程序,使用轮播图
本文介绍了使用 Taro 和 Vue 创建轮播组件的两种方法:一是通过 `&lt;swiper&gt;` 实现,二是利用 Nut UI 的 `&lt;nut-swiper&gt;` 组件实现。
Taro@3.x+Vue@3.x+TS开发微信小程序,使用轮播图
|
2月前
|
小程序
Taro@3.x+Vue@3.x+TS开发微信小程序,根据系统主题展示不同样式(darkMode)
本文介绍如何在Taro项目中配置深色模式。通过在`src/app.config.ts`设置`darkmode`选项和在`theme.json`中定义主题变量,可以实现跟随系统主题的界面风格切换。
Taro@3.x+Vue@3.x+TS开发微信小程序,根据系统主题展示不同样式(darkMode)
下一篇
无影云桌面