Hello

Microsoft Teams의 Incoming Webhook 사용 정리 본문

azure

Microsoft Teams의 Incoming Webhook 사용 정리

nari0_0 2024. 11. 11. 16:54
728x90

Microsoft Teams의 Incoming Webhook을 사용하면 외부 애플리케이션에서 Teams 채널로 메시지를 보낼 수 있습니다.

스케줄링 서비스에서 webhook을 사용해 자동으로 알림 메시지를 보내기 위해 사용했습니다.

Spring의 WebClient를 사용하여 이를 구현하는 방법을 정리합니다.

 

1. teams webhook 생성

Create an Incoming Webhook 내용 대로 팀즈에서 webhook 만들기

 

2. WebClient를 사용한 Java 코드

import org.springframework.web.reactive.function.client.WebClient;
import reactor.core.publisher.Mono;

@Component
@Slf4j
public class TeamsWebhookExample {

    private final String webhookUrl ="https://xxx.webhook.office.com/xxxxx";
    
    public void sendTeamsMessage(String body) {
        // WebClient 객체 생성
        WebClient webClient = WebClient.builder()
                .baseUrl(webhookUrl)
                .defaultHeader("Content-Type", "application/json")
                .build();

        // POST 요청 보내기
        Mono<String> response = webClient.post()
                .bodyValue(body)
                .retrieve()
                .bodyToMono(String.class);

        // 응답 출력
        response.subscribe(log::info);
    }
}

+) Teams Webhook JSON 구조

기본

{"text": "Hello, Teams! This is a simple message."}

 

추가

 {
    "summary": "Notification",
    "text": "Hello, Teams! This is a detailed message.",
    "title": "Message Title",
    "sections": [
        {
            "activityTitle": "Activity Title",
            "activitySubtitle": "Activity Subtitle",
            "activityImage": "URL to an image",
            "facts": [
                {
                    "name": "Fact Name",
                    "value": "Fact Value"
                }
            ],
            "text": "Section text"
        }
    ]
}

 

  • summary: 메시지의 요약입니다. 일부 클라이언트에서는 필수일 수 있습니다.
    내가 사용한 버전에서는 필수 값이 었다. 없을 경우 400 Bad Request발생
  • title: 메시지의 제목입니다.
  • sections: 메시지를 여러 섹션으로 나눌 수 있습니다. 각 섹션은 다음과 같은 필드를 가질 수 있습니다:
    • activityTitle: 섹션의 제목입니다.
    • activitySubtitle: 섹션의 부제목입니다.
    • activityImage: 섹션에 표시될 이미지의 URL입니다.
    • facts: 이름-값 쌍으로 구성된 정보 목록입니다.
    • text: 섹션의 본문 내용입니다.

 

참고 : Create & Send Actionable Messages - Teams | Microsoft Learn

https://learn.microsoft.com/en-us/microsoftteams/platform/webhooks-and-connectors/how-to/add-incoming-webhook?tabs=newteams%2Cjavascript#create-an-incoming-webhook

728x90