一个nightmare框架的微信网页版聊天机器人,可编程。基于express的RESTFul接口
- https://npm.taobao.org/mirrors/node 下载对应的版本
- 解压并mv /node-xxx/ /opt/
- ln -s /opt/node-xxx/bin/node /usr/local/bin/node
- ln -s /opt/node-xxx/bin/npm /usr/local/bin/npm
- npm install -g cnpm --registry=https://registry.npm.taobao.org
- ln -s /opt/node-xxx/bin/cnpm /usr/local/bin/cnpm
|____conf # 程序配置文件
| |____service.json
| |____wxconf.js
| |____cities.json # 城市气象编码表
|____lib # 模块代码
| |____weather.js
| |____inject
| | |____wxinjector.js
| |____wxbot.js
|____test
| |____segments.js
| |____wx_src
| | |____index.js
| |____request_demo.js
| |____weather
| | |____weather.js
| | |____citylist.json
| | |____README.md
| | |____citylist.xml
| | |____chinacities.json
| | |____cities.json
| |____upstream.js
| |____memo.md
|____.gitignore
|____package.json
|____README.md
|____sy-cli.js # 天气问答业务程序
|____syaya.js # 微信基础服务程序
- cnpm install
- 启动微信基础服务 node syaya.js
- 启动天气问答业务 node sy-cli.js
- 扫码登录微信账号(业务账号)
- 用另一个微信账号给业务账号发信息测试
做一个天气问答的测试
curl "http://127.0.0.1:8080/api/bot/login"
curl "http://127.0.0.1:8080/api/bot/logout"
curl "http://127.0.0.1:8080/api/bot/qrcode"
curl "http://127.0.0.1:8080/api/bot/query_messags"
curl "http://127.0.0.1:8080/api/bot/query_account"
curl "http://127.0.0.1:8080/api/bot/query_contacts"
curl "http://127.0.0.1:8080/api/bot/send_txt_message"
curl "http://127.0.0.1:8080/api/bot/send_txt_message" -d '{"user":"@2f37c025ea41accd42f31d40cfde73860d42d6e516c5b7a2cf36f5c3670dea9d", "msg":"非常可爱哒"}'
- ubuntu server上运行electron
$sudo apt-get install xvfb libgtk2.0-0 libnotify-bin libgconf-2-4 libnss3 libasound2 libcap2-bin libcups2 libxtst6 libxss1
$xvfb-run node --harmony syaya.js
- window.reload如何重新加载注入脚本: 在事件'dom-ready'中注入
page.engin.on('dom-ready', function () {
console.log("DOM-READY for inject...");
page.engin.inject("js", WX_HELPER_JS);
});
- express下,让curl的post正常工作
var bodyParser = require('body-parser');
var app = express();
app.use(bodyParser.json({
limit: '100kb',
type: 'application/x-www-form-urlencoded'
}));
- sleep等待
async function sleep(ms) {
return new Promise(resolve => {
var tm = setTimeout(() => {
console.log("clear", tm);
clearTimeout(tm);
resolve(0);
}, ms);
});
}
async function test_sleep(){
var r = await sleep(2000);
console.log(r);
}
test_sleep();
- js协程处理单条业务, 伪代码
var co = require("co");
function process_message(msg){
co(function *(message) {
var action = yield extract_action(message);
var r = yield action.do_step1();
if(r.status == "success"){
r = yield action.do_step2();
}
r = yield action.do_final();
r = yield make_response(action, message);
}, msg);
}