본문 바로가기
일상/회고

Teams Hook API를 통한 팀즈 알림 처리 - Spring

by 계범 2023. 8. 2.

수정사항

2023-08-14 : 주의사항에 대한 내용 추가


사용 계기

다양한 사용 사례가 있지만, 통틀어서하면 코드 상 작업 중 확인하고 싶은 게 있을 시
보다 편하게 확인하기 위해 팀즈로 알림이 오게 하였다.

(에러 발생, VOC, 배포 완료 등등)

 

주의사항

팀즈 훅은 api 요청 속도 제한이랑 요청 크기 제한이 있다..!

 

해당 사항을 넘지 않도록 잘 분리해서 요청 보내도록 처리하자

(라고 생각했지만, 우리의 경우 팀즈 알림을 보조적으로 쓰는데 해당 분리 요청을 하기 위해 실제 서비스에 영향을 끼칠 수 있는 방법밖에 떠오르지 않아 일단 해당 사항을 인지하고 쓰자 정도로 논의 되었다!)

 

초당 제한

 

사용법

팀즈의 팀을 생성 후 해당 팀 안에 채널을 생성한다.

채널을 우측 클릭해보면, 커넥터라는게 존재한다.

해당 커넥터에 incoming webhook을 추가해준다.

추가하면, 해당 화면의 버튼이 추가 -> 구성으로 된다.

구성을 클릭하면,

 

해당 화면이 나오는데, 팀즈로 날라올 메세지의 이름과 이미지라고 생각하면 된다.

만들기를 누르면, 

 

해당 채널에 메세지를 보내기 위한 고유 웹후크 URL이 생성된다.

해당 URL로 API를 쏴서 채널에 메세지가 날라오게 할 거다!

 

웹훅 설정 재확인&변경 방법

더보기

혹시나, 닫았다가 재확인을 하고 싶거나 변경하고 싶다면,

구성됨을 클릭하면, 

해당 관리를 눌러서 재확인 및 변경 가능하다.

 

이제 코드 상에서 해당 URL로 API를 날리면 끝이다..!

우리는 Webclient를 통해 날리고 있다.

TeamsNotificationDto teamsNotificationDto = new TeamsNotificationDto(title, text);

WebClient.builder()
        .defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE)
        .build();

try {

    webClient.post()
            .uri(uri) // 해당 고유 웹후크 url
            .contentType(MediaType.APPLICATION_JSON)
            .bodyValue(teamsNotificationDto) // 보낼 메세지
            .retrieve()
            .bodyToMono(Void.class)
            .retryWhen(Retry.max(3)).block();

} catch (Exception e) {
    log.error(e.getMessage(), e);
}

 

보다 자세한 메세지 보내기 사용법은 아래  링크 참조.

https://learn.microsoft.com/en-us/microsoftteams/platform/webhooks-and-connectors/how-to/connectors-using?tabs=cURL

 

참조

https://learn.microsoft.com/en-us/microsoftteams/platform/webhooks-and-connectors/how-to/add-incoming-webhook?tabs=dotnet

 

Create an Incoming Webhook - Teams

Create Incoming Webhook to Teams app and post external requests to Teams. Remove Incoming Webhook. Sample code(C#, Node.js) to send card using Incoming Webhook.

learn.microsoft.com

 

댓글