Github: https://github.com/doterlin/wechat-robotnode
基於
phantomjs
和web端微信開發的聊天機器人。使用的微信帳號(即充當機器人的帳號)爲我的帳號,可自定義指令。python
能夠指定一個微信帳號:
jquery
自定義指令不會交給AI處理:
git
獨樂樂不如衆樂樂,能夠指定到羣聊上:
github
在後臺程序查看log:web
微信智能回覆,監控,統計等ajax
便捷查詢正則表達式
娛(liao)樂(mei)npm
下載好源碼並安裝如下環境:json
1.node.js
2.phantomjs
3.casperjs
找到並配置好/config/const.js
//機器人名字 var ROBOT_NAME = "小強"; module.exports = { //微信web版地址 'URL' : 'https://wx.qq.com/', //機器人名字 'ROBOT_NAME' : ROBOT_NAME, //圖靈機器人apiKey和api地址 //AI部分使用的是第三方機器人圖靈(http://www.tuling123.com/) //這裏只是示例,請你們自行到圖靈官網註冊並替換掉apikey免費版限5000次調用/天。有條件的同窗能夠付費支持下好產品 'TURING_APIKEY': '99fecec3424d416898b91b0998e2b26a', 'TURING_URL' : 'http://www.tuling123.com/openapi/api', //鎖定的微信號備註,注意是備註;若是是羣聊則填羣聊名稱便可。 //填寫的名稱請預先在手機微信上搜索確認搜索結果是否出如今第一個 'TARGET_NICK' : '二十投小分隊', //啓動時打招呼消息 'HELLO_WORLD' : '[閃電]' + ROBOT_NAME + '[閃電]已啓動...', }
安裝依賴和運行命令:
npm install
capserjs index.js
若是提示python找不到
之類的話請安裝一下python並保證其能運行在全局
掃碼登陸微信
運行後看到以下提示時則掃一下彈出來的二維碼:
正在加載二維碼... 已保存二維碼,路徑:"static/img/qr.jpg". 正在使用默認軟件打開二維碼,請用手機微信掃一掃確認登陸 (若沒有請手動打開)
請在一分鐘內
使用手機掃碼並確認登陸。出現登陸成功
和發送歡迎語
提示後便可。這樣就完成了使用步驟。下面的章節是介紹如何去擴展功能。
在這以前你可能須要兩個方法:
message.send()
//路徑:src/utils/message.js //回覆消息的方法message.send //使用如: var message = require('/src/utils/message'); ... casper.then(function(){ message.send(this, '你好'); })
ajax() / ajax.get() / ajax.post() / ajax.getJSON()
//路徑:src/utils/ajax.js //在聊天器調ajax的方法 //使用如: var ajax= require('/src/utils/ajax'); ... casper.then(function(){ ajax(this, "http://example.com/getInfo", 'get', {uid: 123}, function(res){ console.log(JSON.stringify(res)); }); //或者 ajax.get(this, "http://example.com/getInfo", {uid: 123}, function(res){ console.log(JSON.stringify(res)); }); //jsonp ajax.getJSON(this, "http://example.com/getInfo?calback=?", {uid: 123}, function(res){ console.log(JSON.stringify(res)); }); })
你能夠根據須要按如下方面擴充機器人的功能:
//你能夠寫一些指令而不是交給AI處理 //指令分爲精確匹配指令和模糊匹配指令 //------------------------------------------------------------------- //精確匹配 //精確指令在`/src/directive/exact.js`下編寫。 //key是指令名稱,值是一個方法,接受參數msgContent(用戶發送的消息)和casperIns(casper實例),如: //當對方發送'關閉'指令時程序提示並退出。 module.exports = { '關閉': function (msgContent, casperIns) { message.send(casperIns, '[玫瑰]感謝您的使用[玫瑰]\n\r([閃電]須要開啓請在控制檯啓動程序[閃電])'); casperIns.echo('微信發出關閉口令,程序退出。') return casperIns.exit(); } } //------------------------------------------------------------------- //模糊匹配 //模糊匹配指令在`/src/directive/fuzzy.js`下編寫。 //接收參數前兩個同精確指令,第三個是當前的正則表達式; //指令可單獨防在src/directive/explain下方便維護,如weather.js: //匹配'地名 + 天氣',調用天氣api var weather = require('./explain/weather'); module.exports = { '/天氣/g': weather } //weather.js實現以下: var ajax = require('../../utils/ajax'); var message = require('../../utils/message'); var formatWeather = function(local, weather) { //此方法對返回的json格式化,詳情請查看源碼 } var weather = function(msgContent, casperIns, regex) { var local = msgContent.replace(/ |天氣/, ''); var resource = 'http://wthrcdn.etouch.cn/weather_mini?city=' + encodeURIComponent(local); ajax.get(casperIns, resource, {}, function(res){ var weather = JSON.parse(res); if (weather.status == 1000) { message.send(casperIns, formatWeather(local, weather)); } else { message.send(casperIns, '未查找到相關天氣信息。請嘗試輸入格式如"廣州天氣"。') } }); } module.exports = weather; //-------------------------------------------------------------------
這個我目前也沒研究。
調試代碼時可將capserjs
配置選像中的logLevel
字段設爲info
將會顯示更多phantomjs
log,更多配置請移步casperjs文檔。
//路徑:config/casper.js module.exports = { clientScripts: [ 'static/js/jquery.js' ], pageSettings: { loadImages: true, userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.14 Safari/537.36', }, logLevel: "info", //here viewportSize: {width: 1300, height: 900}, verbose: true, waitTimeout: 1000 * 60 * 60 * 24 * 365, onWaitTimeout: function(){ console.log( 'waitFor*方法超時...' ) } }
另外,在執行各個步驟時會把瀏覽器截圖保存到/static/img
,方便查看瀏覽器渲染狀況。好比每獲取到一條新消息時會截圖並覆蓋爲lastNewMsgContent.png
。
二次開發若方便請
Fork
貢獻給本Github,共同完善項目!
下一版本更新但不限於如下內容:
1.支持綁定多個微信賬號
2.UI化控制檯(node.js web
同步命令log及部分操做)3.支持圖片識別和回覆(如鬥圖)4.更多實用指令