You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现Whatsapp-web-js仅向通讯录联系人回复消息

解决方案

要实现仅回复通讯录联系人的消息,你需要通过以下步骤过滤消息发送者:

  1. 区分群组与私聊消息:群组消息的msg.from是群组ID,实际发消息的用户ID存在msg.author中;私聊消息直接用msg.from作为用户ID。
  2. 获取联系人信息:通过client.getContactById()获取发送者的联系人对象。
  3. 验证是否为通讯录联系人:检查联系人对象的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 17:15:09