프로젝트

[Spring Boot] 슬랙 메시지 보내기(Incoming WebHooks) 2

LeeBorn 2020. 11. 29. 22:00
반응형

Slack

-이전 글에서 슬랙 채널에 메시지를 보내는 기능을 정리했는데,

이번에 추가로 정리해본다.

Map<String,Object> request = new HashMap<String,Object>();
// request.put("username", "slackbot");
request.put("text", "custom-slack-msg");

 

1. 요청 데이터로 "username"을 추가했는데, 없어도 된다.

없으면 기본 이름인 "incoming-webhook"으로 발송된다.

기본 username

 

2. "missing_text_or_fallback_or_attachments"의 에러는 이름 그대로 요청 데이터로 "text"가 없을 때 뜬다.

만약에 "test"라고 적으면 에러가 발생한다.

*text타입이 아닌 메시지를 보낼 땐 아직 테스트해보지 않았다.

Map<String,Object> request = new HashMap<String,Object>();
request.put("test", "custom-slack-msg");

 

3. "invalid_payload"는 위와 비슷한 경우로 요청 데이터가 잘못되었을 때 나온다.

잘못된 요청 데이터로 호출하면 위 에러를 응답한다.

 

사실 이번 정리를 하게 된 이유가 "invalid_paylod" 때문이었는데,

처음으로 "invalid_payload" 에러가 발생했을 땐,

아래처럼 "ContentType"을 추가해서 호출했다.

그래서 에러가 해결되었다.

RestTemplate restTemplate = new RestTemplate();

Map<String, Object> request = new HashMap<String, Object>();
request.put("text", msg);

HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON); // add content type

HttpEntity<Map<String, Object>> entity = new HttpEntity<Map<String, Object>>(request, headers);

ResponseEntity<String> result = restTemplate.exchange(WEBHOOKS, HttpMethod.POST, entity, String.class);

 

 

하지만 이후에 "ContentType"에 "APPLICATION_JSON" 타입을 빼고 호출해도 정상적으로 호출이 가능했다.

 

그러니 "invalid_payload"는 "ContentType"을 추가하는 것과는 다른 것 같았고,

전체적인 프로그램 구조의 문제와 관련이 있는 것 같았다.

 

"Controller"내에서 "Service"를 호출하는 방식과,

"RestTemplate"을 쓰는 문제와 관련이 있는 것 같았는데 아직 동일한 증상은 구현하지 못했다.

추후 해당 문제가 발생했던 원인과 정리된 소스를 만들어볼 예정이다.

 

반응형