You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Slack应用以用户身份发消息而非应用身份?

问题

已创建Slack应用并引导用户跳转至授权链接(权限包含chat:write,incoming-webhook,channels:read,groups:read,im:read,mpim:read),授权流程正常。获取Bearer token后调用chat.postMessage接口发消息到指定频道,消息显示为Slack应用身份而非用户身份,PHP代码如下:

$res = Http::asForm()->withToken('xoxe.xoxb-1-MS0yLTE2NjE1MzEyMDk5LTU1ODIyODc2ODU4NTctNTU5MzgwNjgxNjU5Mi01NTY5OTg1ODg2NjQzLTIzYzg2MzM1YTVmNGQwMDMyMjNkY2ExOTA5M2QzOIwZmU5YTk1ZjY4M2FjNjg4ZDA1NzBjNTI3MmI2Y2I')
    ->withHeaders([
        'Content-type' => 'application/x-www-form-urlencoded;charset=utf-8'
    ])->post('https://slack.com/api/chat.postMessage', [
        'channel' => 'C5GS2B67Q',
        'text' => 'Hello world',
    ]);

疑问:为何会出现这种情况?如何实现以用户身份发消息?ChatGPT建议获取用户token并指定chat:write.user权限,但该权限不存在。

解答

原因分析

你当前使用的是Bot Token(xoxb开头),这类token调用接口时,默认以应用的机器人身份发送消息,而非授权用户的身份。

解决步骤

  • 获取用户级Token(User Token)
    在授权流程中,需确保请求的权限包含chat:write(或细分的chat:write.public/chat:write.private),并且要获取**User Token(xoxp开头)**而非Bot Token。用户授权后,Slack会返回access_token(用户token)和bot_user_token(机器人token),需使用前者。
  • 调用接口时使用用户Token
    chat:write.user权限已被废弃,合并到chat:write权限中。直接使用User Token调用chat.postMessage接口,消息会自动以授权用户的身份发送,无需额外参数。
  • 验证权限配置
    确认Slack应用的权限设置中已添加chat:write权限,且用户授权时同意了该权限范围。

内容的提问来源于stack exchange,提问作者Jamie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 13:07:02