2023年最新 wechaty 框架开发微信机器人详细 API 教程说明(NodeJs 版本)

这篇具有很好参考价值的文章主要介绍了2023年最新 wechaty 框架开发微信机器人详细 API 教程说明(NodeJs 版本)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 基础 API 教程概述

在使用 wechaty 相关 api 之前请大家先学习 wechaty 基础篇!!!

博主有话要说!!!

为什么要选择看博主的博文?因为 Wechaty 官方文档已经太久没有更新了,所以同学们学习 WeChaty 请使用博主的博客作为教程文档,博主都是自己研究测试整理出来的,所有的案例测试都是最新版。

基础篇:最新 2023 如何使用 wechaty 框架开发微信机器人详细教程(基础篇)

微信机器人框架,微信,机器人

2. 图片二维码扫码登陆

配置微信机器人启动快捷脚本 npm run start

在 package.json 文件中,配置 "start": "node bot.js"

微信机器人框架,微信,机器人

在 terminal 终端进行执行

PS C:\Users\Administrator\Desktop\HackerWaking\Wechaty-Project> npm run start

> wechaty-project@1.0.0 start
> node index.js

图片二维码扫码登陆

const { WechatyBuilder } = require('wechaty');
const qrcode = require('qrcode-terminal');

const bot = WechatyBuilder.build()

bot.on('scan', (code, status) => {
    qrcode.generate(code, { small: true });
})

3. 判断微信群消息

判断 message.room() 对象进行判断是否是群消息

bot.on('message', async message => {
    const room = message.room()
    if (room) {
        console.log(room)
        const talker = message.talker();
        talker.say("hello, i got your message")
    }
});

查询 message.room() 群名 topic 回复群消息 hello

bot.on('message', async message => {
    const room = message.room()
    if (room && await room.topic() == "testgroup") {
        room.say("hello")
    }
});

4. 接收图片消息保存

机器人 bot 监听消息判断是否是图片消息?

const fs = require('fs');

bot.on('message', async message => {
	if (message.type() == bot.Message.Type.Image) {
	    const fileBox = await message.toFileBox()
	    console.log(fileBox)
	    console.log("Message.Type.Image")
	    const ws = fs.createWriteStream(fileBox._name);  
	    ws.write(fileBox.buffer);  
	}
});

图片类型消息 fileBox 数据结构

FileBox {
	version: '1.5.5',
	_type: 4,
	_size: 115413,
	md5: undefined,
	mimeType: 'application/unknown',
	_mediaType: 'image/jpeg',
	_name: '6373249138066348739.jpg',
	_metadata: undefined,
	base64: undefined,
	remoteUrl: undefined,
	qrCode: undefined,
	uuid: undefined,
	buffer: <Buffer ff d8 ff e0 00 10 4a 46 49 46 00 01 01 00 00 01 00 01 00 00 ff db 00 43 00 0a 07 07 08 07 06 0a 08 08 08 0b 0a 0a 0b 0e 18 10 0e 0d 0d 0e 1d 15 16 11 ... 115363 more bytes>,
	localPath: undefined,
	stream: undefined,
	headers: undefined
}

bot.Message.Type 消息类型

MessageType {
	Unknown = 0,
	
	Attachment  = 1,    ### Attach(6),
	Audio       = 2,    ### Audio(1), Voice(34)
	Contact     = 3,    ### ShareCard(42)
	ChatHistory = 4,    ### ChatHistory(19)
	Emoticon    = 5,    ### Sticker: Emoticon(15), Emoticon(47)
	Image       = 6,    ### Img(2), Image(3)
	Text        = 7,    ### Text(1)
	Location    = 8,    ### Location(48)
	MiniProgram = 9,    ### MiniProgram(33)
	GroupNote   = 10,   ### GroupNote(53)
	Transfer    = 11,   ### Transfers(2000)
	RedEnvelope = 12,   ### RedEnvelopes(2001)
	Recalled    = 13,   ### Recalled(10002)
	Url         = 14,   ### Url(5)
	Video       = 15,   ### Video(4), Video(43)
	Post        = 16,   ### Moment, Channel, Tweet, etc
}

