基于 Wachaty 開發(fā)微信機器人 & 個人微信號小助手平臺
時間:2023-05-20 09:44:01 | 來源:網(wǎng)站運營
時間:2023-05-20 09:44:01 來源:網(wǎng)站運營
基于 Wachaty 開發(fā)微信機器人 & 個人微信號小助手平臺:
wxbot
微信機器人,個人微信號小助手平臺, nodejs + nuxt + wechaty 技術(shù)棧
準備
微信機器人開源庫調(diào)研,GitHub 找到以下 3 個開源作品:
- itchat
itchat
是一個開源的微信個人號接口,使用 python
調(diào)用微信- 使用不到
30
行的代碼,你就可以完成一個能夠處理所有信息的微信機器人
- wechaty
wechaty
是適用于微信個人的 Bot SDK
,可以使用 6
行 js
創(chuàng)建一個機器人- 具有包括
linux
,Windows
,MacOS
和 Docker
在內(nèi)的跨平臺支持,基于 Node.js
- vbot
vbot
是基于微信 web
版的接口,使用 http 協(xié)議
以及輪詢方式實現(xiàn)- 亮點在于通過匿名函數(shù),能夠?qū)崿F(xiàn)多種有趣的玩法
- 通過
API
,更方便的打造屬于自己的網(wǎng)頁版微信,基于 PHP
初識 wechaty
Wechaty
是一個開源的的對話機器人
SDK
,支持
個人號
微信。它是一個使用
Typescript
構(gòu)建的
Node.js
應(yīng)用。支持多種微信接入方案,包括網(wǎng)頁,
ipad
,
ios
,
windows
,
android
等。同時支持
Linux
,
Windows
,
Darwin(OSX/Mac)
和
Docker
多個平臺。
先看一下官方文檔:
- wechaty-github
- wechaty中文文檔
只需要 6 行代碼,你就可以 通過個人號 搭建一個 微信機器人功能 ,用來自動管理微信消息。
import { Wechaty } from 'wechaty'Wechaty.instance().on('scan', qrcode => console.log('掃碼登錄:' + qrcode)).on('login', user => console.log('登錄成功:' + user)).on('message', message => console.log('收到消息:' + message)).on('friendship', friendship => console.log('收到好友請求:' + friendship)).on('room-invite', invitation => console.log('收到入群邀請:' + invitation)).start()
更多功能包括:
- 消息處理:關(guān)鍵詞回復(fù)
- 群管理:自動入群,拉人,踢人
- 自動處理好友請求
- 智能對話:通過簡單配置,即可加入智能對話系統(tǒng),完成指定任務(wù)
- ... 請自行開腦洞
好了,文檔齊全 & api 豐富,完全滿足我的需求,就選這個庫了。
首先跑一個示例看看 wechaty-getting-started。下載完之后先
npm install & npm start
一頓操作,然后運行就有了登錄二維碼,拿出手機掃碼,然后 GG。
基于 Web 微信的限制
查找資料 基于nodejs + wachaty開發(fā)微信機器人平臺,發(fā)現(xiàn)已經(jīng)有大佬踩過坑了。
原來2017年之后注冊的微信號都無法登錄網(wǎng)頁版微信,而2017年之前注冊得微信賬號也有很大幾率登錄不上,找朋友試了也都不行。
檢驗?zāi)愕奈⑿盘柺欠裰С志W(wǎng)頁微信登錄:
http://wx.qq.com
點擊鏈接鏈接,PC端進入然后手機掃碼登錄,若是可以登上,即可以使用上述示例
然后又去看了 vbot 和 itchat,但發(fā)現(xiàn)也都是是基于網(wǎng)頁協(xié)議實現(xiàn)的
從網(wǎng)上查資料,大概有一下幾種實現(xiàn)方式:
- Web網(wǎng)頁端:2017年后不再支持新號登錄,僅支持老號,并且掉線嚴重,功能缺失嚴重
- Xposed技術(shù):在2019年6月份,微信官方在行業(yè)重點打擊Xposed,自此行業(yè)內(nèi)一片哀嚎遍野,陸續(xù)向iPad/MAC協(xié)議轉(zhuǎn)型。具體案例請點擊
- PC Hook:代碼注入型,也就是逆向開發(fā)。封號情況偏多,使用容易出現(xiàn)追封,公司大規(guī)模封號等情況,且目前在營銷行業(yè)使用率較少,比較偏小團隊使用
- 模擬機:延遲高、消息實時到達率低、模擬人為操作效率慢、功能偏少,承擔不了商業(yè)化功能
- ipad協(xié)議:安全性較好,功能滿足,行業(yè)占有率高,但具有能力研發(fā)人員偏少,基本兩三個團隊研發(fā),且目前已有團隊解散,部分微信號段登錄失敗、且通過grpc,mmtls研發(fā),被檢測幾率存在
- MAC協(xié)議:安全性相比iPad協(xié)議更好,功能性相比ipad協(xié)議少些,行業(yè)內(nèi)具有研發(fā)能力更少,安全性、穩(wěn)定性比較優(yōu)秀,不會出現(xiàn)追封、批量封的情況
- 混合通道:微信內(nèi)部通道,最高權(quán)限,基于MAC與Ipad協(xié)議,非grpc,mmtls,功能合適,微信正版通道,不會出現(xiàn)技術(shù)封號問題
看了看,內(nèi)部通道是不可能的,只有ipad協(xié)議個mac協(xié)議目前最好了
wechaty-puppet-padplus
使用 wechaty-puppet-padplus 一套基于 ipad 協(xié)議的包。不過天下沒有免費的午餐,需要申請
token
,見 Wechaty Token 申請及使用文檔和常見問題。
聊天機器人 API
目前網(wǎng)絡(luò)上有許多非常好的智能聊天機器人,這里找了6個目前使用很廣泛的:
- 海知智能 功能很強大,不僅僅用于聊天。需申請 key,免費
- 思知對話機器人 注冊很簡單,調(diào)用也很簡單,而且完全免費
- 圖靈機器人 需要注冊賬號,可以申請 5 個機器人,未認證賬戶每個機器人只能回 3 條/天,認證賬戶每個機器人能用 100 條/天
- 青云客智能機器人 無須申請,無數(shù)量限制,但有點智障,分手神器,慎用
- 騰訊閑聊 需要注冊和申請,還需要加密處理
- 天行機器人 白嫖用戶綁定微信后有 10000 次永久額度,之后 1 元 10000 次
搭建微信機器人平臺
項目初始參考
wxbot
搭建機器人后臺管理。
項目介紹
- 控制臺
- 綁定機器人
- 登錄
- 自動通過好友驗證關(guān)鍵詞設(shè)置,當有人添加機器人時,關(guān)鍵詞匹配后直接通過
- 好友驗證通過自動回復(fù)
- 退出
- 自動回復(fù)
- 普通消息
- 針對好友/某個群聊/所有群聊 設(shè)置關(guān)鍵詞自動回復(fù)
- 我的群聊
- 群聊列表,管理所有群聊
- 設(shè)置群聊名稱,發(fā)布公告,發(fā)送群消息
- 設(shè)置群聊基本信息,入群歡迎語,成員違規(guī)次數(shù)上限,是否受機器人控制
- 定時任務(wù)
- 針對好友/某個群聊/所有群聊設(shè)置定時任務(wù),機器人在指定時間會觸發(fā)消息推送
技術(shù)構(gòu)成
- 服務(wù)端 Node.js
- SSR框架 NuxtJS
- 前端框架 Vue
- UI組件 Ant Design of Vue
- 持久化 MongoDB
- ipad協(xié)議 wechaty-puppet-padplus
這里就直接介紹下機器人模塊
|-- server/|———- /lib|------ FriendShip.js # 友誼關(guān)系,好友添加監(jiān)聽|------ Login.js # 機器人登錄退出|------ Message.js # 消息監(jiān)聽處理|------ Room.js # 加群,退出群聊|------ Task # 機器人定時任務(wù)|———- index.js # 入口文件
快速開始
準備條件
- 安裝 Node.js (v10 以上版本)、MongoDB。
- 推薦安裝 cnpm
安裝依賴
cnpm i
啟動服務(wù)
首先需要修改配置文件
local/config.js
或者根目錄創(chuàng)建
.local.config.js
配置文件(此文件已加入
.gitignore
中可以防止
token
敏感信息上傳至
git
)。
npm run local
npm run dev
先編譯項目
npm run build
再啟動服務(wù)
npm start
打開瀏覽器,訪問
http://localhost:3000/系統(tǒng)配置
根據(jù)實際情況修改
config.js
配置文件,修改后需要重啟服務(wù)才能生效。
參數(shù)說明:
host
String
類型,主機名,配置為
0.0.0.0
表示監(jiān)聽任意主機。
port
Number
類型,端口號。
mongoUrl
String
類型,MongoDB 鏈接。
secret
String
類型,JWT 秘鑰。
tianApiKey
String
類型,天行數(shù)據(jù)秘鑰
線上部署
使用PM2
推薦使用 pm2 進行
Node.js
的進程管理和持久運行。
安裝
cnpm i -g pm2
啟動
pm2 start pm2.config.js
踩坑
1.
Wechaty Token
申請及使用文檔和常見問題
- Wechaty 開源激勵計劃2.0 申請表
- 填寫項目信息
- Wechaty Token 申請及使用文檔和常見問題
2.
tianApiKey
申請及天行機器人配置
- 首先,去 天行數(shù)據(jù) 注冊賬號,申請
APIKEY
- 其次,申請 天行機器人 接口,用于機器人自動回復(fù)
- 最后,別忘記配置 機器人身份設(shè)置,否則在機器人回復(fù)中會有奇怪的代碼串,如
{robotname}
3.部署中執(zhí)行
sudo pm2
報錯
command not found
問題
- 原因是沒有將
pm2
加至環(huán)境變量中,先找到 node
的目錄 可以用 whereis node
來查找,然后查找 whereis pm2
,再使用 ln
建立軟連接 - 參考文章 Linux下使用pm2部署node以及安裝后command not found解決
4.部署中執(zhí)行
sudo pm2
報錯
permission denied
問題
- 原因是項目會動態(tài)生成中
logs
目錄中的文件,報錯權(quán)限不足,即 permission denied
- 參考文章 解決 pm2 中的 permission denied 問題
感謝
- 感謝 beclass 的開源項目
wxbot
,這是一套優(yōu)秀的微信機器人平臺。 - 感謝 Wechaty 團隊提供微信機器人
SDK
,讓開發(fā)者可以專注于業(yè)務(wù)代碼。 - 感謝 句子互動 提供的
pad
協(xié)議版 token
。