如何实现Whatsapp-web-js仅向通讯录联系人回复消息
解决方案
要实现仅回复通讯录联系人的消息,你需要通过以下步骤过滤消息发送者:
- 区分群组与私聊消息:群组消息的
msg.from是群组ID,实际发消息的用户ID存在msg.author中;私聊消息直接用msg.from作为用户ID。 - 获取联系人信息:通过
client.getContactById()获取发送者的联系人对象。 - 验证是否为通讯录联系人:检查联系人对象的
isMyContact属性,仅当该值为true时才执行回复逻辑。
修改后的完整代码如下:
const { Client } = require('whatsapp-web.js'); const client = new Client(); client.on('qr', (qr) => { console.log('QR RECEIVED', qr); }); client.on('ready', () => { console.log('Client is ready!'); }); client.on('message', async (msg) => { // 跳过自己发送的消息和状态消息 if (msg.fromMe || msg.isStatus) return; // 获取实际发送者的ID:群组取author,私聊取from const senderId = msg.isGroupMsg ? msg.author : msg.from; try { // 获取发送者的联系人信息 const contact = await client.getContactById(senderId); // 仅当发送者是通讯录联系人时,执行回复逻辑 if (contact.isMyContact && msg.body === '!ping') { msg.reply('pong'); } } catch (err) { console.error('获取联系人信息失败:', err); } }); client.initialize();
关键说明
msg.isGroupMsg:判断当前消息是否来自群组。contact.isMyContact:标记该联系人是否存在于你的通讯录中。- 使用
async/await:因为getContactById()是异步方法,需要等待返回结果后再判断。
内容的提问来源于stack exchange,提问作者Tzy
相关产品推荐
相关产品推荐

