搭建微信机器人

从0开始搭建微信聊天机器人

本教程使用wxBot框架实现个人微信机器人,wxBot框架是通过封装Web微信API实现的,可以自动处理你收到的微信消息,而且可以实现主动发送消息。

一、下载项目

1
https://github.com/liuwons/wxBot

二、环境与依赖

该版本只能使用pyhon2环境,目前笔者是一个python小白,所以这里记录一下遇到的问题。搭建环境是mac,mac是默认自带pyhon2,但是这个python不带pip工具,所以需要自己安装,可以参考如下命令:

1
curl 'https://bootstrap.pypa.io/get-pip.py' > get-pip.py

1
sudo python get-pip.py
1
sudo easy_install pip
  • 使用curl命令将网页内容保存到当前目录中,输出到get-pip.py文件里,使用python命令启动这个脚本,接着使easy_install命令去安装pip
  • 介绍一下easy_install与pip的区别,pip 是一个现代通用的 Python 包管理工具。提供了对 Python 包的查找、下载、安装、卸载的功能;pip会把插件及其相关的依赖一起安装,而easy_install只会安装制定的插件,pip继承easy_install,即安装pip之前必须有easy_install存在.

好回到wxBot上面,我们需要如下依赖:

1
2
3
4
pip install requests
pip install pyqrcode
pip install pypng
pip install Pillow

三、启动项目

3.1 登录微信

直接用 python 运行代码(如运行测试代码 test.py ):

1
python test.py

3.2 登录微信

程序运行之后,会在当前目录下生成二维码图片文件 qr.png 并自动打开,用微信扫描此二维码并按操作指示确认登录网页微信。

如果运行在Linux下,还可以通过设置 WXBot 对象的 conf['qr']tty 的方式直接在终端打印二维码(此方法只能在Linux终端下使用)

四、接口

4.1 handle_msg_all

handle_msg_all 函数的参数 msg 是代表一条消息的字典。字段的内容为:

【注】字典是另一种可变容器模型,且可存储任意类型对象。
字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 。

字段名 字段内容
msg_type_id 整数,消息类型,具体解释可以查看 消息类型表
msg_id 字符串,消息id
content 字典,消息内容,具体含有的字段请参考 消息类型表 ,一般含有 type(数据类型)与 data(数据内容)字段,typedata的对应关系可以参考 数据类型表
user 字典,消息来源,字典包含 name(发送者名称,如果是群则为群名称,如果为微信号,有备注则为备注名,否则为微信号或者群昵称)字段与 id(发送者id)字段,都是字符串

4.2 消息类型表

类型号 消息类型 content
0 初始化消息,内部数据 无意义,可以忽略
1 自己发送的消息 无意义,可以忽略
2 文件消息 字典,包含 typedata 字段
3 群消息 字典, 包含 user (字典,包含 idname字段,都是字符串,表示发送此消息的群用户)与 typedata 字段,红包消息只有 type 字段, 文本消息还有detail、desc字段, 参考 群文本消息
4 联系人消息 字典,包含 typedata 字段
5 公众号消息 字典,包含 typedata 字段
6 特殊账号消息 字典,包含 typedata 字段
99 未知账号消息 无意义,可以忽略

4.3 数据类型表

type 数据类型 data
0 文本 字符串,表示文本消息的具体内容
1 地理位置 字符串,表示地理位置
3 图片 字符串,图片数据的url,HTTP POST请求此url可以得到jpg文件格式的数据
4 语音 字符串,语音数据的url,HTTP POST请求此url可以得到mp3文件格式的数据
5 名片 字典,包含 nickname (昵称), alias (别名),province (省份),city (城市), gender (性别)字段
6 动画 字符串, 动画url, HTTP POST请求此url可以得到gif文件格式的数据
7 分享 字典,包含 type (类型),title (标题),desc (描述),url (链接),from (源网站)字段
8 视频 不可用
9 视频电话 不可用
10 撤回消息 不可用
11 空内容 空字符串
12 红包 不可用
13 小视频 字符串,视频数据的url,HTTP POST请求此url可以得到mp4文件格式的数据
99 未知类型 不可用

