JavaScript SlackBot postMessage函数重复发消息问题排查求助
问题排查:Slack机器人重复发送帮助消息
我来帮你搞定这个重复发消息的问题~
问题根源
你的机器人之所以会重复发送帮助消息,核心原因是Slack的message事件会监听频道内所有消息,包括机器人自己发的消息。当机器人发送那条包含help的帮助消息后,这条消息会被你的message监听器捕获,再次触发handleMessage()里的help关键词检测,进而又调用runHelp(),形成了无限循环,所以才会不断重复发消息。
解决方案
只需要在message事件处理逻辑里,过滤掉机器人自己发送的消息就行。slackbots库返回的消息数据中,机器人发送的消息会带有bot_id字段,我们可以利用这个字段来过滤:
修改你的Message Handler代码:
// Message Handler bot.on('message', (data) => { // 过滤非消息类型、机器人自身发送的消息 if(data.type !== 'message' || data.bot_id) { return; } handleMessage(data.text); })
额外优化建议
为了避免后续误触发,你还可以把关键词匹配做得更精准,比如用正则表达式匹配独立的help单词(避免匹配到包含help的长单词):
// Response Handler function handleMessage(message) { // 匹配独立的help单词,不区分大小写,前后可以是空格或字符串首尾 if(/(^|\s)help(\s|$)/i.test(message)) { runHelp(); } else { // Run something else } }
这样修改后,机器人就只会在用户发送包含help关键词的消息时发送一次帮助消息,不会再陷入循环重复发送了。
内容的提问来源于stack exchange,提问作者psychovisual
相关产品推荐
相关产品推荐

