Introduction
이전에 잠깐 파이썬 프로세스가 종료될 때에 팀즈나 이메일 등으로 알림을 받아보는 법에 대해서 알아봤었다. 링크
이전 글에서 소개한 툴은 딥러닝 모델의 학습에 특화된 알림 툴이어서 트리거 할 수 있는 메시지 종류도 한정적이었고 사용처도 제한되어 있었는데, 최근에 파이썬 프로세스로부터 팀즈로 메시지를 원하는대로 보내야 할 일이 생겨서 이번 기회에 관련 내용을 정리해 보려고 한다.
Teams Connector Setup
Add connector
먼저 메시지를 받기 원하는 팀즈 채널에서 커넥터를 구성해 주어야 한다. 위 사진처럼 채널 옆의 점 세개를 누른 후 커넥터 설정 창으로 진입하자.
커넥터 설정 창에서 Incoming Webhook 을 검색하고 추가되어 있지 않으면 추가를 해 주자.
Configure Connector
커넥터 추가 이후에 구성 버튼을 눌러 구성 창으로 진입하자.
Connector Preferences
Webhook의 이름 (알림을 보내는 봇의 이름이 된다) 을 설정해 주고, 원하면 프로필 사진을 지정해 주자. 꼭 저 사진을 한번 써보고 싶었다.
Extract Webhook URL
설정이 완료되면, 아래의 Webhook URL을 복사해 저장해 두자. 이후에 이 URL을 이용해 파이썬 프로세스에서 팀즈로 알림을 보내게 된다.
Send Message from Python
이제 거의 다 왔다. 마지막으로 pymsteams 라이브러리만 설치하면 메시지를 보낼 수 있다.
https://pypi.org/project/pymsteams/
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 계층 구조