Slack not_allowed_token_type错误解决:如何通过命令行发送消息
嘿,这个问题我碰过好多次了,核心是你用错了令牌类型——Slack的app-level令牌和Bot令牌的职责完全不搭边,咱们一步步来解决:
一、修复
not_allowed_token_type错误 首先得搞明白:app-level令牌(xapp-开头)不是用来调用常规API的,它主要是给Socket Mode、事件订阅验证这类高级功能用的。你要调用conversations.list这种接口,得用Bot用户OAuth令牌(xoxb-开头)。
怎么获取并配置正确的令牌:
- 回到你的Slack应用后台,找到「OAuth & Permissions」页面
- 在「Bot User OAuth Token」区域复制那个
xoxb-开头的令牌(如果没显示,说明你可能安装应用后没刷新页面,或者需要重新安装一次) - 检查权限:
conversations.list需要channels:read、groups:read、im:read、mpim:read这些权限,去「Bot Token Scopes」里添加对应的权限,添加后必须重新安装应用到工作区,权限才会生效
修复后的正确curl命令示例:
curl https://slack.com/api/conversations.list -H "Authorization: Bearer xoxb-123456-abcdefghijklmnopqrstuvwxyz"
二、用命令行向频道/用户发送消息
同样要用Bot令牌,并且确保令牌有chat:write权限(还是在「Bot Token Scopes」里添加,重装应用生效)。
1. 发送消息到频道
首先得拿到频道ID:可以用上面修复后的conversations.list接口获取,或者在Slack里右键频道→「复制链接」,链接末尾的字符串就是频道ID(比如C1234567890)。
命令示例:
curl -X POST https://slack.com/api/chat.postMessage \ -H "Authorization: Bearer xoxb-123456-abcdefghijklmnopqrstuvwxyz" \ -H "Content-Type: application/json" \ -d '{ "channel": "C1234567890", "text": "Hello from the command line! 🚀" }'
2. 发送私信给用户
用户ID可以通过users.list接口获取,或者用户的Slack个人链接里的ID(格式是Uxxxxxx),把channel参数换成用户ID即可:
curl -X POST https://slack.com/api/chat.postMessage \ -H "Authorization: Bearer xoxb-123456-abcdefghijklmnopqrstuvwxyz" \ -H "Content-Type: application/json" \ -d '{ "channel": "U1234567890", "text": "Hey there! This is a direct message sent via command line." }'
额外注意点
- 如果发送到私有频道,Bot必须先加入该频道——可以在Slack里手动邀请Bot,或者用
conversations.join接口调用加入 - 如果需要发送富文本消息,可以把
text换成blocks参数,按照Slack的Block Kit格式来构造内容
内容的提问来源于stack exchange,提问作者us2956
相关产品推荐
相关产品推荐

