Programming/Python

[Python/Teams] 파이썬 프로세스에서 Teams로 메시지 보내기

Jonghyuk Baek 2022. 4. 11. 22:28

Introduction

이전에 잠깐 파이썬 프로세스가 종료될 때에 팀즈나 이메일 등으로 알림을 받아보는 법에 대해서 알아봤었다. 링크 

 

이전 글에서 소개한 툴은 딥러닝 모델의 학습에 특화된 알림 툴이어서 트리거 할 수 있는 메시지 종류도 한정적이었고 사용처도 제한되어 있었는데, 최근에 파이썬 프로세스로부터 팀즈로 메시지를 원하는대로 보내야 할 일이 생겨서 이번 기회에 관련 내용을 정리해 보려고 한다.


Teams Connector Setup

Add connector

채널의 커넥터 설정

먼저 메시지를 받기 원하는 팀즈 채널에서 커넥터를 구성해 주어야 한다. 위 사진처럼 채널 옆의 점 세개를 누른 후 커넥터 설정 창으로 진입하자.

 

Incoming Webhook 커넥터 추가

커넥터 설정 창에서 Incoming Webhook 을 검색하고 추가되어 있지 않으면 추가를 해 주자.

 

Configure Connector

커넥터 구성

커넥터 추가 이후에 구성 버튼을 눌러 구성 창으로 진입하자.

 

Connector Preferences

알림 봇의 이름과 프로필 사진 지정

Webhook의 이름 (알림을 보내는 봇의 이름이 된다) 을 설정해 주고, 원하면 프로필 사진을 지정해 주자. 꼭 저 사진을 한번 써보고 싶었다.

 

Extract Webhook URL

설정이 완료되면, 아래의 Webhook URL을 복사해 저장해 두자. 이후에 이 URL을 이용해 파이썬 프로세스에서 팀즈로 알림을 보내게 된다.

 

Send Message from Python

이제 거의 다 왔다. 마지막으로 pymsteams 라이브러리만 설치하면 메시지를 보낼 수 있다.

https://pypi.org/project/pymsteams/

 

pymsteams

Format messages and post to Microsoft Teams.

pypi.org

 

Installation

pip install pymsteams

위 명령어를 통해 현재 환경에 라이브러리를 설치하자.

 

Getting Started

import pymsteams
myTeamsMessage = pymsteams.connectorcard("WEBHOOK_URL")

위 코드를 알림을 보내길 원하는 스크립트에 추가하고, WEBHOOK_URL 부분에 아까 커넥터 설정 시 얻은 Webhook URL을 붙여넣기 해 주자.

myTeamsMessage.text("Hello from python script! Powered by pysteams.")
myTeamsMessage.send()

이후 위 코드처럼 발송할 텍스트를 connectorcard.text( ) 메소드에 넣어 호출하고, connectorcard.send( ) 를 불러 주면 팀즈 채널로 메시지가 전달된다.

 

파이썬 프로세스에서 전달된 팀즈 알림

잘 작동하는 것을 볼 수 있다.

 

Additional Formatting Options

팀즈에서 카드를 생성할 때에 제목을 붙이거나 이미지를 붙여넣을 수 있는 것 처럼, 파이썬에서 라이브러리를 통해 알림을 보낼 때에도 각종 도구를 사용할 수 있다.

Title

myTeamsMessage.title("Sample Title")
myTeamsMessage.text("Sample text")

위와 같이 title 메소드를 통해 제목을 추가해 주면,

 

타이틀이 설정된 카드가 날아온다.

 

Link

myTeamsMessage.text("Sample text")
myTeamsMessage.addLinkButton("Link to blog", "https://jh-bk.tistory.com/")
myTeamsMessage.send()

addLinkButton 메소드는 특정 링크로 보내주는 링크 버튼을 원하는 이름으로 만들어 준다.

 

Change Target URL

myTeamsMessage.newhookurl("<My New URL>")

newhookurl 메소드는 중간에 알림 타겟 URL을 바꿀 수 있게 해 준다. 이를 이용해 여러 채널에 메시지를 연달아 날리는 트릭이 가능하다.

 

Section - Add Image

section_1 = pymsteams.cardsection()
section_1.title("This Is Fine")
section_1.addImage("https://i.imgur.com/Aigj1xK.png")
myTeamsMessage.addSection(section_1)

myTeamsMessage.text("Sample text")
myTeamsMessage.send()

Section을 생성하고 나면 안에 이미지를 첨부할 수 있다. 섹션 없이 이미지를 첨부하는 기능은 없는 것 같다.

 

Section - Display key~value pair

section_1 = pymsteams.cardsection()

section_1.addFact("key 1", "value 1")
section_1.addFact("key 2", "value 2")

myTeamsMessage.addSection(section_1)

myTeamsMessage.text("Sample text")
myTeamsMessage.send()

addFact 메소드를 통해 key~value 값 페어를 보여줄 수 있다.

섹션은 여러개를 만들어 붙이는 것이 가능하니 각 섹션 별로 필요한 정보를 나누어 디스플레이 하면 좋을 것 같다.

 


참고로 해당 라이브러리는 메시지 전송 중 에러 발생 시 TeamsWebhookException 에러 클래스를 throw 해 주도록 되어 있다. 라이브러리 단위의 에러 클래스를 정의해 라이브러리에서 의도를 가지고 raise 하는 에러인지 아닌지 외부에서 쉽게 구별이 가능하다. 이와 관련해서는 이 글을 참고하자.

 

아래는 참고할 만한 사이트이다.

 

pymsteams Library

https://pypi.org/project/pymsteams/

Send a Message to Microsoft Teams from Python

https://www.hull1.com/scriptit/2020/08/18/python-to-teams.html

[Python] 모듈 단위의 exception 계층 구조

https://jh-bk.tistory.com/12

반응형