Post

슬랙 봇 만들기 - 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.