DEV Community

수연 안
수연 안

Posted on

[slackbot] slack api 를 이용하여 python 자동화 코드 개발하기

1. slack-api app 만들기

slack app을 생성하여 활용할 수 있는 bot을 생성한다.

1) slack api 내 apps 생성

slack api > your apps > Create New Apps 를 클릭하여 앱을 생성

2) slack api 정보 설정

기본정보 및 OAuth & Permissions 내 Scopes 정보를 설정
image

2. python 가상환경 만들기

가상환경을 통해 원하는 파이썬 모듈 및 버전을 세팅하여 활용한다.
프로젝트마다 다른 하나의 가상환경을 생성하여 작업 가능하다.

가상환경의 대표적인 모듈
  • venv : python 3.3 버전 이후 부터 기본 모듈에 포함됨
  • virtualenv : python 2 버전부터 사용해오던 라이브러리. python 3.6에서 폐지됨
  • conda : anaconda python을 설치했을 시 사용 가능한 모듈

1) venv 생성

가상환경을 생성할 디렉토리로 이동하여, 아래 명령어를 통해 가상환경을 생성

# python3 -m venv ./(생성하고자 하는 가상환경이름)
python3 -m venv ./myenv
Enter fullscreen mode Exit fullscreen mode

2) venv 활성화

아래 명령어를 통해 생성한 가상환경을 활성화

# source (가상환경 이름)/bin/activate
source myenv/bin/activate
Enter fullscreen mode Exit fullscreen mode

3) venv 비활성화

아래 명령어를 통해 생성한 가상환경을 활성화

deactivate
Enter fullscreen mode Exit fullscreen mode

image

3. python 코드로 slack에 메세지 전송하기

생성된 슬랙bot의 token값을 이용하여, 작성된 python코드를 slack 채널로 메세지를 전송한다.

1) venv 내 slack_sdk를 설치

image

2) venv 내 ssl 인증서 업데이트

python 코드 실행 시 SSL 에러가 발생하면 인증서를 업데이트 해줍니다.
ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1123)
image

3) python 실행

아래 python 코드를 작성하고 실행합니다.

  • local.py 에 SLACK_TOKEN 이라는 변수를 세팅하여 슬랙토큰을 넣는다.
  • 미리 설치한 slack_sdk를 이용하여 필요한 모듈을 import 합니다.
  • 원하는 채널명, 원하는 텍스트를 작성합니다.
import sys
from local import SLACK_TOKEN
from datetime import datetime
from slack_sdk import WebClient
from slack_sdk.errors import SlackApiError
try:
    client = WebClient(token=SLACK_TOKEN)
    client.chat_postMessage(
        channel = "#team_security_bot_test",
        text = datetime.strftime(datetime.now(), 
        '-------------------------------------- \n'+
        '[%Y.%m 월간 업무 알림] \n'+
        ' - 보안교육 일정 예약하기\n'+
        ' - 보호구역 출입기록대장 검토하기\n'+
        '--------------------------------------')
    )
except SlackApiError as e:
    assert e.response["error"]
    print(f"Got an error: {e.response['error']}")

Enter fullscreen mode Exit fullscreen mode

4. bash script 에서 명령 작성

windows에서 bat파일처럼 mac에서 bash script를 통해 명령어를 작성할 수 있다.

1) bash script 작성

첫째 줄에 #!/bin/bash를 입력하고 실행을 원하는 명령을 입력하여 저장

  • python을 실행하기 위해 가상환경을 활성화하는 명령
  • python 코드를 실행하기 위한 명령
  • python 가상환경을 종료하기 위해 비활성화하는 명령
#!/bin/bash
source /Users/syan/py/myenv/bin/activate
python /Users/syan/py/myenv/test2.py
deactivate
Enter fullscreen mode Exit fullscreen mode

2) 실행

작성한 스크립트 파일을 실행하면, slack으로 작성된 코드가 전달되는 것을 볼수 있다.
image
image

5. crontab 에서 스케줄링 작성

정해진 시간에 자동으로 원하는 명령이 실행될 수 있도록 스케줄링 작성한다.

1) 작성방법

  • 각 별 위치에 따라 주기를 다르게 설정 가능
  • 순서대로 분-시간-일-월-요일
  • 괄호 안의 숫자 범위 내로 별 대신 입력 가능
  • 1부터 월요일이고 6이 토요일. 0과 7은 일요일.
*      *      *      *      *             명령
분(0-59)  시간(0-23)  일(1-31)  월(1-12)   요일(0-7)
Enter fullscreen mode Exit fullscreen mode

2) 실행예시

매월 1일 9시 1분에 pytest2.sh 를 실행

#-------------#
# 월간 업무 알림 #
#-------------#
1 9 1 * * /Users/syan/py/pytest2.sh
Enter fullscreen mode Exit fullscreen mode

6. mac 전원 깨우기

mac이 켜져있어야 crontab도 동작을 할 것이고, 명령도 실행이 될 것 이다.

  1. Mac에서 Apple 메뉴 > 시스템 환경설정을 선택한 다음, 에너지 절약을 클릭하십시오.
  2. 오른쪽 하단에 있는 ‘일정’을 클릭한 다음, 사용할 옵션을 선택하십시오.
  3. Mac 시동 또는 깨우기 시간 설정하기: ‘시동 또는 깨우기’ 체크상자를 선택하십시오. 팝업 메뉴에서 하루나 여러 날을 선택한 다음 시간을 입력하십시오.
  4. Mac 잠자기, 재시동 또는 종료 시간 설정하기: ‘잠자기, 재시동 또는 시스템 종료’ 체크상자를 선택하고 왼쪽의 팝업 메뉴에서 적절한 옵션을 선택하십시오. 오른쪽의 팝업 메뉴에서 하루 또는 여러 날을 선택한 다음 시간을 입력하십시오.

image

Top comments (0)