0

我创建了一个端点来接收斜杠命令,如下所示:

@PostMapping(value = "/slack", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
public String incidentCommand(@RequestParam("token") String token,
                              @RequestParam("team_id") String teamId,
                              @RequestParam("team_domain") String teamDomain,
                              @RequestParam("channel_id") String channelId,
                              @RequestParam("channel_name") String channelName,
                              @RequestParam("user_id") String userId,
                              @RequestParam("user_name") String userName,
                              @RequestParam("command") String command,
                              @RequestParam("text") String text,
                              @RequestParam("response_url") String responseUrl) {


    if (command.equals(INCIDENT)) {
        incidentQueue.push(new Event(userId, token, text, responseUrl));
    } else if (command.equals(POSTMORTEM)) {
        postmortemQueue.push(new Event(userId, token, text, responseUrl));
    } else {
        return "no";
    }
}

架构将是这样的:

  • Slack Controller 接收来自 slack 的 HTTP 请求
  • 请求被放置在队列中
  • 请求被处理
  • 响应被发送回松弛(<500ms 延迟)

但是,在查看 Java SDK 库中的 SlackClient 时,似乎无论如何都没有使用response_urlslack 提交的内容。

例如,发送 ChatPostMessage 以下没有任何属性response_url

sendMessage(ChatPostMessageParams.builder()
                .setText("Ping!")
                .setChannelId(channel)
                .setUsername(username)
                .build())

这是否意味着我只需要构建自己的 HTTP 客户端(使用 ApacheHTTPClient 之类的东西?)并直接调用 response_url?

还有用于在 slack SDK 中定义消息的 DTO 或域对象吗?

4

1 回答 1

1

是的,您需要response_url使用首选的 Web 客户端手动调用,这是因为 response_url 被认为超出了 Web API 的范围,如此处所示

但是请注意,如果您正在使用 Bolt SDK,该功能是可用的。

于 2021-01-17T19:33:01.080 回答