5. 微信群发送图片

官方 Wechaty 发送案例展示

import { FileBox }  from 'wechaty'

const fileBox = FileBox.fromFile('C:\Users\Administrator\Desktop\image.png')
await bot.say(fileBox)

亲测存在报错!uncaughtException TypeError: Cannot read properties of undefined (reading ‘fromFile’)

可能是 wechaty 版本问题 >>> 解决方案:单独安装 file-box 模块包调用

npm i file-box

具体解决方案实现

const { FileBox } = require('file-box') 

const fileBox1 = FileBox.fromFile('C:\Users\Administrator\Desktop\image.png')
await bot.say(fileBox1)

const fileBox2 = FileBox.fromUrl('https://wechaty.js.org/img/icon.png')
await bot.say(fileBox2)
函数 说明
FileBox.fromFile 选择本地图片
FileBox.fromUrl 选择网络图片

例如:检测关键词回复图片

const { WechatyBuilder } = require('wechaty');
const { FileBox } = require('file-box') 
const qrcode = require('qrcode-terminal');
const path = require('path')
const bot = WechatyBuilder.build()

bot.on('scan', (code, status) => { qrcode.generate(code, { small: true }); })
bot.on('login', user => console.log(`User ${user} logged in`))

bot.on('message', async message => {
    const room = message.room()
	if (room && message.payload.type != 7) {
	    return;
    } else {
        let msg = message.text()
        if (msg == "chicken") {
            await room.say("Chicken is too beautiful.")
        }
        if (msg == "ikun") {
            const fileBox = FileBox.fromFile(path.join(process.cwd(), "image.png"))
            await room.say(fileBox)
        }
    }
});

bot.start();

真机演示展示

微信机器人框架,微信,机器人

6. 音频处理工具

微信机器人框架,微信,机器人

下载地址:https://github.com/BtbN/FFmpeg-Builds/releases

ffmpeg 工具 bin 目录

微信机器人框架,微信,机器人

配置 ffmpeg/bin 系统环境变量

微信机器人框架,微信,机器人

7. 接收语音消息保存

机器人 bot 监听消息判断是否是语音消息?

const fs = require('fs');
bot.on('message', async message => {
	if (message.type() == bot.Message.Type.Audio) {
	    const fileBox = await message.toFileBox()
	    console.log(fileBox)
	    console.log("Message.Type.Audio")
	    const ws = fs.createWriteStream(fileBox._name);  
	    ws.write(fileBox.stream);  
	}
});

语音类型消息 fileBox 数据结构

FileBox {
	version: '1.5.5',
	_type: 6,
	_size: undefined,
	md5: undefined,
	mimeType: 'application/unknown',
	_mediaType: 'audio/silk',
	_name: 'message-6741646316917598047-audio.sil',
	_metadata: { voiceLength: 1231 },
	base64: undefined,
	remoteUrl: undefined,
	qrCode: undefined,
	uuid: undefined,
	buffer: undefined,
	localPath: undefined,
	stream: <Buffer ff f3 38 c4 00 0c 30 02 11 bd 41 18 00 00 38 44 2c 29 1a c0 7c 1f a8 13 07 cf a7 52 81 00 cf 83 fc 06 7d ff 97 3f fc bb df ff 58 3e 08 1c cb ff ac fe ... 2539 more bytes>,
	headers: undefined
}

接收保存类型:sil 文件

message-5316276040531231762-audio.sil

借助 ffmpeg 转换音频格式

const { exec } = require('child_process');

const silFilePath = 'message-5316276040531231762-audio.sil';
const mp3FilePath = 'message-5316276040531231762-audio.mp3';

const command = `ffmpeg -i ${silFilePath} ${mp3FilePath}`;

