如何以Slack团队用户身份调用chat.postMessage接口并显示实际发送者名称
解决Slack chat.postMessage发送者名称显示错误的问题
嘿,这问题我熟!你现在遇到的情况,本质是因为调用API时用的是频道创建者的个人token,所以Slack默认会以这个创建者的身份发送消息。要让消息显示实际发送用户的名字,得从授权方式和参数配置两方面调整:
核心解决方案:使用实际发送用户的个人Access Token
要让消息以真实用户身份发送,最直接的方式是让每个使用你集成的用户,通过OAuth 2.0流程授权你的应用,获取他们自己的个人用户Access Token,然后用这个token来调用chat.postMessage接口。
修改后的cURL代码示例
$curl = curl_init(); // 这里替换成实际发送消息的用户的个人Access Token $userPersonalToken = "xoxp-你的用户授权token"; curl_setopt_array($curl, array( CURLOPT_URL => 'https://slack.com/api/chat.postMessage', CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => '', CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 0, CURLOPT_FOLLOWLOCATION => true, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => 'POST', CURLOPT_POSTFIELDS =>'{ "channel": "C03T3JT2SRF", "text": "Hello Slack", "as_user": true // 关键参数:确保以用户自身身份发送消息 }', CURLOPT_HTTPHEADER => array( 'Content-Type: application/json', "Authorization: Bearer {$userPersonalToken}" ), )); $response = curl_exec($curl); curl_close($curl); echo $response;
关键细节说明
as_user参数的作用:当你使用用户的个人token时,把这个参数设为true,Slack就会完全以该用户的身份发送消息,发送者的名称、头像都会和用户自己在Slack里的信息一致。- OAuth授权流程:你需要在Slack开发者后台给你的应用配置OAuth权限,至少要申请
chat:write权限,这样用户授权后你才能拿到他们的个人token,用于发送消息。 - 避免硬编码固定token:不要一直用频道创建者的token,要为每个发送消息的用户动态获取对应的授权token,这样才能保证发送者身份正确。
备选方案:自定义机器人名称(仅适用于机器人场景)
如果你是想用机器人发送消息,但要显示不同的名称(不是真实用户),可以用username参数,但这个仅适用于自定义集成机器人(不是官方的Slack Bot用户),而且消息会标记为机器人发送,不是真实用户身份:
{ "channel": "C03T3JT2SRF", "text": "Hello Slack", "username": "实际发送者的名字", "icon_emoji": ":smile:" // 可选,设置机器人头像 }
不过这个方案不符合你要显示实际发送用户名称的需求,所以优先推荐前面的用户token方案。
内容的提问来源于stack exchange,提问作者Sourav Das
相关产品推荐
相关产品推荐

