使用whatsapp-web.js时client.on('message')回调函数未触发
WhatsApp机器人message事件不触发的排查与修复
问题核心
你的client.on('message')回调无法触发,但ready事件正常运行且能发送消息,说明客户端初始化流程没问题,问题集中在代码语法错误或配置逻辑上。
代码中的直接错误修复
1. 缺失axios依赖导入
代码中使用了axios但未导入,会引发运行时错误中断逻辑,需在顶部添加:
const axios = require('axios');
2. MessageMedia方法拼写错误
MessageMedia.formUrl是拼写错误,正确写法为MessageMedia.fromUrl,该错误会导致功能报错,也可能影响回调整体执行。
3. 回调代码块未闭合
最后一个else if (message.body === 'wall-e ~joke')的代码块缺少闭合},这是message事件不触发的核心原因,语法错误导致回调无法正确注册。
修复后的完整message回调代码:
client.on('message',async message => { console.log('message request') console.log(message.body) if (message.body === 'wall-e !ping') { console.log('ping request') client.sendMessage(message.from, 'pong'); } else if (message.body === 'wall-e ~meme') { console.log('meme request') const meme = await axios('https://meme-api.herokuapp.com/gimme').then(res => res.data) client.sendMessage(message.from, await MessageMedia.fromUrl(meme.url)) } else if (message.body === 'wall-e ~joke') { console.log('joke request') const joke = await axios('https://v2.jokeapi.dev/joke/Any?safe-mode').then(res => res.data) if(joke.joke){ await client.sendMessage(message.from, joke.joke) }else if(joke.setup){ const jokeMessage= await client.sendMessage(message.from, joke.setup) if(joke.delivery){ setTimeout(function(){ jokeMessage.reply(joke.delivery)},5000) } } } // 补上缺失的闭合大括号 });
额外排查点
若修复语法后仍无效果,检查以下内容:
- 监听自身消息配置:如果用机器人账号在安卓端发消息测试,默认不会监听自身发送的消息,需初始化客户端时添加配置:
const client = new Client({ listenOwnMessages: true // 开启监听自身消息 }); - 会话同步状态:扫码登录后等待WhatsApp Web会话完全加载完成,再发送测试消息。
- 账号权限:确保机器人账号未被限制、拉黑,能正常接收目标消息。
内容的提问来源于stack exchange,提问作者Naveed Ali Rehmani
相关产品推荐
相关产品推荐

