如何让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
相关产品推荐
相关产品推荐

