Slack侧边栏分区未公开API调用报not_allowed_token_type咨询
Slack侧边栏分区自动化接口调用问题解决方案
问题背景
计划开发自动化工具,根据Slack频道名称包含的特定字符串,自动将频道归类移动到侧边栏不同自定义分区下。目前Slack公开API文档未覆盖侧边栏分区操作相关能力,在浏览器端操作分区时,观测到2个未公开接口:
- 接口1:
users.channelSections.channels.bulkUpdate,用于批量调整分区下的频道列表,观测到的请求格式如下:
Method: POST Request URL: https://<workspace>.slack.com/api/users.channelSections.channels.bulkUpdate?_x_id=<redacted>&_x_csid=<redacted>&slack_route=<redacted>&_x_version_ts=1651772834&_x_gantry=true&fp=5e Form参数: remove: [] insert: [{"channel_section_id":"<redacted>","channel_ids":["<redacted>"]}] token: <redacted> _x_reason: channel-sidebar-channel-drop _x_mode: online _x_sonic: true
- 接口2:
users.channelSections.create,观测到用于创建新的侧边栏自定义分区。
已遇报错
按照浏览器抓包格式构造请求调用上述接口时,服务端返回200状态码,响应错误信息为not_allowed_token_type。已测试的令牌类型包括:
xoxb前缀的机器人令牌xoxp前缀的个人用户令牌- 直接提取浏览器端请求使用的
xoxc前缀令牌传入调用
所有测试场景均返回相同的200状态码与not_allowed_token_type错误。
可尝试的排查方向
- 补全鉴权关联参数:
xoxc是Slack网页端专属的用户级令牌,调用这类内部接口时,不能只传token字段,必须同步携带和该令牌绑定的d字段Cookie——这是网页端Slack存储的核心用户鉴权Cookie,缺省该字段时,哪怕传入的xoxc值完全正确,服务端也会判定令牌类型非法。抓包时不要只复制POST表单内的参数,要把同域名下浏览器自动携带的全量Cookie一起带上,尤其是d字段,请求的User-Agent也不要用HTTP客户端的默认值,改成和抓包所用浏览器的UA一致。 - 不要硬编码动态参数:URL路径中携带的
_x_id、_x_csid、slack_route、_x_version_ts都是和当前网页会话绑定的动态值,写死过期的旧值也会触发鉴权异常,这类参数需要从当前登录的网页端上下文实时提取。另外insert、remove这类JSON格式的表单参数,要和浏览器发出的格式完全一致,不要做多余的转义。 - 无效令牌无需重复测试:
xoxb机器人令牌、xoxp个人用户令牌是面向公开API设计的,这类前端UI操作的内部接口本来就没有对这两类令牌开放权限,反复测试不会得到有效结果。 - 补全基础请求头:调用时需要携带和浏览器端一致的
Origin、Referer头,Slack内部接口会做跨域来源校验,缺失这类头也可能被拦截返回令牌类错误。
已有开发者实测,在携带匹配的
dCookie+有效xoxc令牌+完整上下文参数的前提下,可以正常调用这两个接口,完成侧边栏分区创建、频道批量移动操作。这类接口属于Slack未对外公开的内部客户端接口,不会出现在官方公开API文档中,接口路径、参数随时可能随前端版本迭代变更,长期使用需要做好兼容适配。
内容的提问来源于stack exchange,提问作者The_Unobsequious
相关产品推荐
相关产品推荐