exec(command, (error, stdout, stderr) => {
    if (error) {
        console.error(`Error: ${error.message}`);
        return;
    }
    console.log('Conversion successful!');
});

8. 查询联系人信息

事件 ready 是指微信机器人登陆完成启动预备状态

bot.on('ready', () => {
	let contactName = ""
    bot.Contact.find(contactName).then(contact => {
        console.log(contact)
    }).catch(err => {
        console.log()
    })
})

联系人信息结构体

WechatifiedContactSelfImpl {
    _events: [Object: null prototype] {},
    _eventsCount: 0,
    _maxListeners: undefined,
    id: '@80d60ed0fb7633cb0069de96f78718df80a0148618f1981b7fe3869f145a82d5',
    payload: {
	    address: undefined,
	    alias: '',
	    avatar: '/cgi-bin/mmwebwx-bin/webwxgeticon?seq=1945142728&username=@80d60ed0fb7633cb0069de96f78718df80a0148618f1981b7fe3869f145a82d5&skey=@crypt_13d84e54_07d2f691525dadf043c467d1a3f4b23f',
	    city: undefined,
	    friend: false,
	    gender: 1,
	    id: '@80d60ed0fb7633cb0069de96f78718df80a0148618f1981b7fe3869f145a82d5',
	    name: '一语中的',
	    phone: [],
	    province: undefined,
	    signature: '唤醒手腕',
	    star: false,
	    weixin: undefined,
	    type: 1
    },
    [Symbol(kCapture)]: false
}

查询联系人并且发送消息

bot.on('ready', () => {
    let contactName = ""
    bot.Contact.find(contactName).then(contact => {
    	contact.say("hello")
    }).catch(err => {
        console.log()
    })
})

9. ChatGPT3.5 应用

特别注意:调用 chatGPT 3.5 需要注册获取 OPENAI_API_KEY

环境变量配置文件 .env 存储 OPENAI_API_KEY

OPENAI_API_KEY=【你的OPENAI_API_KEY

配置 Openai 接口调用工具 openai.js

const dotenv = require('dotenv')
const OpenAI = require('openai')

dotenv.config()

const openai = new OpenAI({
    apiKey: process.env.OPENAI_API_KEY
});

const getOpenAIResponse = async (input) => {
    const chatCompletion = await openai.chat.completions.create({
        messages: [{ role: 'user', content: input }],
        model: 'gpt-3.5-turbo',
    });
    return chatCompletion.choices[0].message.content
}

module.exports = {
    getOpenAIResponse
}

配置需要开通服务的群列表 config.json

{ "group": [ "testgroup", "helloworld" ] }

微信机器人启动 bot.js

const { WechatyBuilder } = require('wechaty');
const qrcode = require('qrcode-terminal');
const { getOpenAIResponse } = require('./openai.js')
const fs = require('fs');

const data = fs.readFileSync('config.json', 'utf8');
const config = JSON.parse(data);

const bot = WechatyBuilder.build()

bot.on('scan', (code, status) => {
    qrcode.generate(code, { small: true });
})

bot.on('login', user => console.log(`User ${user} logged in`))

bot.on('message', async message => {
    const room = message.room()
    if (room && config.group.includes(await room.topic())) {
        if (message.payload.type != 7) {
            room.say("Sorry, please input text.");
            return;
        } else {
            room.say(await getOpenAIResponse(message.text()))
        }
    }
});

bot.start();

package.json 依赖模块版本

"dependencies": {
    "openai": "^4.16.1",
    "qrcode-terminal": "^0.12.0",
    "wechaty": "^1.20.2"
}

案例视频展示

微信机器人框架,微信,机器人

10. 开通 Pad-local 协议

默认免费 WEB 协议是不支持发送语音权限(只具有接收语音消息的权限)IPAD 协议支持

微信机器人框架,微信,机器人

推荐开通 pad-local 协议(链接地址):http://pad-local.com/

TOKEN 购买完成

