728x90
회사 메신저를 슬랙으로 바꾸면서 홈페이지서 문의 들어오는거 슬랙에 전송되도록 추가 작입 필요.
1. 채널에 앱 추가
https://w1745892406-kad670159.slack.com/marketplace/A0F7XDUAZ--
수신 웹후크
> _Please note, this is a legacy custom integration - an outdated way for teams to integrate with Slack. These integrations lack newer features and they will be deprecated and possibly removed in the
slack.com
해당 사이트 들어가서
이렇게하면 채널에 슬랙 수신 웹후크 추가 완료!
2. 자바 코드 작성
build.gradle 추가
implementation 'com.slack.api:slack-api-client:1.30.0' // 슬랙 API
application.yml에 추가 (추가안하고 하드코딩으로 넣어도 되긴함)
#슬랙
webhook:
slack:
url: 웹후크 URL
웹후크 클래스 생성
import com.slack.api.Slack;
import com.slack.api.model.Attachment;
import com.slack.api.model.Field;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.stream.Collectors;
import static com.slack.api.webhook.WebhookPayloads.payload;
@Service
public class slackWebHooks {
@Value("${webhook.slack.url}")
private String SLACK_WEBHOOK_URL;
private final Slack slackClient = Slack.getInstance();
/**
* 슬랙 메시지 전송
**/
public void sendMessage(String title, HashMap<String, String> data) {
try {
slackClient.send(SLACK_WEBHOOK_URL, payload(p -> p
.text(title) // 메시지 제목
.attachments(List.of(
Attachment.builder()
.fields( // 메시지 본문 내용
data.keySet().stream().map(key -> generateSlackField(key, data.get(key))).collect(Collectors.toList())
)
.build())))
);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* Slack Field 생성
**/
private Field generateSlackField(String title, String value) {
return Field.builder()
.title(title)
.value(value)
.valueShortEnough(false)
.build();
}
}
테스트 코드
HashMap<String, String> slackMap = new HashMap<>();
slackMap.put("테스트1", "테스트1 내용");
slackMap.put("테스트2", "테스트2 내용");
slackWebHooks.sendMessage(title, slackMap);
이긴 한데 나는 map에 있는 데이터들 넘겨줘야되서 수정함
클래스 호출할때
String title = "Slack 메시지 전송 테스트";
slackWebHooks.sendMessage(title, req);
수정된 클래스
import com.slack.api.Slack;
import com.slack.api.model.Attachment;
import com.slack.api.model.Field;
import musign_2023.classes.Utils;
import musign_2023.front.model.ContactDAO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.stream.Collectors;
import static com.slack.api.webhook.WebhookPayloads.payload;
@Service
public class slackWebHooks {
@Value("${webhook.slack.url}")
private String SLACK_WEBHOOK_URL;
private final Slack slackClient = Slack.getInstance();
@Autowired
private ContactDAO contactDao;
/**
* 슬랙 메시지 전송
**/
public void sendMessage(String title, HashMap<String, Object> data) {
try {
slackClient.send(SLACK_WEBHOOK_URL, payload(p -> p
.text(title) // 메시지 제목
.attachments(List.of(
Attachment.builder()
.fields(generateCustomFields(data))
.build())))
);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* Slack Field 생성
**/
private List<Field> generateCustomFields(HashMap<String, Object> data) {
List<Field> fields = new ArrayList<>();
HashMap<String, Object> map = data;
String user_company = Utils.checkNullString(map.get("user_company"));
String user_manager = Utils.checkNullString(map.get("user_manager"));
String user_phone = Utils.checkNullString(map.get("user_phone"));
fields.add(Field.builder()
.title("문의 회사")
.value(user_company)
.build());
fields.add(Field.builder()
.title("담당자")
.value(user_manager)
.build());
fields.add(Field.builder()
.title("연락처")
.value(user_phone)
.build());
return fields;
}
}
728x90
'JAVA' 카테고리의 다른 글
자바 스프링부트 2.7.7->3.3.9 업그레이드 (3) (1) | 2025.03.17 |
---|---|
자바 스프링부트 2.7.7->3.3.9 업그레이드 (2) (0) | 2025.03.05 |
자바 스프링부트 2.7.7->3.3.9 업그레이드 (1) (0) | 2025.02.27 |
자바 정규식 (0) | 2025.02.06 |
OpenAI Assistants API 연동하기 (1) | 2025.01.21 |