javascript - 如何使用 chat.postmessage 作为工作区用户发布松弛消息?

标签 javascript node.js oauth-2.0 slack slack-api

我创建了一个 Slack 机器人,它有一些交互式按钮。单击按钮后,我将向单击交互按钮的用户发布一条直接消息。我需要显示用户个人资料而不是机器人个人资料图像。为了发布消息,我正在使用 slack api 聊天。发布消息()。

当我调用此方法时,消息将作为机器人用户发布(它显示机器人用户图标)。但我需要以单击此按钮的用户身份发布此消息。我检查了 as_user: false 属性来执行此操作。但没用?我正在使用我的应用程序身份验证 token 来调用此方法。

var url = "https://slack.com/api/chat.postMessage";
    var auth_token ='xoxb-518598944980-577890089556-0i753DBbVkigtyuhfbnmfhjn'; //Your Bot's auth token
    var headers = {
       "Authorization": "Bearer " + auth_token,
       "Content-Type" : "application/json"
    }
    var body = {
        channel: actionJSONPayload.channel.id,
        text: "Your text goes here.",
        as_user: false // Slack user or channel, where you want to send the message
    }
    request.post({
       "url": url,
       "headers": headers,
       "body": JSON.stringify(body)
    }, (err, response, body) => {
       if (err) {
           reject(err);
       }
       console.log("response: ", JSON.stringify(response));
       console.log("body: ",body);
    });
  }

那么有没有办法专门为与按钮动态交互的用户生成 token 并使用该 token 来调用此方法?它会解决这个问题还是有其他方法?我在安装应用程序时添加了所有相关权限,例如 chat:write:user

最佳答案

如果您需要以单击按钮的用户身份发布回复消息,您的应用需要使用该用户的 token 调用 API 方法来发布消息。这是应用程序在 Slack 上模拟用户的唯一方法。

因此,要在您的工作区中实现此功能,您需要要求每个用户安装一次您的应用程序,并在 Ouath 2.0 安装过程中为后续用户收集他们的 token 。

这种方法有一些明显的安全问题需要考虑,例如您的应用程序将可以访问工作区中每个用户的每条消息。

解决方法是手动设置应用发送的消息的用户名和图标(通过相应地设置 icon_urlusername 以及 as_user = false 调用 chat.postMessage 时)。您可以从 users.info 检索图标和用户名。不过,消息仍将带有 APP 标签,以将其标记为来自机器人。

关于javascript - 如何使用 chat.postmessage 作为工作区用户发布松弛消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56523552/

相关文章:

javascript(苹果脚本): find text and highlight

node.js - 测试 findOneAndUpdate upsert 重复预防

oauth-2.0 - Keycloak JAX-RS 和 Postman 授权(Auth URL)

javascript - javascript 中的 C# TrimEnd() 等效项

javascript - 将字符串从 .NET 传递到 JavaScript 变量

html - Cloud9 - Node.js fs 无法打开 html 文件

javascript - FRebase "pushing"数组对象不起作用

c# - 谷歌驱动示例 : oauth2callback not found

oauth-2.0 - OAuth 未经授权的客户端错误

javascript - 使用 append() 将页面滚动到底部时如何显示数据;