微信机器人框架,微信,机器人

11. 创建 puppet 登陆

PuppetPadlocal 创建机器人

const { PuppetPadlocal } = require("wechaty-puppet-padlocal");
const { WechatyBuilder } = require('wechaty');

const puppet = new PuppetPadlocal({
    token: "puppet_padlocal_xxxxxxxxxxxx"
});

const bot = WechatyBuilder.build({
    name: "wristwaking",
    puppet
})

详细官方案例教程文档介绍:https://github.com/wechaty/puppet-padlocal/wiki/API-%E4%BD%BF%E7%94%A8%E6%96%87%E6%A1%A3-(TypeScript-JavaScript)

手机端使用微信扫描登陆显示(登陆设备 iPad)
微信机器人框架,微信,机器人
Node 控制台登陆扫描输出

Welcome to Wechaty PadLocal puppet!
puppet-padlocal version: 1.20.1
adlocal-ts-client version: 0.5.3
13:26:41 INFO [PuppetPadlocal] start login with type: AutoLogin
User Contact<一语中的> logged in

注意:通过 PadLocal 协议登陆具有自动登陆功能(扫码完二次登陆无需进行扫码)

INFO TestBot started 问题

如果运行 npm run bot.js 后,正常情况会提示扫码登录。如果一直卡在 INFO TestBot started,二维码没有出现。解决方案:检测本地网络是否能够正常上网?检测是否开启了全局的 VPN?检测是否设置了网络防火墙?

网络测试:测试和 PadLocal 服务器之间网络是否通畅?

ping gateway.pad-local.com

网络测试:测试和微信服务器之间网络是否通畅?

$ ping long.weixin.qq.com
$ ping short.weixin.qq.com

12. ffmpeg 音频工具

微信机器人框架,微信,机器人

下载地址:https://github.com/BtbN/FFmpeg-Builds/releases

ffmpeg 工具 bin 目录

微信机器人框架,微信,机器人

配置 ffmpeg/bin 系统环境变量

微信机器人框架,微信,机器人

13. 被动回复语音消息

借助 vhan 开源接口创建 MP3 语音音频

const fs = require('fs')
const axios = require('axios')
const path = require('path')

let content = "唤醒手腕我喜欢你"

axios({
    method: 'get',
    url: `https://api.vvhan.com/api/song?txt=${content}`,
    responseType: 'stream',
})
.then(async res => {
    await res.data.pipe(fs.createWriteStream(path.join(__dirname, 'content.mp3')))
})
.catch(err => {
    console.log(err);
});

借助 ffmpeg 工具 和 silk_v3_encoder 工具 进行音频转换处理 sil 语音

微信机器人框架,微信,机器人

GitHub silk-v3-decoder 工具资源地址:https://github.com/kn007/silk-v3-decoder

const { execSync } = require('child_process');

const mp3FilePath = 'content.mp3';
const silFilePath = 'output.sil';

execSync(`ffmpeg -i "${mp3FilePath}" -f s16le -ar 24000 -ac 1 -acodec pcm_s16le "temp.pcm"`);
execSync(`silk_v3_encoder "temp.pcm" "${silFilePath}" -tencent`)

语音文件为 silk 格式。silk 是 skype 开源的一款语音编解码器,被微信的语音文件所采用。注意:文件后缀必须是 sil

bot.on('message', async message => {
    if (message.type() == bot.Message.Type.Audio) {
        const voiceFilePath = "output.sil"
        const voiceLength = 2000;
        const fileBox = FileBox.fromFile(voiceFilePath);
        fileBox.metadata = {
            voiceLength
        };
        await message.say(fileBox)
    }
});

特别注意:被动回复语音消息 WEB 协议不支持(推荐采用 iPad 协议实现)

运行演示视频

微信机器人框架,微信,机器人

14. 发送动态链接

