[Python/Teams] 파이썬 프로세스에서 Teams로 메시지 보내기
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 계층 구조