Robot node.js untuk wechat.
Sistem balasan otomatis dari antarmuka informasi terbuka yang disediakan oleh platform publik WeChat.
weixin-robot
adalah pembungkus tingkat tinggi untuk webot dan wechat-mp. webot
bertanggung jawab untuk menentukan aturan balasan, wechat-mp
bertanggung jawab untuk berkomunikasi dengan server WeChat.
Fitur:
Tambahkan akun WeChat dan coba efeknya:
Daftar robot WeChat lainnya yang menggunakan proyek ini
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');
Kemudian Anda dapat mengisi alamat antarmuka dan token Anda di latar belakang platform publik WeChat, atau menggunakan webot-cli untuk men-debug pesan.
Jika semuanya berjalan dengan baik dan Anda telah membuat robot Anda sendiri, selamat datang di halaman wiki proyek ini untuk menambahkan akun Anda.
Menyediakan webot
file yang dapat dieksekusi untuk mengirim pesan pengujian. Instal webot-cli menggunakan npm
:
npm install webot-cli -g
webot-cli menyediakan fungsi pemrosesan menu khusus WeChat. Setelah instalasi, jalankan:
webot help menu
0.5.0 - Beralih ke modul wechat-mp yang lebih ramping
Catatan: Sekarang jika Anda ingin mengaktifkan dukungan sesi, webot.watch
harus sebelum app.use(connect.session())
> Untuk definisi aturan spesifik, lihat dokumentasi webot.
API Utama:
Objek info yang diterima oleh pengendali aturan webot berisi konten pesan permintaan dan dukungan sesi.
info
wexin-robot
mengemas konten permintaan WeChat menjadi nilai yang lebih sesuai dengan aturan penamaan js, dan menyimpan parameter tambahan di objek info.param
sesuai dengan MsgType
. Hal ini memastikan standarisasi objek info
dan memudahkan Anda menggunakan robot yang sama pada platform berbeda.
Anda bisa mendapatkan objek parameter yang konsisten dengan dokumen resmi WeChat melalui info.raw
.
Tabel perbandingan parameter permintaan asli dan atribut info:
官方参数名 定义 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
Melihat:
Location_X
dan Location_Y
informasi geografis.info.text
, tetapi info.type
berbeda.Misalnya, pesan lokasi (MsgType === 'lokasi') akan dikonversi menjadi:
{
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'
}
}
Seringkali Anda tidak perlu memberikan nilai ke info.reply secara langsung .
Anda hanya perlu memberikan konten pesan balasan dalam nilai kembalian rule.handler
atau callbak. Middleware ekspres yang disertakan dengan webot.watch
akan secara otomatis memberikan nilai ke info.reply
, mengemasnya ke dalam XML dan mengirimkannya ke Server WeChat.
Tipe data yang didukung oleh 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 环境下会优先使用该链接播放音乐
Anda perlu menentukan reply.type
sebagai 'music'
:
info . reply = {
type : 'music' ,
title : 'Music 101' ,
musicUrl : 'http://....x.mp3' ,
hqMusicUrl : 'http://....x.m4a'
}
Bersenang-senanglah dengan WeChat, dan nikmati menjadi robot!
Jika Anda tidak ingin membalas pesan, Anda dapat mengatur info.noReply = true
// 比如对于语音类型的消息不回复
webot . set ( 'ignore' , {
pattern : function ( info ) {
return info . is ( 'voice' ) ;
} ,
handler : function ( info ) {
info . noReply = true ;
return ;
}
} ) ;
(Lisensi MIT)
Izin dengan ini diberikan, secara gratis, kepada siapa pun yang memperoleh salinan perangkat lunak ini dan file dokumentasi terkait (“Perangkat Lunak”), untuk menggunakan Perangkat Lunak tanpa batasan, termasuk namun tidak terbatas pada hak untuk menggunakan, menyalin, memodifikasi, menggabungkan , mempublikasikan, mendistribusikan, mensublisensikan, dan/atau menjual salinan Perangkat Lunak, dan mengizinkan orang yang menerima Perangkat Lunak untuk melakukan hal tersebut, dengan tunduk pada ketentuan berikut:
Pemberitahuan hak cipta di atas dan pemberitahuan izin ini akan disertakan dalam semua salinan atau sebagian besar Perangkat Lunak.
PERANGKAT LUNAK INI DISEDIAKAN 'APA ADANYA', TANPA JAMINAN APA PUN, TERSURAT MAUPUN TERSIRAT, TERMASUK NAMUN TIDAK TERBATAS PADA JAMINAN KELAYAKAN UNTUK DIPERDAGANGKAN, KESESUAIAN UNTUK TUJUAN TERTENTU, DAN TIDAK ADA PELANGGARAN DALAM HAL APA PUN PENULIS ATAU PEMEGANG HAK CIPTA TIDAK BERTANGGUNG JAWAB ATAS APAPUN KLAIM, KERUSAKAN ATAU LAINNYA TANGGUNG JAWAB, BAIK DALAM TINDAKAN KONTRAK, HUKUM ATAU LAINNYA, YANG TIMBUL DARI, DARI ATAU SEHUBUNGAN DENGAN PERANGKAT LUNAK ATAU PENGGUNAAN ATAU HAL-HAL LAIN DALAM PERANGKAT LUNAK.