bot.on('message', async message => {
    if (message.text() == "发送链接") {
        const urlLink = new bot.UrlLink({
            title: "Hello World! 你好世界!",
            description: "This is description",
            thumbnailUrl: "http://q1.qlogo.cn/g?b=qq&nk=1620444902&s=100",
            url: "https://www.baidu.com",
        });
        await message.say(urlLink)
    }
});

动态链接配置说明

parmas 说明 案例
title 标题 Hello World! 你好世界!
description 详细描述 This is description
thumbnailUrl 预览图 http://q1.qlogo.cn/g?b=qq&nk=1620444902&s=100 (图片链接地址)
url 链接地址 https://www.baidu.com(链接)

发送动态链接测试结果:

微信机器人框架,微信,机器人

15. 自动通过加好友请求

bot.on("friendship", async friendship => {
	console.log(friendship)
    if (friendship.type() === FriendshipType.Receive) {
        await friendship.accept();
    }
});

WechatifiedFriendshipImpl 数据结构

WechatifiedFriendshipImpl {
	_events: [Object: null prototype] {},
	_eventsCount: 0,
	_maxListeners: undefined,
	id: '6163475632946471959',
	payload: {
		contactId: 'wxid_njqktrcgap7822',
		hello: '我是子夜吴歌',
		id: '6163475632946471959',
		scene: 15,
		shareCardContactId: '',
		shareCardNickName: '',
		sourceContactId: '',
		sourceNickName: '',
		stranger: 'v3_020b3826fd0301000000000095b7279086b4b4000000501ea9a3dba12f95f6b60a0536a1adb6bca1de246eb2c79828d52b3f6f6fdbb0dcdf144ece9d5ef453bc87350909b183e109f57083da037301a1a492156c38faaa1792d953a18405e5034f1876@stranger',       
		ticket: 'v4_000b708f0b0400000100000000003ce338ab64bfba5b2eab48d683651000000050ded0b020927e3c97896a09d47e6e9e44ac1aeaa3585259ed6edc2f83825b3d166d50e27fb7b44161a4427e52d47e03cb9920bf7ad004fed00c4754150d75b4969a5ffefc1e5e6ebe3612f3f52a147c7ffc2634859836c1586dcf74d0bdeac97c5b6b9224a6cee2acf97a3705a88ababfb21dfb2f0bddbc75@stranger',
		timestamp: 1703138888,
		type: 2
	},
	[Symbol(kCapture)]: false
}

监听自动通过好友结果:

微信机器人框架,微信,机器人
控制台输出结果文章来源地址https://www.toymoban.com/news/detail-744065.html

自动通过验证

