Rest API로 팀즈에 메시지를 기록하는 방법

작성: 2023-09-27 10:34:28
수정: 2023-09-27 11:19:41
오구사십오

사내 공식 메신저가 팀즈로 전환된 이후 나는 편의를 위해 여러가지 자동화 된 알림메시지를 등록하여 사용하고 있는데, 이곳에 관련 팁들을 기록해 둘까 한다.

 

커넥터 등록: Incoming Webhook

일단 팀즈 알림을 보내고자 하는 채널의 서브메뉴를 펼쳐보면 커넥터 라는 메뉴가 보인다. 이 메뉴에 들어가자

 

대화상자에 보이는 항목 중 Incoming Webhook구성 버튼을 클릭한다.

 

적절한 이름과 프로필이미지를 업로드 한 뒤 만들기 버튼을 누른다.

 

만들기버튼을 누르고 나면 아래 그림과 같이 Endpoint 정보와 완료버튼이 보이게 된다. Endpoint URL을 복사해 두고 완료를 누른다.

 

메시지 발송하기

Incoming Webhook 커넥터로 메시지를 발송하는 방법은 간단하다. 별도의 인증작업 없이 바로 위에 복사한 URL로 http post request를 발송하기만 하면 된다.

발송 예제코드

ENDPOINT="복사한URL"
curl -X POST -H "Content-Type: application/json; charset=utf-8" -d '{
        "summary": "주간보고를 작성해 주세요",
        "title": "주간보고를 작성해 주세요",
        "text": "주간보고를 작성하는 날입니다. 아래 페이지에 주간보고를 작성해 주세요.",
        "sections": [
                {
                        "activityTitle": "부서 1",
                        "activityText": "2023년도 주간보고: <https://ogu45.com/profile>"
                },
               {
                        "activityTitle": "부서 2",
                        "activityText": "2023년도 주간보고: <https://ogu45.com/profile>"
                },
        ]
}' $ENDPOINT

 

메시지 양식

메시지 양식은 JSON 으로 구성되어 있으며, 매우 다양한 버전이 존재하여 전용 에디터까지 있을 정도이다. 하지만 내가 사용하는 형태는 다음과 같이 크게 두 종류로 나눌 수 있다.

메시지 카드 형태

메시지 카드에 링크가 포함된 버튼을 삽입하는 형태

{
    "@type": "MessageCard",
    "@context": "http://schema.org/extensions",
    "summary": "카드 요약 문구",
    "sections": [{
      "activityTitle": "제목",
      "activitySubtitle": "부제목",
      "activityImage": "https://ogu45.com/favicon.png",
      "facts": [{ "name": "항목1", "value": "값1'" }, { "name": "항목2", "value": "값2" }, { "name": "항목3", "value": "값 3" }]
    }],
    "potentialAction": [{
      "@type": "OpenUri",
      "name": "바로가기",
      "targets": [{ "os": "default", "uri": "https://www.ogu45.com" }]
    }]
  }

섹션이 구분된 단순 문서 형태

제목, 본문 정도를 노출하고 부가적으로 섹션을 구분하여 문장으로 작성하여 노출하는 형태

{
        "summary": "주간보고를 작성해 주세요",
        "title": "주간보고를 작성해 주세요",
        "text": "주간보고를 작성하는 날입니다. 아래 페이지에 주간보고를 작성해 주세요.",
        "sections": [
                {
                        "activityTitle": "부서 1",
                        "activityText": "2023년도 주간보고: <https://ogu45.com/profile>"
                },
               {
                        "activityTitle": "부서 2",
                        "activityText": "2023년도 주간보고: <https://ogu45.com/profile>"
                },
        ]
}

 

참고자료

  1. https://learn.microsoft.com/ko-kr/microsoftteams/platform/webhooks-and-connectors/how-to/add-incoming-webhook?tabs=dotnet
  2. https://adaptivecards.io/designer/
  3. https://marketplace.visualstudio.com/items?itemName=madewithcardsio.adaptivecardsstudiobeta

유익했다면 후원해 주세요