利用公众号 + WeRoBot开发一款AI应用
点击上方“AI搞事情”关注我们
WeRoBot是个啥
WeRoBot 是一个基于Python的微信机器人框架,采用MIT协议发布。
git地址:https://github.com/offu/WeRoBot
文档地址:https://werobot.readthedocs.org/zh_CN/latest/
安装:
pip install werobot
WeRoBot咋用呀
前提你得申请一个公众号,其次会简单的Python编程,更重要的是得有一个服务器。这些都准备好了的话,那就可以开始搭建你的对话机器人了。
* 后台配置
公众号后台进行基础配置,
其中,AppID是公众号为你分配的开发识别码,配合开发者密码便拥有调用公众号的接口能力;服务器配置是我们需要配置的后台服务器地址(如果服务器只有一个微信后台服务,必须使用80端口!如果是https,必须使用443端口!,当然也可以利用Nginx进行反向代理),以及自定义的Token(后面需要在代码里关联),同时,有关素材的操作是需要access_token的,不过在werobot模块里,将APP_ID和APP_SECRET就好了,access_token是会自动获取。最后,不要忘了将云服务器公网IP加入IP白名单,否则也会报错。
完成配置以后,点击提交,提示提交成功,说明咱们已经完成了第一步骤的配置。
* 程序开发
WeRoBot 是一个基于Python的框架,我们需要具备一定Python能力便能进行后续程序的开发,首先来一个hello world。
import werobotrobot = werobot.WeRoBot(token='tokenhere')
robot.config["APP_ID"] = "你的APP_ID"
robot.config["APP_SECRET"] = "你的APP_SECRET"@robot.handler
def hello(message):return 'Hello World!'# 让服务器监听在 0.0.0.0:80
robot.config['HOST'] = '0.0.0.0'
robot.config['PORT'] = 80
robot.run()
从上面代码我们需要知道:
@为Python中装饰器的用法,具备装饰、修改函数功能的函数。接受一个函数作为输入参数,并返回一个具备额外功能函数。
WeRoBot 会解析微信服务器发来的消息,并将消息转换成成
Message
或者是Event
。
Message
表示用户发来的消息,如文本消息、图片消息;
Event
则表示用户触发的事件, 如关注事件、扫描二维码事件。
在消息解析、转换完成后, WeRoBot 会将消息转交给Handler
进行处理,并将Handler
的返回值返回给微信服务器。
当然, 你也可以编写一些只能处理特定消息的Handler
。比如常见的有:
@robot.text
修饰的 Handler 只处理文本消息@robot.image
修饰的 Handler 只处理图片消息@robot.subscribe
修饰的 Handler 只处理订阅后的信息@robot.voice
修饰的 Handler 只处理语音信息@robot.filter
修饰的 Handler 处理有指定关键词的信息
回复信息种类
TextReply:文本消息
ImageReply:图片消息
VoiceReply:语音消息
VideoReply:视频消息
ArticlesReply:图文消息
MusicReply:音乐消息
TransferCustomerServiceReply:将消息转发到多客服
SuccessReply:微信服务器回复 “success”
更多关于WeRoBot的使用可以参考官方文档。
import random
import time
import requests
import werobot
from werobot.replies import ArticlesReply, Article, ImageReply, TextReply, MusicReply
from cogview_python import gen_imagerobot = werobot.WeRoBot(token='fahaihahaha')
robot.config["APP_ID"] = "wxbfe73a1c91810e38"
robot.config["APP_SECRET"] = "c8414918aa9aa714b6416190b4892437"# 订阅后的回复
@robot.subscribe
def subscribe():return "***欢迎关注公众号[愉快][愉快][愉快]***\n" \"***输入任意内容开始与我聊天!\n" \"***输入'博客'关注我的博客!\n" \"***输入'音乐'为小主送上舒缓的歌曲!\n"# 关键字 博客 回复
@robot.filter('博客')
def blog(message):reply = ArticlesReply(message=message)article = Article(title="AI搞事情",description="我的个人博客",img="https://werobot.readthedocs.io/zh_CN/latest/_static/qq.png",url="https://www.cnblogs.com/fahaihappy/")reply.add_article(article)return reply# 用户发送图片
@robot.image
def blog(message, session):# print("msg", message.img)# print(type(message))# print(type(message.img))# print(message.__dict__)print("\n" + message.MediaId)changdu = str(len(session))session[changdu] = message.MediaIdreply = ImageReply(message=message, media_id=message.MediaId)return reply# 随机一首音乐
def music_data():music_list = [['童话镇', '陈一发儿', 'https://e.coka.la/wlae62.mp3', 'https://e.coka.la/wlae62.mp3'],['都选C', '缝纫机乐队', 'https://files.catbox.moe/duefwe.mp3', 'https://files.catbox.moe/duefwe.mp3'],['精彩才刚刚开始', '易烊千玺', 'https://e.coka.la/PdqQMY.mp3', 'https://e.coka.la/PdqQMY.mp3']]num = random.randint(0, 2)return music_list[num]# 匹配 音乐 回复一首歌
@robot.filter('音乐')
def music(message):# reply = TextReply(message=message, content=music_data())# reply = MusicReply(message=message,source='https://www.kugou.com/song/#hash=D4EB517A405FCDF0286AA9A4487BBCE1&album_id=10409377')return music_data()# return reply# 文字智能回复 生成图片(依赖悟道文字生成图片的api)
@robot.text
def replay(msg):print(msg.content)img = gen_image(msg.content)if img is not None:return_json = robot.client.upload_media("image", img)mediaid = return_json['media_id']reply = ImageReply(message=msg, media_id=mediaid)return replyreturn "神奇图博士也不知道这是啥呀!!!"# 让服务器监听在 0.0.0.0:80
robot.config['HOST'] = '0.0.0.0'
robot.config['PORT'] = 8000
robot.run()
* 服务部署
如果服务器只有werobot应用,则只需要开放80(http)端口或者443端口(https),由于我服务器还有其他应用,则通过Nginx进行了方向代理,配置方式如下:
http {log_format main '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';sendfile on;tcp_nopush on;tcp_nodelay on;keepalive_timeout 65;types_hash_max_size 2048;include /etc/nginx/mime.types;default_type application/octet-stream;client_max_body_size 500m;client_header_timeout 1m;client_body_timeout 1m;proxy_connect_timeout 60s;proxy_read_timeout 1m;proxy_send_timeout 1m;proxy_cache_path /var/imgcachetest levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=1g;server {# 端口和域名listen 80;server_name ip或者域名;# 日志access_log /var/log/nginx/access.log;error_log /var/log/nginx/error.log;location /werobot/ {# 需要添加的代码proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";proxy_http_version 1.1;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header Host $host;proxy_pass http://127.0.0.1:4802; }}}events {worker_connections 1024; ## Default: 1024
}
另外,Werobot还提供了和Python后端框架Django、Flask、Bottle和Tornado的集成使用方式。
部署方式还可以结合docker进行容器化部署。
* 效果展示
通过上面的流程,我们就可以通过公众号和后台进行交互,涵盖文字、图片、语音、视频等信息,再结合各种算法,如图像处理、OCR、目标检测,文本生成、智能对话等便能开发一款基于公众号的智能应用。
下图为通过输入文本,后台返回生成的图片,感兴趣的可以尝试一下。
长按二维码关注我们
有趣的灵魂在等你
利用公众号 + WeRoBot开发一款AI应用相关推荐
- 自己的第一款微信公众号产品开发完成,已上线,欢迎大家拍砖
自己的第一款微信公众号产品开发完成,已上线,欢迎大家拍砖 如果大家有相关的技术问题,可以咨询我 呵呵 部分代码可以开放给大家!
- 微信公众号Python开发(Wechatpy+新浪云SAE应用)
微信公众号Python开发(Wechatpy) 前言:微信公众号后台只提供指定条件的指定回复,如果想有聊天.翻译.查询.后台数据库等则需要使用公众号提供的接口开发脚本.开发工具语言选择诸多,Pytho ...
- 公众号商城开发和微信小程序商城开发有什么区别?
小程序和公众号商城都属于微商城,但是有很多朋友也不知道这两者之间有什么区别.对于选择做公众号商城还是小程序商城时,出现了选择困难症.既然微信小程序商城和微信公众号商城都是微信内的产品aigao0607 ...
- 使用ChatGPT加个人微信公众号打造属于自己的AI助手
使用ChatGPT加个人微信公众号打造属于自己的AI助手 1.总体介绍 2.实现 2.1 搭建微信公众号后台 2.2 用Python实现和ChatGPT的交互(核心) 2.2.1 启动/关闭浏览器 2 ...
- ios系统web(微信公众号)开发遇到的问题及解决方案
ios系统web(微信公众号)开发遇到的问题及解决方案 参考文章: (1)ios系统web(微信公众号)开发遇到的问题及解决方案 (2)https://www.cnblogs.com/clj2017/ ...
- Yii2.0实现微信公众号后台开发
2019独角兽企业重金招聘Python工程师标准>>> 研读 微信公众平台开发者文档 ,然后再阅读本文,效果更佳! 接入微信 Yii2后台配置 1.在app/config/param ...
- 微信公众号Java开发-笔记02【开发接入准备、开发接入】
学习视频网址:哔哩哔哩网站 微信公众号开发-Java版 [P01-P02]微信公众号Java开发-笔记01[微信公众号介绍.开发环境搭建] [P03-P04]微信公众号Java开发-笔记02[开发接入 ...
- 微信公众号Java开发-笔记01【微信公众号介绍、开发环境搭建】
学习网址:哔哩哔哩网站 微信公众号开发-Java版 微信公众号Java开发-笔记01[微信公众号介绍.开发环境搭建] 微信公众号Java开发-笔记02[] 微信公众号Java开发-笔记03[] 微信公 ...
- 论如何使用Python进行微信公众号的开发
说到微信公众号的开发,不外乎两种,一种是使用官方提供的接口开发,一种就是通过模拟登录来实现接口(这种方式有被封的风险,这里不论述) Python发展至今,已经有多种完善的服务器框架可以使用,Djang ...
最新文章
- JS每日一题: 小程序页面之间如何通信?
- 为什么 StringBuilder 不是线程安全的?
- python3 获取当前路径_如何使用python3获取当前路径及os.path.dirname的使用
- rust(70)-条件表达式
- 代码单元测试:gtest
- Redis数据存储解决方案
- 运动目标检测单高斯背景建模
- PThread 学习笔记
- struct 结构体 所占字节数的计算
- 新建linux用户不能登录用户,Linux下useradd命令创建的用户不能登录的问题
- 清蒸野猪佩奇自带LastDance
- 叉乘点乘混合运算公式_Word打公式太麻烦?十分钟带你零基础上手LaTex数学公式...
- Qt之使用GraphicsView框架实现思维导图功能
- adobe flash player 过期问题
- L1-概率论中的10个基本概念:古典概率、联合概率、条件概率、生日问题等
- 源代码——传智播客页面
- Centos7配置阿里云DNS
- 【连载】大学物理笔记——内力做功
- HTML中的超链接(a元素)用法详解
- 域名列入备案黑名单解除教程
热门文章
- 【ML】 李宏毅机器学习一:error
- 微信小程序上传图片到html,微信小程序-上传图片
- php配置mysql集群_mysql的集群配置
- 本地图片转base64_从一道面试题说起:GET 请求能传图片吗?
- python数组切片效率_python – 对numpy数组切片进行采样的最快方法是什么?
- linux 配置DNS正反区域,Linux基础服务_DNS原理以及正反向DNS配置
- mysql5.7.19 创建用户_mysql5.7.19用户的创建和权限的操作
- Debug pycharm: Error running *.py, cannot run program, No such file or pragram
- python3精要(23)-递归与函数列表
- pypthon3精要(15)-zip