4.4 群文本消息

由于群文本消息中可能含有@信息,因此群文本消息的 content 字典除了含有 typedata 字段外,还含有 detaildesc 字段。

各字段内容为:

字段 内容
type 数据类型, 为0(文本)
data 字符串,消息内容,含有@信息
desc 字符串,删除了所有@信息
detail 数组,元素类型为含有 typevalue 字段的字典, type 为字符串 str (表示元素为普通字符串,此时value为消息内容) 或 at (表示元素为@信息, 此时value为所@的用户名)

4.5 WXBot对象属性

WXBot 对象在登录并初始化之后,含有以下的可用数据:

属性 描述
contact_list 当前用户的微信联系人列表
group_list 当前用户的微信群列表
public_list 当前用户关注的公众号列表
special_list 特殊账号列表
session WXBot 与WEB微信服务器端交互所用的 Requests Session 对象

4.6 WXBot对象方法

WXBot 对象还含有一些可以利用的方法

方法 描述
get_icon(uid, gid) 获取联系人或者群聊成员头像并保存到本地文件 img_[uid].jpg , uid 为用户id, gid 为群id
get_head_img(id) 获取用户头像并保存到本地文件 img_[id].jpgid 为用户id(Web微信数据)
get_msg_img(msgid) 获取图像消息并保存到本地文件 img_[msgid].jpg , msgid 为消息id(Web微信数据)
get_voice(msgid) 获取语音消息并保存到本地文件 voice_[msgid].mp3 , msgid 为消息id(Web微信数据)
get_video(msgid) 获取视频消息并保存到本地文件 video_[msgid].mp4 , msgid 为消息id(Web微信数据)
get_contact_name(uid) 获取微信id对应的名称,返回一个可能包含 remark_name (备注名), nickname (昵称), display_name (群名称)的字典
send_msg_by_uid(word, dst) 向好友发送消息,word 为消息字符串,dst 为好友用户id(Web微信数据)
send_img_msg_by_uid(fpath, dst) 向好友发送图片消息,fpath 为本地图片文件路径,dst 为好友用户id(Web微信数据)
send_file_msg_by_uid(fpath, dst) 向好友发送文件消息,fpath 为本地文件路径,dst 为好友用户id(Web微信数据)
send_msg_by_uid(word, dst) 向好友发送消息,word 为消息字符串,dst 为好友用户id(Web微信数据)
send_msg(name, word, isfile) 向好友发送消息,name 为好友的备注名或者好友微信号, isfileFalseword 为消息,isfileTrueword 为文件路径(此时向好友发送文件里的每一行),此方法在有重名好友时会有问题,因此更推荐使用 send_msg_by_uid(word, dst)
is_contact(uid) 判断id为 uid 的账号是否是本帐号的好友,返回 True (是)或 False (不是)
is_public(uid) 判断id为 uid 的账号是否是本帐号所关注的公众号,返回 True (是)或 False (不是)

四、接入图灵机器人

bot.py图灵机器人 API 以及 wxBot 实现了一个自动回复机器人.

此机器人会回复来自联系人的消息,以及群里@此账号的消息。

并且本帐号可以通过发送 退下走开关闭关掉休息滚开 来关闭机器人的自动回复。

也可以通过发送 出来启动工作 来再次开启机器人的自动回复。

bot.py 的运行方法:

  • 要接入图灵机器人API时:

    1. 图灵机器人官网注册账号,申请图灵key: 图灵key申请地址

    【注】目前图灵机器人API是个人版只能使用100次

    1. bot.py 文件所在目录下新建 conf.ini 文件,内容为:(key字段内容为申请到的图灵key)

      1
      2
      [main]    
      key=1d2678900f734aa0a23734ace8aec5b1
    2. 运行 bot.py

      1
      python bot.py
  • 不接入图灵机器人API时(此时机器人对联系人消息以及群里@自己的消息统一回复 知道了 ):

    1. 运行 bot.py

      1
      python bot.py
本文结束 感谢阅读
0%