Ein Chatbot, der auf Basis von
phantomjs
und WeChat im Web entwickelt wurde. Das verwendete WeChat-Konto (also das Konto, das als Roboter fungiert) ist ein persönliches Konto und kann mit Anweisungen angepasst werden.
Sie können ein WeChat-Konto angeben:
Kundenspezifische Anweisungen werden nicht zur Bearbeitung an AI übergeben:
Allein Spaß zu haben ist nicht so gut wie gemeinsam Spaß zu haben. Sie können es dem Gruppenchat zuordnen:
Überprüfen Sie das Protokoll im Hintergrundprogramm:
- Intelligente WeChat-Antwort, Überwachung, Statistiken usw.
- Bequeme Abfrage
- Unterhaltung(liao)le(mei)
Quellcode herunterladen:
git clone https://github.com/doterlin/wechat-robot.git
Installieren Sie die folgende Umgebung:
1.node.js
2.phantomjs
3.casperjs
Suchen und konfigurieren Sie /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 + '[闪电]已启动...',
}
Abhängigkeiten installieren und Befehle ausführen:
npm install
casperjs index.js
Wenn Sie die Meldung erhalten, dass python找不到
, installieren Sie bitte Python und stellen Sie sicher, dass es global ausgeführt werden kann.
Scannen Sie den QR-Code, um sich bei WeChat anzumelden Wenn Sie nach dem Ausführen die folgende Eingabeaufforderung sehen, scannen Sie den angezeigten QR-Code:
正在加载二维码...
已保存二维码,路径:"static/img/qr.jpg".
正在使用默认软件打开二维码,请用手机微信扫一扫确认登录 (若没有请手动打开)
Bitte scannen Sie den QR-Code mit Ihrem Mobiltelefon und bestätigen Sie die Anmeldung一分钟内
. Nachdem登录成功
und发送欢迎语
reicht es. Damit sind die Nutzungsschritte abgeschlossen. In den folgenden Kapiteln wird erläutert, wie Sie die Funktionalität erweitern können.
Bevor Sie dies tun, benötigen Sie möglicherweise zwei Methoden:
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));
});
})
Sie können die Funktionen des Roboters je nach Bedarf in folgenden Aspekten erweitern:
//你可以写一些指令而不是交给AI处理
//指令分为精确匹配指令和模糊匹配指令
//-------------------------------------------------------------------
//精确匹配
//精确指令在`/src/directive/exact.js`下编写。
//key是指令名称,值是一个方法,接受参数msgContent(用户发送的消息)和casperIns(casper实例),如:
//当对方发送'关闭'指令时程序提示并退出。
module.exports = {
'关闭': function (msgContent, casperIns) {
message.send(casperIns, '[玫瑰]感谢您的使用[玫瑰]nr([闪电]需要开启请在控制台启动程序[闪电])');
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;
//-------------------------------------------------------------------
Ich habe das noch nicht recherchiert.
Beim Debuggen des Codes können Sie das Feld logLevel
in der capserjs
-Konfigurationsauswahl auf info
setzen, um weitere phantomjs
Protokolle anzuzeigen. Weitere Konfigurationen finden Sie in der Dokumentation zu 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*方法超时...' )
}
}
Darüber hinaus werden bei der Ausführung jedes Schritts Browser-Screenshots in /static/img
gespeichert, um die Anzeige des Browser-Renderings zu erleichtern. Beispielsweise wird jedes Mal, wenn eine neue Nachricht eingeht, ein Screenshot erstellt und als lastNewMsgContent.png
überschrieben.
Willkommen, um PR für die Sekundärentwicklung einzureichen und gemeinsam an der Verbesserung des Projekts zu arbeiten!
Copyright (c) 2020 doterlin
Hiermit wird jeder Person, die eine Kopie dieser Software und der zugehörigen Dokumentationsdateien (die „Software“) erhält, kostenlos die Erlaubnis erteilt, mit der Software ohne Einschränkung zu handeln, einschließlich und ohne Einschränkung der Rechte zur Nutzung, zum Kopieren, Ändern und Zusammenführen , Kopien der Software zu veröffentlichen, zu verteilen, unterzulizenzieren und/oder zu verkaufen und Personen, denen die Software zur Verfügung gestellt wird, dies zu gestatten, vorbehaltlich der folgenden Bedingungen:
Der obige Urheberrechtshinweis und dieser Genehmigungshinweis müssen in allen Kopien oder wesentlichen Teilen der Software enthalten sein.
DIE SOFTWARE WIRD „WIE BESEHEN“ ZUR VERFÜGUNG GESTELLT, OHNE JEGLICHE AUSDRÜCKLICHE ODER STILLSCHWEIGENDE GEWÄHRLEISTUNG, EINSCHLIESSLICH, ABER NICHT BESCHRÄNKT AUF DIE GEWÄHRLEISTUNG DER MARKTGÄNGIGKEIT, DER EIGNUNG FÜR EINEN BESTIMMTEN ZWECK UND DER NICHTVERLETZUNG VON RECHTEN ANSPRÜCHE, SCHÄDEN ODER ANDERES HAFTUNG, SEI ES AUS EINEM VERTRAG, AUS unerlaubter Handlung oder auf andere Weise, die sich aus, aus oder im Zusammenhang mit der SOFTWARE oder der NUTZUNG ODER ANDEREN HANDELN MIT DER SOFTWARE ergibt.