【问题标题】:How to select a button from a interactive message with a bot?如何从与机器人的交互式消息中选择一个按钮?
【发布时间】:2019-03-16 03:11:27
【问题描述】:

我正在尝试让机器人“单击”Slack 中交互式消息上的按钮(最好作为机器人,但也可以使用用户令牌)。

我发现发送动作信息的链接是

https://blue-hybrid.slack.com/api/chat.attachmentAction

我的问题是我找不到“chat.attachmentAction”的任何文档。查看使用我的浏览器时发送的请求,它有一个 http 参数:“_x_id”,payload 是一个 WebKitForm,包含 4 个项目:payload、client_id、payload_id 和 token。

我确定我只是没有发送适当的数据或身份验证或什么。我所有的 POST 都返回“invalid_payload”或“invalid_arg_name”。

非常感谢任何帮助。

【问题讨论】:

  • 官方的 Slack API 没有提供任何允许机器人点击按钮 afaik 的方法。顺便说一句,它们也没有为机器人提供使用斜杠命令的方法。您找到的方法可能有效,您只需要找出正确的参数即可。
  • 使用参数_x_idclient_token 这看起来很像一个内部API 方法,第三方开发者无法使用。
  • 这是每当有人单击交互式消息中的按钮时使用的命令。至少,我希望能够使用这个命令而不需要使用我的用户令牌的 cookie。有没有什么好的工具可以从浏览器进行逆向工程?
  • 我同意在官方 API 中提供此功能会很棒。但正如我所见,这种方法已被锁定,只能由 Slack 在内部使用。因此,我建议向 Slack 支持发送邮件询问此新功能。

标签: slack slack-api


【解决方案1】:

看来我终于想通了!
我不得不以老式的方式解决它。 Slack 客户支持只会对官方公共 API 有所帮助。我将在 Javascript 中留下解决方案。

要做到这一点,你需要三件事:

  1. choice_num
    • 选项列表中的选项数量。
    • 例如如果消息具有按钮(从左到右):是、否和可能,那么是=0、否=1 和可能=2。
  2. message
    • 交互消息的json
  3. SLACK_TOKEN
    • 您的 slack 令牌(不确定机器人令牌是否有效,但用户令牌可以)

方法chat.attachmentAction本身需要3个参数:

  • payload
  • service_id AND/OR bot_user_id
  • token

args = encodeURI(
'有效载荷={'
+ '"actions":[' + JSON.stringify(message.attachments[0]["actions"][choice_num]) + '],'
+ '"attachment_id":"' + message.attachments[0]["id"] + '",'
+ '"callback_id":"' + message.attachments[0]["callback_id"] + '",'
+ '"channel_id":"' + message.channel + '",'
+ '"message_ts":"' + message.ts + '"}'
+ '&service_id=' + message.bot_id
+ '&bot_user_id=' + message.user
+ '&token=' + SLACK_TOKEN
)

request_url = 'https://YOURSLACKTEAM.slack.com/api/chat.attachmentAction?' + 参数

然后只需向 request_url 发送一个异步 POST,你应该会得到类似这样的结果:

{"已替换":true,"ok":true}

【讨论】:

    猜你喜欢
    • 2023-02-06
    • 1970-01-01
    • 1970-01-01
    • 2020-08-20
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    • 2019-04-05
    • 2022-10-19
    相关资源
    最近更新 更多