如何使用chat.postmessage作为工作空间用户发布松弛消息?

时间:2019-06-10 09:16:51

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

我创建了一个带有一些交互式按钮的Slack机器人。单击按钮后,我将向单击交互式按钮的用户发布直接消息。在那里,我需要显示用户个人资料而不是Bot Profie映像。用于发布消息,我正在使用松弛api聊天。 postmessage()。

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

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);
    });
  }

那么,有什么方法可以专门为那些与按钮动态交互并使用该令牌调用此方法的用户生成令牌吗?它会解决这个问题还是还有其他方法?我在安装诸如chat:write:user

之类的应用程序时已添加了所有相关权限。

1 个答案:

答案 0 :(得分:1)

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

因此,要在您的工作空间中进行此工作,您需要让每个用户安装一次应用程序,并在Ouath 2.0安装过程中收集其令牌以供以后的用户使用。

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

一种解决方法是手动设置应用发送邮件的用户名和图标(通过相应地设置icon_urlusername,并在调用{时设置as_user = false {3}})。您可以从chat.postMessage检索图标和用户名。邮件仍然会带有APP标签,以将其标记为来自机器人。