给你的公众号添加一个智能机器人


给你的公众号添加一个智能机器人

文章插图

环境和工具
  • 公众号一个
  • 云服务器一台
  • Python 环境
  • Flask(Python 第三方库)
  • 图灵机器人账号
以上就是我们实现公众号后台智能对话机器人需要的环境和工具 , 前两个就不多说了 。我们代码使用 Python 开发 , 所以需要配置好 Python 开发环境 , 安装 Flash 库 。最后需要注册一个图灵机器人账号 , 调用其 API 接口 。
欢迎到我的公众号 码小白TM 里调戏机器人 , 去看看这个机器人智不智能!
Web 服务器搭建我们想要接收公众号后台发送的消息 , 就需要搭建一个 Web 服务器了 。我们在云服务器上安装好 Python 和 Flask 后 , 就可以进行 Web 服务器的搭建了 。
我们首先搭建一个非常简单的 Web 服务器 , 就是在网页显示出 HelloWorld! , 来跑通我们的代码 。我们来看一下主程序代码 。
main.py
from flask import FlaskApp = Flask(__name__)@app.route("/")def index():    return "Hello World!"if __name__ == "__main__":    app.run(host='0.0.0.0')代码非常简单 , 我们直接运行代码 , 启动 Web 服务器:
python main.py运行成功后 , 我们可以在云服务器机器浏览器上访问 127.0.0.1 , 如果我们能看到 Hello World! 就说明我们服务器启动成功了 。我们也可以在外网机器浏览器上访问你云服务器的外网 IP , 来检测 Web 服务器是否成功启动 。
公众号后台配置和验证然后我们去公众号后台开发->基本配置页找到服务器配置 , 可以看到我们需要一个服务器的 URL 地址、Token 令牌、消息加解密密钥 。
给你的公众号添加一个智能机器人

文章插图
 
公众号后台配置
服务器的 URL 地址就是:http://服务器外网IP/wechat , / 前面是你的云服务外网 IP 地址 , 后边是我们在代码里定义的路由入口(可以自己定义) , 后边我们会在代码中看到 。Token 令牌是我们自己定义的 , 后边代码中也会用到 。消息加解密密钥可以通过自动生成 , 消息加解密方式我们选择明文模式即可 。
你第一次配置的时候下边会有保存按钮 , 这个时候我们先不要点击 , 因为我们需要在 Web 服务器端对消息字段进行解析处理 , 然后回传结果进行验证 。
我们到微信公众号开发文档里看一下消息验证流程 。
给你的公众号添加一个智能机器人

文章插图
验证流程
根据上图流程我们进行我们的代码编写 。
main.py
from flask import Flaskfrom flask import requestimport hashlibapp = Flask(__name__)@app.route("/")def index():    return "Hello World!"# 公众号后台消息路由入口@app.route("/wechat", methods=["GET", "POST"])def wechat(): # 验证使用的是GET方法    if request.method == "GET":        signature = request.args.get('signature')        timestamp = request.args.get('timestamp')        nonce = request.args.get('nonce')        echostr = request.args.get('echostr')        token = "公众号后台填写的token"  # 进行排序        dataList = [token, timestamp, nonce]        dataList.sort()        result = "".join(dataList)  #哈希加密算法得到hashcode        sha1 = hashlib.sha1()        sha1.update(result.encode("utf-8"))        hashcode = sha1.hexdigest()        if hashcode == signature:            return echostr        else:            return ""if __name__ == "__main__":    app.run(host='0.0.0.0', port=80) #公众号后台只开放了80端口


推荐阅读