使用Slack Bolt Python开发Slack应用,机器人无法监听事件如何解决?
核心代码错误修正
你的代码存在执行顺序问题:事件监听函数定义在了app.start()之后,Python代码按顺序执行,app.start()是阻塞运行的方法,启动后不会再加载后续的事件监听逻辑,修改后的代码结构如下:
import os from slack_bolt import App app = App( token = 'xoxb-xxxxxxxx-2463004875172-0pnMlWzr30pFg2vFGtt52wzx', signing_secret = 'xxxxxxx3eba2b1fc11bf6076' # 如需监听机器人自身发送的消息,可添加以下参数 # ignore_self=False ) # 所有事件监听逻辑必须放在app.start()之前 @app.event("message") def handle_message_events(body, logger): logger.info(body) if __name__ == "__main__": app.start(port=int(os.environ.get("PORT", 3000)))
配置排查项
- 检查事件订阅路由:Slack Bolt默认的事件接收路径是
/slack/events,Slack后台Event Subscriptions页面填写的Request URL必须是ngrok公网地址加该后缀,例如https://xxx.ngrok.io/slack/events,否则事件请求无法被正确接收。如果ngrok日志返回404状态码,优先核对该配置。 - 检查机器人权限:在Event Subscriptions页面的「Subscribe to bot events」分类下,需要添加对应消息场景的权限:监听私人会话消息需添加
im:history,监听公开频道消息需添加channels:history,监听私人频道消息需添加groups:history。添加权限后必须点击「reinstall to workspace」重新安装应用到工作区,新权限才会生效。 - 检查机器人访问权限:如果在频道内测试,需要先将机器人邀请进对应频道,否则无法收到频道内的消息。
- 检查鉴权信息:确认代码中填写的
token是Slack后台「OAuth & Permissions」页面的Bot User OAuth Token,signing_secret是「Basic Information」页面的Signing Secret,两者填错会导致事件校验失败,ngrok日志会返回401状态码。
内容的提问来源于stack exchange,提问作者Iago Richard
相关产品推荐
相关产品推荐

