슬랙 봇 만들기 - TIL, 일정관리 슬랙 봇 만들기
슬랙 봇 만들기 - TIL, 일정관리 슬랙 봇 만들기
이 글은 2024년 03월 Velog에 작성했던 글 입니다
작업 계기
공부 모임 메신저 앱을 디스코드에서 슬랙으로 이전하자는 얘기가 나왔습니다. 이유는 아래와 같습니다
- 사용하고 싶은 봇(요즘it, 커리어리)이 슬랙에 있음
- 회사에서 사용하고 있기 때문에 좀 더 친숙함
- 디스코드가 슬랙에 비해 갖는 강점이 무료판임에도 히스토리를 보관할 수 있는 것인데, 우리에게 필요한 기능은 아님(디스코드에 공유하는 내용은 각자 가지고 있음)
- 디스코드 스레드 기능 불편
이것 저것 쓰다 보니 TIL 알람 봇이 있으면 좀 더 좋을 것 같다는 의견이 나왔고, TIL 겸 일정 관리를 할 수 있는 봇을 만들어보았습니다.
과정
1. 슬랙 봇 생성
1-1. Create an App
https://api.slack.com/apps/ 에서 Create an App으로 봇을 생성합니다
봇 이름을 지정하고, 세팅값을 수정합니다. 이 값들은 추후 변경 가능합니다.
1-2. (토큰 생성)
Basic Information -> App-Level Tokens에서 토큰을 생성할 수 있다
1-3. 이름 생성
1-4. Install to Workspace
1-5. Incoming Webhooks 생성
Incoming Webhooks : 슬랙 포맷에 일치하는 데이터를 전송하면 슬랙 채널에 보내주는 기능
2. Incoming Webhooks를 이용한 슬랙 메세지 생성
2-1. request로 슬랙 메세지 보내는 python 스크립트 생성
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import os
import requests
from datetime import datetime
TIL_WEBHOOK_URL = os.environ.get('TIL_WEBHOOK_URL')
def post_message(message):
requests.post(TIL_WEBHOOK_URL, json={"text": message})
date_string = datetime.now().strftime("%Y-%m-%d")
TIL_NOTICE = f"""<!channel> 오늘의 TIL을 공유할 시간입니다! 아래의 템플릿을 참고하여 작성해주세요.
**[템플릿]**
📆 {date_string}
⏰ 공부 시간
> h시간 m분
📚 공부한 내용
* 공부한 내용에 대해 간단히 정리해주세요.
* TIL을 정리한 링크를 공유해주셔도 좋습니다
💭 회고
* 오늘의 공부를 통해 느낀 점을 자유롭게 적어주세요.
"""
if __name__ == "__main__":
post_message(TIL_NOTICE)
위와 같이 코드를 작성했습니다.
한 부분씩 간단하게 설명을 드리자면
1
TIL_WEBHOOK_URL = os.environ.get('TIL_WEBHOOK_URL')
- Incoming Webhook 환경변수를 가져옵니다. GitHub Secrets를 생성해서 Webhook Url을 등록합니다
1
2
def post_message(message):
requests.post(TIL_WEBHOOK_URL, json={"text": message})
- Webhook URL에 Post로 데이터를 보냅니다. 아래 명령과 동일한 역할을 합니다
1
curl -X POST -H 'Content-type: application/json' --data '{"text":message}' TIL_WEBHOOK_URL
2-2. Github Secret 등록
민감한 정보를 숨기기 위해 Incoming Webhook을 Github의 Secret에 등록해 사용합니다
2-3. Github action 등록
python 애플리케이션을 실행하는 Github action을 등록합니다
워크플로 .yml 파일은 아래와 같이 설정했습니다
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
name: Python application
on:
schedule:
- cron: "0 23 * * *"
workflow_dispatch:
inputs:
logLevel:
description: "Log level"
required: true
default: "warning"
tags:
description: "Test scenario tags"
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python 3.12
uses: actions/setup-python@v2
with:
python-version: 3.12
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install bs4 requests
- run: python actions/til_notice.py
env: # Or as an environment variable
TIL_WEBHOOK_URL: $
2-4. 테스트
- 깃헙액션을 수동 실행해서 알림이 잘 온 것을 확인했습니다.
참고
This post is licensed under CC BY 4.0 by the author.