روبوت Node.js لتطبيق wechat.
نظام الرد التلقائي لواجهة المعلومات المفتوحة التي توفرها منصة WeChat العامة.
weixin-robot
عبارة عن غلاف عالي المستوى لـ webot وwechat-mp. webot
مسؤول عن تحديد قواعد الرد، wechat-mp
مسؤول عن التواصل مع خادم WeChat.
سمات:
أضف حساب WeChat وجرب التأثير:
المزيد من قائمة روبوتات WeChat التي تستخدم هذا المشروع
var express = require ( 'express' ) ;
var webot = require ( 'weixin-robot' ) ;
var app = express ( ) ;
// 指定回复消息
webot . set ( 'hi' , '你好' ) ;
webot . set ( 'subscribe' , {
pattern : function ( info ) {
return info . is ( 'event' ) && info . param . event === 'subscribe' ;
} ,
handler : function ( info ) {
return '欢迎订阅微信机器人' ;
}
} ) ;
webot . set ( 'test' , {
pattern : / ^test / i ,
handler : function ( info , next ) {
next ( null , 'roger that!' )
}
} )
// 你可以获取已定义的 rule
//
// webot.get('subscribe') ->
//
// {
// name: 'subscribe',
// pattern: function(info) {
// return info.is('event') && info.param.event === 'subscribe';
// },
// handler: function(info) {
// return '欢迎订阅微信机器人';
// }
// }
//
// 接管消息请求
webot . watch ( app , { token : 'your1weixin2token' , path : '/wechat' } ) ;
// 如果需要多个实例(即为多个微信账号提供不同回复):
var webot2 = new webot . Webot ( ) ;
webot2 . set ( {
'/hi/i' : 'Hello' ,
'/who (are|r) (you|u)/i' : 'I'm a robot.'
} ) ;
webot2 . watch ( app , {
token : 'token2' ,
path : '/wechat_en' , // 这个path不能为之前已经监听过的path的子目录
} ) ;
// 启动 Web 服务
// 微信后台只允许 80 端口
app . listen ( 80 ) ;
// 如果你不想让 node 应用直接监听 80 端口
// 可以尝试用 nginx 或 apache 自己做一层 proxy
// app.listen(process.env.PORT);
// app.enable('trust proxy');
بعد ذلك، يمكنك ملء عنوان الواجهة والرمز المميز في خلفية النظام الأساسي العام لـ WeChat، أو استخدام webot-cli لتصحيح أخطاء الرسائل.
إذا سارت الأمور على ما يرام وقمت ببناء الروبوت الخاص بك، فمرحبًا بك في صفحة الويكي الخاصة بهذا المشروع لإضافة حسابك.
توفير ملف webot
قابل للتنفيذ لإرسال رسائل الاختبار. تثبيت webot-cli باستخدام npm
:
npm install webot-cli -g
يوفر webot-cli وظيفة معالجة قوائم WeChat المخصصة بعد التثبيت، وتنفيذ ما يلي:
webot help menu
0.5.0 - قم بالتبديل إلى وحدة wechat-mp الأكثر انسيابية
ملاحظة: الآن إذا كنت تريد تمكين دعم الجلسة، فيجب أن يكون webot.watch
قبل app.use(connect.session())
> للحصول على تعريفات محددة للقواعد، يرجى الرجوع إلى وثائق الويب.
واجهة برمجة التطبيقات الرئيسية:
يحتوي كائن المعلومات الذي يتلقاه معالج قاعدة webot على محتوى رسالة الطلب ودعم الجلسة.
تعمل info
wexin-robot
على حزم محتوى طلب WeChat إلى قيمة أكثر توافقًا مع قواعد تسمية js، وتخزين معلمات إضافية في كائن info.param
وفقًا لـ MsgType
. وهذا يضمن توحيد كائنات info
ويسهل عليك استخدام نفس الروبوت على منصات مختلفة.
يمكنك الحصول على كائن المعلمة المتوافق مع مستند WeChat الرسمي من خلال info.raw
.
جدول مقارنة معلمات الطلب الأصلية وسمات المعلومات:
官方参数名 定义 info对象属性 备注
-------------------------------------------------------------------------------------------------------
ToUserName 开发者微信号 info.sp sp means "service provider"
FromUserName 发送方帐号(一个OpenID) info.uid
CreateTime 消息创建时间 (整型)
MsgId 消息id info.id
MsgType 消息类型 info.type
-------------------------------------------------------------------------------------------------------
Content 文本消息内容 info.text MsgType == text
-------------------------------------------------------------------------------------------------------
PicUrl 图片链接 info.param.picUrl MsgType == image
-------------------------------------------------------------------------------------------------------
Location_X 地理位置纬度(lat) info.param.lat MsgType == location
Location_Y 地理位置经度(lng) info.param.lng
Scale 地图缩放大小 info.param.scale
Label 地点名 info.param.label 可能为空
-------------------------------------------------------------------------------------------------------
Title 消息标题 info.param.title MsgType == link
Description 消息描述 info.param.description
Url 消息链接 info.param.url
-------------------------------------------------------------------------------------------------------
Event 事件类型 info.param.event MsgType == event
subscribe(订阅)、
unsubscribe(取消订阅)、
CLICK(自定义菜单点击事件)
LOCATION(上报地理位置事件)
EventKey 事件KEY值,与自定义菜单接 info.param.eventKey
口中KEY值对应
--------------------------------------------------------------------------------------------------------
MediaId 媒体文件的 id info.param.mediaId MsgType == voice / video
Recognition 语音识别的文本 info.param.recognition MsgType == voice
ThumbMediaId 视频消息缩略图的媒体id info.param.thumbMediaId MsgType == video
Format 音频文件的格式 info.param.format
يلاحظ:
Location_X
و Location_Y
للمعلومات الجغرافية.info.text
، لكن info.type
مختلف.على سبيل المثال، سيتم تحويل رسالة الموقع (MsgType === 'location') إلى:
{
uid : 'the_FromUserName' ,
sp : 'the_ToUserName' ,
id : 'the_MsgId' ,
type : 'location' ,
param : {
lat : 'the_Location_X' ,
lng : 'the_Location_Y' ,
scale : 'the_Scale' ,
label : 'the_Label'
}
}
في معظم الأوقات، لا تحتاج إلى تعيين قيمة لـ info.reply مباشرةً .
ما عليك سوى تقديم محتوى رسالة الرد في القيمة المرجعة لـ rule.handler
أو callbak. ستقوم البرامج الوسيطة السريعة التي تأتي مع webot.watch
تلقائيًا بتعيين قيمة لـ info.reply
، وتجميعها في ملف XML وإرسالها إلى خادم وي شات.
أنواع البيانات التي يدعمها info.reply
:
info . reply = '收到你的消息了,谢谢'
title 消息标题
url 消息网址
description 消息描述
picUrl 消息图片网址
info . reply = {
title : '消息标题' ,
url : 'http://example.com/...' ,
picUrl : 'http://example.com/....a.jpg' ,
description : '对消息的描述出现在这里' ,
}
// or
info . reply = [ {
title : '消息1' ,
url : 'http://example.com/...' ,
picUrl : 'http://example.com/....a.jpg' ,
description : '对消息的描述出现在这里' ,
} , {
title : '消息2' ,
url : 'http://example.com/...' ,
picUrl : 'http://example.com/....a.jpg' ,
description : '对消息的描述出现在这里' ,
} ]
title 标题
description 描述
musicUrl 音乐链接
hqMusicUrl 高质量音乐链接,wifi 环境下会优先使用该链接播放音乐
تحتاج إلى تحديد reply.type
كـ 'music'
:
info . reply = {
type : 'music' ,
title : 'Music 101' ,
musicUrl : 'http://....x.mp3' ,
hqMusicUrl : 'http://....x.m4a'
}
استمتع مع wechat واستمتع بكونك روبوتًا!
إذا كنت لا تريد الرد على رسالة، فيمكنك ضبط info.noReply = true
// 比如对于语音类型的消息不回复
webot . set ( 'ignore' , {
pattern : function ( info ) {
return info . is ( 'voice' ) ;
} ,
handler : function ( info ) {
info . noReply = true ;
return ;
}
} ) ;
(رخصة معهد ماساتشوستس للتكنولوجيا)
يُمنح الإذن مجانًا لأي شخص يحصل على نسخة من هذا البرنامج وملفات الوثائق المرتبطة به ("البرنامج") للتعامل في البرنامج دون قيود، بما في ذلك، على سبيل المثال لا الحصر، حقوق الاستخدام والنسخ والتعديل والدمج. ونشر و/أو توزيع وترخيص من الباطن و/أو بيع نسخ من البرنامج، والسماح للأشخاص الذين تم توفير البرنامج لهم بالقيام بذلك، وفقًا للشروط التالية:
يجب تضمين إشعار حقوق الطبع والنشر أعلاه وإشعار الإذن هذا في جميع النسخ أو الأجزاء الكبيرة من البرنامج.
يتم توفير البرنامج "كما هو"، دون أي ضمان من أي نوع، صريحًا أو ضمنيًا، بما في ذلك على سبيل المثال لا الحصر ضمانات القابلية للتسويق والملاءمة لغرض معين وعدم الانتهاك، ولا يتحمل المؤلفون أو أصحاب حقوق الطبع والنشر بأي حال من الأحوال المسؤولية عن أي شيء. المطالبة أو الأضرار أو غيرها المسؤولية، سواء في دعوى العقد أو الضرر أو غير ذلك، الناشئة عن أو خارج أو فيما يتعلق بالبرنامج أو الاستخدام أو المعاملات الأخرى في البرنامج.