? Gambar Docker |.? Paket NPM |
Webhook robot WeChat kecil membantu Anda menghilangkan banyak hambatan dalam pengembangan Anda sendiri. Ini didasarkan pada permintaan http. Ini berbeda dengan hooks WeChat. Karena didasarkan pada web api, keuntungannya adalah dapat diterapkan pada perangkat seperti arm arsitektur.
Peringatan
Proyek ini saat ini didasarkan pada web WeChat, yang memiliki risiko dibatasi. Selain itu, proyek ini offline setiap dua hari sekali. Selain perbaikan fungsi normal, proyek ini tidak akan menerima permintaan fitur baru. Protokol windows berada di bawah WIP dan akan tersedia untuk menemui Anda dalam waktu dekat!
Fungsi | protokol web | protokol jendela |
---|---|---|
Ketersediaan saat ini | ✅ | |
cabang kode | utama | jendela |
Tag buruh pelabuhan | terbaru | jendela |
<Kirim pesan> | ✅Tunggal/Beberapa/Grup | ✅Tunggal/Beberapa/Grup |
Kirim teks | ✅ | ✅ |
Kirim gambar | ✅ Analisis gambar/gambar url lokal | ✅ Analisis gambar/gambar url lokal |
Kirim video (mp4) | ✅ Analisis video/url video lokal | |
Kirim dokumen | ✅ Penguraian file lokal/url | ✅ Penguraian file lokal/url |
<Terima pesan> | ||
menerima teks | ✅ | ✅ |
menerima suara | ✅ | |
menerima gambar | ✅ | |
menerima video | ✅ | |
menerima file | ✅ | |
Terima tautan tweet akun publik | ✅ | |
Terima pemberitahuan sistem | ✅ Notifikasi online / notifikasi offline / notifikasi tidak normal | |
Akuisisi avatar | ✅ | |
Balasan cepat | ✅ | ✅ |
<Manajemen grup> | ||
<Manajemen Teman> | ||
Terima permintaan pertemanan | ✅ | |
Permintaan melalui teman | ✅ | |
Dapatkan daftar kontak | ||
<Fungsi lainnya> | ||
Login otomatis tanpa pemutusan sambungan | ✅ | |
Otentikasi API | ✅ | ✅ |
n8n akses mulus | ✅ | |
Mendukung penerapan buruh pelabuhan | ✅ arm64/amd64 | ✅ amd64 |
Ekspor file log | ✅ | ✅ |
Fungsi-fungsi yang disebutkan di atas belum diterapkan, namun dibatasi oleh batasan protokol WeChat. Protokol yang berbeda mendukung fungsi yang berbeda, misalnya:
npx wechatbot-webhook
Kecuali terputus, login terakhir akan diingat secara default. Untuk mengubah akun Anda, jalankan perintah berikut
npx wechatbot-webhook -r
Jika Anda mengalami kesalahan instalasi, pastikan versi node Anda >= 18.14.1 #227
Salin api pesan push dari baris perintah, misalnya http://localhost:3001/webhook/msg/v2?token=[YOUR_PERSONAL_TOKEN]
Buka terminal baru dan coba curl berikut. Ubah nilai bidang to dan token ke nilai yang Anda inginkan.
curl --location ' http://localhost:3001/webhook/msg/v2?token=[YOUR_PERSONAL_TOKEN] '
--header ' Content-Type: application/json '
--data ' { "to": "测试昵称", data: { "content": "Hello World!" }} '
Penting
Manajer paket telah dimigrasikan ke pnpm. Silakan gunakan untuk menginstal dependensi guna mendukung beberapa patch paket sementara yang tidak teratur dan mempercepat instalasi dependensi.
docker pull dannicool/docker-wechatbot-webhook
# 启动容器并映射日志目录,日志按天维度生成,e.g: app.2024-01-01.log
docker run -d --name wxBotWebhook -p 3001:3001
-v ~ /wxBot_logs:/app/log
dannicool/docker-wechatbot-webhook
wget -O docker-compose.yml https://cdn.jsdelivr.net/gh/danni-cool/wechatbot-webhook@main/docker-compose.yml && docker-compose down && docker-compose -p wx_bot_webhook up
docker logs -f wxBotWebhook
Temukan alamat login kode QR, bagian url di bawah gambar, akses dengan browser, pindai kode untuk login ke wx
https://localhost:3001/login?token=[YOUR_PERSONAL_TOKEN]
Tips: Anda perlu menambahkan parameter menggunakan -e, dan memisahkan beberapa baris dengan , misalnya -e RECVD_MSG_API="https://example.com/your/url"
Fungsi | variabel | Komentar |
---|---|---|
tingkat log | LOG_LEVEL=informasi | Level log, defaultnya adalah info, hanya memengaruhi keluaran log saat ini, pertimbangkan untuk menggunakan debug untuk keluaran terperinci. Tidak peduli bagaimana nilai ini berubah, file log selalu mencatat log tingkat debug. |
Terima API pesan | RECVD_MSG_API=https://example.com/your/url | Jika Anda ingin menangani sendiri logika penerimaan pesan, seperti penautan berdasarkan pesan, isikan URL logika pemrosesan Anda |
Terima pesan API untuk menerima pesan yang dikirim sendiri | ACCEPT_RECVD_MSG_MYSELF=salah | RECVD_MSG_API Apakah akan menerima pesan dari dirinya sendiri (disetel ke benar, yaitu diterima, default salah) |
Token API masuk khusus | LOGIN_API_TOKEN=abcdefg123 | Anda juga dapat menyesuaikan token login Anda sendiri. Jika Anda tidak mengonfigurasinya, token tersebut akan dibuat secara default. |
Nonaktifkan login otomatis | DISABLE_AUTO_LOGIN=benar | Untuk mengeluarkan akun non-WeChat, Anda dapat mengandalkan sesi login saat ini untuk menghindari login . Jika Anda ingin memindai kode QR untuk login setiap saat, tambahkan konfigurasi ini. |
Antarmuka versi v2 menambahkan fungsi pengiriman grup. Untuk antarmuka versi v1, silakan pindah ke legacy-api.
POST
application/json
payload
Kirim teks atau file ke tautan eksternal, dan tautan eksternal tersebut akan diurai menjadi gambar atau file.
parameter | menjelaskan | tipe data | nilai bawaan | Bisakah itu kosong | Parameter opsional |
---|---|---|---|---|---|
ke | Untuk penerima pesan , String yang masuk akan dikirim ke nama panggilan secara default (hal yang sama berlaku untuk nama grup). Struktur Object yang masuk dapat dikirim ke orang yang membuat catatan, misalnya: {alias: '备注名'} . Nama grup tidak mendukung nama catatan. | Object String | - | N | - |
adalah ruangan | Apakah akan mengirim pesan ke grup , parameter ini menentukan apakah Anda mencari grup atau seseorang ketika mencari seseorang, karena nama panggilan sebenarnya sama dengan nama grup dari segi teknis pengolahannya. | Boolean | false | Y | true false |
data | Struktur isi pesan, lihat payload.data di bawah | Array Object | false | N | true false |
payload.data
parameter | menjelaskan | tipe data | nilai bawaan | Bisakah itu kosong | Parameter opsional |
---|---|---|---|---|---|
jenis | Jenis pesan , biarkan bidang kosong dan parsing menjadi teks biasa | text String | - | Y | fileUrl text |
isi | Konten pesan , jika Anda ingin mengirim beberapa URL dan menguraikannya, tentukan jenisnya sebagai fileUrl. Pada saat yang sama, isi URL dalam konten dan pisahkan dengan koma bahasa Inggris. | String | - | N | - |
curl --location ' http://localhost:3001/webhook/msg/v2?token=[YOUR_PERSONAL_TOKEN] '
--header ' Content-Type: application/json '
--data ' {
"to": "testUser",
"data": { "content": "你好" }
} '
Dalam beberapa kasus, mengirimkan nama file url secara langsung mungkin tidak sesuai dengan yang kita inginkan. Parameter query
$alias
dapat digunakan untuk menyambung url untuk menentukan nama file yang dikirim ke target (catatan: alias tidak melakukan konversi file)
curl --location ' http://localhost:3001/webhook/msg/v2?token=[YOUR_PERSONAL_TOKEN] '
--header ' Content-Type: application/json '
--data ' {
"to": "testUser",
"data": {
"type": "fileUrl" ,
"content": "https://download.samplelib.com/jpeg/sample-clouds-400x300.jpg?$alias=cloud.jpg"
}
} '
curl --location ' http://localhost:3001/webhook/msg/v2?token=[YOUR_PERSONAL_TOKEN] '
--header ' Content-Type: application/json '
--data ' {
"to": "testGroup",
"isRoom": true,
"data": { "type": "fileUrl" , "content": "https://download.samplelib.com/jpeg/sample-clouds-400x300.jpg" },
} '
curl --location ' http://localhost:3001/webhook/msg/v2?token=[YOUR_PERSONAL_TOKEN] '
--header ' Content-Type: application/json '
--data ' {
"to": "testUser",
"data": [
{
"type": "text",
"content": "你好"
},
{
"type": "fileUrl",
"content": "https://samplelib.com/lib/preview/mp3/sample-3s.mp3"
}
]
} '
curl --location ' http://localhost:3001/webhook/msg/v2?token=[YOUR_PERSONAL_TOKEN] '
--header ' Content-Type: application/json '
--data ' [
{
"to": "testUser1",
"data": {
"content": "你好"
}
},
{
"to": "testUser2",
"data": [
{
"content": "你好"
},
{
"content": "近况如何?"
}
]
}
] '
response
nilai kembaliansuccess
: Apakah pesan berhasil dikirim atau tidak. Meskipun sebagian dari pesan grup berhasil dikirim, pesan tersebut akan kembali true
message
: pesan yang diminta ketika terjadi kesalahantask
: mengirim detail tugastask.successCount
: Jumlah pesan yang berhasil dikirimtask.totalCount
: jumlah total pesantask.failedCount
: Jumlah pesan yang gagal dikirimtask.reject
: Parameter dan pesan kesalahan karena verifikasi parameter gagaltask.sentFailed
: Karena pengiriman gagal dan prompt errortask.notFound
: Karena pengguna atau grup tidak ditemukan dan muncul kesalahanPastikan konsistensi pengiriman pesan tunggal. Kegagalan memverifikasi parameter tertentu akan menghentikan semua tugas pengiriman pesan.
{
"success" : true ,
"message" : " " ,
"task" : {
"successCount" : 0 ,
"totalCount" : 0 ,
"failedCount" : 0 ,
"reject" : [],
"sentFailed" : [],
"notFound" : []
}
}
Membaca file saat ini hanya mendukung pengiriman tunggal.
POST
multipart/form-data
payload
parameter | menjelaskan | tipe data | nilai bawaan | Bisakah itu kosong | Nilai opsional |
---|---|---|---|---|---|
ke | Untuk penerima pesan, String yang masuk dikirim ke nama panggilan secara default (hal yang sama berlaku untuk nama grup). Struktur Json String yang masuk mendukung pengiriman ke orang yang membuat catatan, misalnya: --form 'to= "{alias: "小号"}" ', nama grup tidak mendukung nama komentar | String | - | N | - |
adalah ruangan | Apakah akan mengirim pesan grup , teks biasa formData hanya dapat menggunakan tipe String , 1 mewakili ya, 0 mewakili tidak, | String | 0 | Y | 1 0 |
isi | File , file lokal hanya dapat dikirim satu per satu, beberapa file dipanggil secara manual beberapa kali | Binary | - | N | - |
curl --location --request POST ' http://localhost:3001/webhook/msg?token=[YOUR_PERSONAL_TOKEN] '
--form ' to=testGroup '
--form content=@ " $HOME /demo.jpg "
--form ' isRoom=1 '
response
nilai kembalian {
"success" : true ,
"message" : " Message sent successfully "
}
payload
POST
multipart/form-data
formulirData | menjelaskan | tipe data | Nilai opsional | Contoh |
---|---|---|---|---|
jenis | Jenis fungsi
Tipe lainnya
Tipe sistem
| String | file text urlLink friendship unknown system_event_login system_event_logout system_event_error system_event_push_notify | - |
isi | Konten yang ditransfer, teks atau file yang ditransfer berbagi bidang ini. Silakan lihat contoh untuk pemetaan struktur. | String Binary | Contoh | |
sumber | Data pengirim terkait pesan, String JSON | String | Contoh | |
disebutkan | Pesannya adalah @pesanku #38 | String | 1 0 | - |
adalahMsgFromSelf | Apakah itu pesan dari diri Anda sendiri #159 | String | 1 0 | - |
Pemrosesan formData di sisi server umumnya memerlukan penangan yang sesuai. Dengan asumsi Anda telah menyelesaikan langkah ini, Anda akan mendapatkan permintaan berikut
{
"type" : " text " ,
"content" : "你好" ,
"source" : " { " room " : "" , " to " :{ " _events " :{}, " _eventsCount " :0, " id " : " @f387910fa45 " , " payload " :{ " alias " : "" , " avatar " : " /cgi-bin/mmwebwx-bin/webwxgeticon?seq=1302335654&username=@f38bfd1e0567910fa45&skey=@crypaafc30 " , " friend " :false, " gender " :1, " id " : " @f38bfd1e10fa45 " , " name " : " ch. " , " phone " :[], " star " :false, " type " :1}}, " from " :{ " _events " :{}, " _eventsCount " :0, " id " : " @6b5111dcc269b6901fbb58 " , " payload " :{ " address " : "" , " alias " : "" , " avatar " : " /cgi-bin/mmwebwx-bin/webwxgeticon?seq=123234564&username=@6b5dbb58&skey=@crypt_ec356afc30 " , " city " : " Mars " , " friend " :false, " gender " :1, " id " : " @6b5dbd3facb58 " , " name " : " Daniel " , " phone " :[], " province " : " Earth " , " signature " : "" , " star " :false, " weixin " : "" , " type " :1}}} " ,
"isMentioned" : " 0 " ,
"isMsgFromSelf" : " 0 " ,
"isSystemEvent" : " 0 " // 考虑废弃,请使用type类型判断系统消息
}
Menerima contoh pesan api curl (langsung diimpor ke tukang pos untuk debugging)
curl --location 'https://your.recvdapi.com'
--form 'type="file"'
--form 'content=@"/Users/Downloads/13482835.jpeg"'
--form 'source="{\"room\":\"\",\"to\":{\"_events\":{},\"_eventsCount\":0,\"id\":\"@f387910fa45\",\"payload\":{\"alias\":\"\",\"avatar\":\"/cgi-bin/mmwebwx-bin/webwxgeticon?seq=1302335654&username=@f38bfd1e0567910fa45&skey=@crypaafc30\",\"friend\":false,\"gender\":1,\"id\":\"@f38bfd1e10fa45\",\"name\":\"ch.\",\"phone\":[],\"star\":false,\"type\":1}},\"from\":{\"_events\":{},\"_eventsCount\":0,\"id\":\"@6b5111dcc269b6901fbb58\",\"payload\":{\"address\":\"\",\"alias\":\"\",\"avatar\":\"/cgi-bin/mmwebwx-bin/webwxgeticon?seq=123234564&username=@6b5dbb58&skey=@crypt_ec356afc30\",\"city\":\"Mars\",\"friend\":false,\"gender\":1,\"id\":\"@6b5dbd3facb58\",\"name\":\"Daniel\",\"phone\":[],\"province\":\"Earth\",\"signature\":\"\",\"star\":false,\"weixin\":\"\",\"type\":1}}}"'
--form 'isMentioned="0"'
response
nilai pengembalian (opsional)Jika Anda mengharapkan untuk membalas segera ( balas cepat ) setelah menerima pesan menggunakan
RECVD_MSG_API
, silakan kembalikan nilai yang dikembalikan sesuai dengan struktur berikut.
json
parameter | menjelaskan | tipe data | nilai bawaan | Bisakah itu kosong | Parameter opsional |
---|---|---|---|---|---|
kesuksesan | Apakah permintaan berhasil atau tidak, mengembalikan salah atau tidak memiliki bidang ini, dan balasan tidak akan diproses. true pesan khusus juga dikontrol melalui bidang ini, seperti menambahkan undangan pertemanan diproses. | Boolean | - | Y | true false |
data | Jika Anda perlu membalas pesan, Anda perlu menentukan kolom data | Object Array Object | - | Y |
response.data
dataparameter | menjelaskan | tipe data | nilai bawaan | Bisakah itu kosong | Parameter opsional |
---|---|---|---|---|---|
jenis | Jenis pesan . Jika bidang ini tidak diisi, maka secara default akan menggunakan jenis transmisi teks. | String | text | Y | fileUrl text |
isi | Konten pesan , jika Anda ingin mengirim beberapa URL dan menguraikannya, tentukan jenisnya sebagai fileUrl. Pada saat yang sama, isi URL dalam konten dan pisahkan dengan koma bahasa Inggris. | String | - | N | - |
Jika Anda membalas satu pesan
{
"success" : true ,
"data" : {
"type" : " text " ,
"content" : " hello world! "
}
}
Gabungkan balasan ke beberapa pesan
{
"success" : true ,
"data" : [
{
"type" : " text " ,
"content" : " hello world! "
},
{
"type" : " fileUrl " ,
"content" : " https://samplelib.com/lib/preview/mp3/sample-3s.mp3 "
}
]
}
Selain mengonfigurasi token saat buruh pelabuhan dimulai, dalam kasus token default, token default akan dibuat secara default dan ditulis ke file
.env
.
/login
GET
200
Kembalikan json yang berisi pengguna saat ini
{ "success" : true , "message" : " Contact<TestUser>is already login " }
Tampilkan halaman kode pemindaian login WeChat
Anda dapat secara aktif melakukan polling antarmuka untuk memeriksa apakah layanan berjalan normal.
/healthz
GET
200
Jika WeChat masuk, teks biasa healthy
akan dikembalikan, jika tidak, unHealthy
akan dikembalikan.
Mulai dari versi 2.8.0, Anda dapat mengakses sumber daya statis seperti avatar melalui antarmuka ini. Untuk detailnya, lihat bidang avatar pada contoh struktur data recvd_api.
Perhatikan bahwa semua alamat sumber daya statis yang dilaporkan ke recvd_api tidak akan memiliki token secara default dan perlu disambung sendiri, jika tidak, kesalahan 401 akan muncul. Harap pastikan bahwa Anda masuk dengan WeChat dan Anda perlu mendapatkan sumber daya melalui status masuk.
Alamat : /resouces
metode : GET
pertanyaan :
/avatar/1234567890.jpg
dikodekan sebagai avatar%2F1234567890.jpg
status : 200
404
401
contoh : http://localhost:3001/resouces?media=%2Fcgi-bin%2Fmmwebwx-bin%2Fwebwxgetheadimg%3Fseq%3D83460%26namapengguna%3D%40%4086815a%26skey%3D&token=[YOUR_PERSONAL_TOKEN]
200
Berhasil memperoleh sumber daya dan mengembalikan file sumber daya statis
404
Gagal mendapatkan sumber daya
401
tidak membawa token login { "success" : false , "message" : " Unauthorized: Access is denied due to invalid credentials. " }
401
Status login WeChat telah kedaluwarsa {
"success" : false , "message" : " you must login first "
}
Terima kasih kepada semua kontributor kami!
Lihat CHANGELOG untuk konten yang diperbarui