想要玩转微信聊天机器人,首先得把基础环境搭建好。这里我推荐使用Linux服务器作为运行环境,实测下来CentOS 8.0+的稳定性最好。我自己用的是阿里云的CentOS 8.2服务器,2核4G配置就足够跑起来了。
Python版本选择是个关键点。虽然官方说支持3.7+,但我强烈建议用3.9+版本。去年我在3.8上踩过坑,有些异步特性支持不完善,调试起来特别费劲。安装完Python后,别忘了装pip和venv:
bash复制sudo yum install python39 python39-pip python39-venv -y
Docker环境是另一个重头戏。PadLocal协议需要通过Docker运行网关服务,这里有个小技巧:先卸载旧版Docker(如果有),再安装新版:
bash复制sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io
装完记得启动服务并设为开机自启:
bash复制sudo systemctl start docker
sudo systemctl enable docker
没有密钥的机器人就像没有钥匙的车,再好的配置也启动不了。这里需要准备两个关键密钥:
PadLocal Token是核心,相当于机器人的身份证。申请地址在Wechaty官网,用手机号注册就能获得7天免费试用。我建议先用测试号体验,确定功能符合需求再购买长期服务。注意这个Token是绑定手机号的,更换手机号需要重新申请。
UUID4 Token是本地连接用的验证码,相当于第二道安全锁。生成方法很简单:
python复制import uuid
print(uuid.uuid4())
把生成的字符串保存好,后面配置环境变量要用到。这里有个坑要注意:Token一旦生成就不要频繁更换,否则每次都要重新扫码登录,特别麻烦。我去年就因为频繁更换Token,被微信风控系统盯上,测试号直接被封了一周。
网关服务是机器人的"大脑",所有消息处理都在这里完成。部署过程看似简单,但有几个关键点容易出错:
首先拉取镜像,建议指定版本号避免自动更新带来的兼容性问题:
bash复制docker pull wechaty/wechaty:0.65
然后设置环境变量,这里最容易出错的是端口配置。8788是默认端口,但如果服务器已经有服务占用这个端口,机器人就会启动失败。我的做法是先检查端口占用情况:
bash复制netstat -tuln | grep 8788
确认端口可用后,用这个命令启动容器:
bash复制export WECHATY_PUPPET=wechaty-puppet-padlocal
export WECHATY_PUPPET_PADLOCAL_TOKEN=puppet_padlocal_xxxxxxxxx
export WECHATY_TOKEN=your_uuid4_token
export WECHATY_PUPPET_SERVER_PORT=8788
export WECHATY_LOG=verbose
docker run -ti \
--name wechaty_gateway \
--rm \
-e WECHATY_LOG \
-e WECHATY_PUPPET \
-e WECHATY_PUPPET_PADLOCAL_TOKEN \
-e WECHATY_PUPPET_SERVER_PORT \
-e WECHATY_TOKEN \
-p "$WECHATY_PUPPET_SERVER_PORT:$WECHATY_PUPPET_SERVER_PORT" \
wechaty/wechaty:0.65
如果是在云服务器上部署,必须额外设置服务端点参数,否则本地代码连不上。这个坑我踩过三次才长记性:
python复制os.environ['WECHATY_PUPPET_SERVICE_ENDPOINT']='你的服务器IP:8788'
有了云端网关,接下来配置本地开发环境。我习惯用VSCode,但PyCharm也很不错。关键是要创建独立的虚拟环境:
bash复制python3.9 -m venv wechaty-env
source wechaty-env/bin/activate
然后安装Python-Wechaty包,注意要指定版本:
bash复制pip install wechaty==0.8.10
克隆官方示例代码库是个好习惯:
bash复制git clone https://github.com/wechaty/python-wechaty-getting-started.git
项目结构很简单:
建议新建app目录存放自己的代码,把examples/ding-dong-bot.py复制过来作为起点。这个经典示例实现了最简单的"叮咚"回复功能。
万事俱备,只欠扫码。运行修改后的ding-dong-bot.py:
python复制import os
os.environ['WECHATY_PUPPET_SERVICE_TOKEN']='your_uuid4_token'
os.environ['WECHATY_PUPPET']='wechaty-puppet-padlocal'
os.environ['WECHATY_PUPPET_SERVICE_ENDPOINT']='服务器IP:8788'
from wechaty import Wechaty
async def on_message(msg):
if msg.text() == '#ding':
await msg.say('dong')
Wechaty().on('message', on_message).start()
如果一切正常,控制台会弹出二维码。用准备好的微信号扫码登录(千万别用主号!)。登录成功后,让好友发送#ding,应该会收到dong回复。
常见问题排查指南:
基础功能跑通后,可以尝试更复杂的功能开发。比如实现关键词自动回复:
python复制async def on_message(msg):
text = msg.text()
if '天气' in text:
await msg.say('今天晴转多云,25℃~32℃')
elif '新闻' in text:
await msg.say('点击查看今日头条:http://example.com')
还可以添加定时任务,每天早上8点推送日报:
python复制from apscheduler.schedulers.asyncio import AsyncIOScheduler
scheduler = AsyncIOScheduler()
@scheduler.scheduled_job('cron', hour=8)
async def morning_report():
room = await bot.Room.find('技术交流群')
await room.say('大家早上好!今日技术早报已更新...')
scheduler.start()
性能优化方面,建议:
当机器人准备上线时,这些经验可能会帮到你:
监控也很重要,建议采集这些指标:
最后提醒:微信对自动化工具管控严格,建议控制消息频率,避免被判定为营销号。测试阶段最好使用小号,重要功能要有备用方案。