到了这里,关于2023年最新 wechaty 框架开发微信机器人详细 API 教程说明(NodeJs 版本)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 【python+wechaty+docker+nodejs】24年从0开始搭建使用python-wechaty接入微信聊天机器人全过程记录

    全网搜索了所有相关文章,由于个人原是java老程序员,对python有点兴趣,正好这个机器人的python资料比较多,因此就着手尝试。 在网上基本没有找到python-wechaty的完整说明的使用手册因此自己写一个记录一下全过程。 真正的从0开始。只有系统。没有其他的情况下,都是全新

    2024年01月24日
    浏览(10)
  • 关于开发微信个人号机器人/ 微信机器人开发指南

    该文章介绍了微信机器人的基本概念、开发流程、常用技术和开发工具等内容,对初学者非常友好。 微信机器人是一种可以自动执行特定任务的程序,可以在微信平台上进行交互。它可以通过接收用户的信息并作出相应的回应,从而提供更好的用户体验和增强用户参与度。

    2024年02月09日
    浏览(12)
  • 使用腾讯云服务器+Nonebot2+go-cqhttp搭建QQ聊天机器人【保姆级教程 2023最新版】

    使用腾讯云服务器+Nonebot2+go-cqhttp搭建QQ聊天机器人【保姆级教程 2023最新版】

    下载go-cqhttp 这里有不同版本的cqhttp,并且对每个版本都有介绍。但是大家可以看到有 arm与adm 不同的版本,这两个啥关系呢? 严格来说, AMD和ARM没有任何关系 。AMD是桌面级处理器和桌面级GPU的生产厂商,而ARM是移动级处理器的生产厂商。AMD是目前业内唯一一个可以提供高性能

    2023年04月18日
    浏览(15)
  • 最新基于nonebot的qq机器人搭建

    核心资源 ( 参考各项目到各自release下载 NoneBot 简介 | go-cqhttp 帮助中心 qq登录需要包签名,要自己部署 https://github.com/fuqiuluo/unidbg-fetch-qsign 环境 ubuntu: win10商店直接下个ubuntu做wsl, python: wsl里面安装conda, conda创建虚拟环境使用python最新3.11 java 语雀指路 (好久没鸟博客园了,都

    2024年02月16日
    浏览(12)
  • 2023 手术机器人现状

    2023 手术机器人现状

    按照手术部位机器人产品可分为腹腔镜手术机器人、骨科手术机器人、神经外科手术机器人、血管介入手术机器人和口腔手术机器人等;按照产品功能则可分为操作类手术机器人和定位类手术机器人 主要作用  手术机器人总览 1 . 达芬奇手术机器人 简单地说,达芬奇机器人就

    2024年02月07日
    浏览(13)
  • 大象机器人人工智能套装2023版深度学习协作机器人、先进机器视觉与应用场景

    大象机器人人工智能套装2023版深度学习协作机器人、先进机器视觉与应用场景

    介绍当前的版本 今天我们要介绍的是aikit2023,aikit2023是aikit的全新升级版。 AIkit 2023 是一套集视觉,定位抓取、自动分拣模块为一体的入门级人工智能套装。 该套装基于python平台,可通过开发软件实现机械臂的控制,简单易学,能够快速入门学习人工智能基础知识,启发创新

    2024年02月13日
    浏览(16)
  • 自然机器人最新发布:智能流程助手,与GPT深度融合

    自然机器人最新发布:智能流程助手,与GPT深度融合

            ChatGPT自2022年11月上线后就受到现象级地广泛关注,5天时间用户就已经突破百万,仅2个月时间月活用户就突破1亿,成为史上增速最快的消费级应用,远超TikTok、Facebook、Google等全球应用。它 展现了类似人类的语言理解和对话交互能力,充分彰显了其引领当前AI发展

    2023年04月13日
    浏览(13)
  • 自动化、智能、机器人-2023-

    自动化、智能、机器人-2023-

    文明:农业、工业、信息、智能,以目前认知的四个阶段。  农业文明到工业文明:机械自动化 工业文明到信息文明:电气自动化 信息文明到智能文明:数据自动化 这些时代典型的机器人: 机械自动化   电气自动化   数据自动化 这一步还没有完全实现,现在是过渡阶段。

    2024年02月08日
    浏览(13)
  • C#通用框架源码 增加了机器人 流程框架 多任务流程 机器视觉源码框架

    C#通用框架源码 增加了机器人 流程框架 多任务流程 机器视觉源码框架

    C#通用框架源码 增加了机器人 流程框架 多任务流程 机器视觉源码框架,算法使用的是halcon,有C#基础和Halcon基础学习这个很好提升快。 标题:C#通用框架源码及机器视觉应用分析 摘要:本文将就C#通用框架源码的新增内容进行详细分析,并深入探讨其中包括的机器人流程框

    2024年02月03日
    浏览(8)
  • Rasa——对话机器人开源框架

    Rasa是一套对话机器人的开源框架,主要用于构建面向任务(Task Oriented)的对话系统。 NLU自然语言理解 基于规则 神经网络方法 DIET(Dual Intent Entity Transformer) 在Rasa中两种方法都可以使用,但神经网络方法是核心 一个rasa项目包含的文件: domain 包含了聊天机器人需要知道的所有

    2024年02月08日
    浏览(11)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包