whatsapp-web.js如何检测用户输入状态及链接点击事件
whatsapp-web.js 对应功能实现方案
1. 检测指定联系人输入状态
库本身没有提供全局的输入状态监听,需要先拿到目标联系人对应的Chat实例,再单独绑定实例上的typing事件即可:
- 目标联系人ID格式要求:国家码+手机号,后缀加
@c.us,不要带开头的+,例如中国手机号13800138000对应的ID是8613800138000@c.us - 如需监听多个联系人,逐个获取对应Chat实例绑定事件即可
- 如需检测对方停止输入,可给Chat实例绑定
clear_typing事件,触发时机为对方终止输入操作
2. 链接点击触发逻辑说明
重要提示:WhatsApp客户端不会向网页端同步用户点击消息内链接的行为,库本身不存在直接监听链接点击的API。
要实现该需求只能通过自建中转页的方案实现:
- 给不同用户发送的链接追加唯一用户标识参数
- 用户点击链接会先请求你的中转页服务,服务端拿到请求里的用户标识后,即可调用机器人接口给对应用户发送预设消息
- 中转页处理完逻辑后再跳转到真实目标地址,用户侧无跳转感知
整合后的完整代码
const { Client } = require('whatsapp-web.js'); // 配置需要检测输入状态的目标联系人ID const TARGET_TYPING_CONTACT = '8613800138000@c.us'; const client = new Client(); client.on('qr', (qr) => { console.log('QR RECEIVED', qr); }); client.on('ready', async () => { console.log('Client is ready!'); // 客户端就绪后绑定目标联系人的输入监听 try { const targetChat = await client.getChatById(TARGET_TYPING_CONTACT); // 监听正在输入事件 targetChat.on('typing', (userId) => { if (userId === TARGET_TYPING_CONTACT) { console.log(`检测到指定联系人正在输入`); // 此处写入输入状态触发的自定义逻辑 } }); // 可选:监听停止输入事件 targetChat.on('clear_typing', (userId) => { if (userId === TARGET_TYPING_CONTACT) { console.log(`指定联系人已停止输入`); } }); } catch (err) { console.error('绑定输入监听失败,请检查联系人ID格式是否正确', err); } }); client.on('message', msg => { if (msg.body == '!ping') { msg.reply('pong'); } // 示例:用户触发指令时发送带追踪参数的链接 if (msg.body == '!getlink') { // 链接追加当前用户ID作为唯一标识,供中转页识别点击用户 const trackLink = `https://你的中转服务地址?uid=${msg.from}&redirect=真实目标链接地址`; msg.reply(`点击访问:${trackLink}`); } }); /** * 中转服务收到点击请求时调用该方法发送预设消息 * @param {string} userId 点击链接的用户ID * @param {string} sendContent 要发送的预设内容 */ async function triggerMsgOnLinkClick(userId, sendContent) { const chat = await client.getChatById(userId); await chat.sendMessage(sendContent); } client.initialize();
内容的提问来源于stack exchange,提问作者miguel angel Asencio
相关产品推荐
相关产品推荐

