slack-ruby-client gem使用疑问:Client ID与Secret该如何配置?
解决Slack::Web::Api::Errors::InvalidAuth 认证问题
你用的SLACK_VERIFICATION_TOKEN是用来验证Slack请求来源的校验令牌,根本不是调用API的有效凭证——这就是你报错的核心原因。要调用Slack Web API,你需要用Bot Token或者User Token,而不是Verification Token,下面是具体操作步骤:
一、用Client ID和Secret获取有效API令牌
1. 选对令牌类型
- 要是让机器人自动发消息,优先用Bot Token(格式一般是
xoxb-xxx),权限更精准,适合自动化场景。 - 要是需要模拟真实用户操作,就用User Token(格式一般是
xoxp-xxx)。
2. 通过OAuth授权流程拿令牌
Slack应用必须走OAuth授权才能拿到可用的令牌,步骤如下:
- 打开Slack开发者后台你的应用页面,进入OAuth & Permissions板块。
- 配置Redirect URLs(本地测试的话,填
http://localhost:3000/auth/slack/callback这类本地地址就行)。 - 复制页面上的OAuth URL(里面包含你的Client ID),在浏览器打开这个链接,选择要授权的工作区,完成授权操作。
- 授权成功后,你就能在页面上看到生成的Bot Token和User Token(如果你申请了用户权限的话)。
二、修改代码用正确令牌
把原来的SLACK_VERIFICATION_TOKEN替换成刚拿到的Bot Token或者User Token,示例代码如下:
Slack.configure do |config| # 替换成你拿到的Bot Token或User Token config.token = "xoxb-你的令牌内容" raise 'Missing Slack API Token' unless config.token end client = Slack::Web::Client.new # 先测试认证是否成功 begin auth_response = client.auth_test puts "认证成功,当前用户:#{auth_response.user}" rescue Slack::Web::Api::Errors::InvalidAuth => e puts "认证失败:#{e.message}" end # 发送消息 client.chat_postMessage( channel: '#channel_name', # 替换成实际的频道名或ID text: 'Hello World', as_user: true # 注意:用Bot Token的话,as_user要设为false;用User Token可以设为true )
三、别忘了配置权限
确保你的应用在OAuth & Permissions页面已经添加了对应的权限:
- 发送消息需要
chat:write权限(Bot Token用)或者chat:write:user权限(User Token用)。 - 如果要设置
as_user: true,必须确保你的令牌拥有对应的用户操作权限。
内容的提问来源于stack exchange,提问作者Max Williams
相关产品推荐
相关产品推荐

