基于Node.js的Slack自定义机器人DM场景无法触发app_mention事件如何解决
问题根因
app_mention 事件的触发前提是消息中明确包含对机器人的@提及,公共频道里你输入的<bot> help本质就是@机器人所以能触发,但私信场景下用户直接输入help不会自动带@标识,自然不会触发app_mention事件。
排查&解决步骤
- 第一步:确认事件订阅配置
在Slack开发者后台的「Events Subscription」页面,除了已经开通的app_mention之外,额外订阅message.im事件,这个事件专门对应机器人收到的私信消息。同时确保权限中已经开启im:history、im:readscope,保存后必须重新安装应用到工作区,配置才会生效。 - 第二步:调整代码监听逻辑
新增对message.im事件的监听,同时兼容两种场景的指令匹配,参考代码如下:
// 保留原有公共频道@提及的监听逻辑 app.event('app_mention', async ({ event, client}) => { await handleHelpCommand(event, client) }) // 新增私信场景的消息监听逻辑 app.event('message.im', async ({ event, client }) => { // 过滤掉机器人自己发的消息,避免循环触发 if (event.subtype === 'bot_message') return await handleHelpCommand(event, client) }) // 抽取公共的指令处理逻辑 async function handleHelpCommand(event, client) { const text = event.text; const parentMessageId = event.ts; const eventChannel = event.channel; if (text.includes("help")) { console.log(event); try { await client.chat.postMessage({ channel: eventChannel, text: helpMessage, thread_ts: parentMessageId }); } catch (err) { console.error(err); } } }
- 第三步:验证生效
重新启动机器人服务,直接给机器人发私信help即可触发回复,公共频道@机器人加help的原有逻辑也不受影响。
内容的提问来源于stack exchange,提问作者Aashish Kandel
相关产品推荐
相关产品推荐

