我创建了一个端点来接收斜杠命令,如下所示:
@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_url
slack 提交的内容。
例如,发送 ChatPostMessage 以下没有任何属性response_url
sendMessage(ChatPostMessageParams.builder()
.setText("Ping!")
.setChannelId(channel)
.setUsername(username)
.build())
这是否意味着我只需要构建自己的 HTTP 客户端(使用 ApacheHTTPClient 之类的东西?)并直接调用 response_url?
还有用于在 slack SDK 中定义消息的 DTO 或域对象吗?