[slackbot] slack api 를 이용하여 python 자동화 코드 개발하기
Published: 2021-04-14 10:48:57


#1. slack-api app 만들기
> slack app을 생성하여 활용할 수 있는 bot을 생성한다.

###1) slack api 내 apps 생성
slack api > your apps > Create New Apps  를 클릭하여 앱을 생성
- slack api url : https://api.slack.com/ 

###2) slack api 정보 설정
기본정보 및 OAuth & Permissions 내 Scopes 정보를 설정
![image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/v87dq9pmvf0iw1gqahz4.png)

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


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

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


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

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

```
# source (가상환경 이름)/bin/activate
source myenv/bin/activate
```

###3) venv 비활성화
아래 명령어를 통해 생성한 가상환경을 활성화
```
deactivate
```

![image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/imjjkgylea38cml4l0ec.png)


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

###1) venv 내 slack_sdk를 설치
![image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/m3s9w5d3ia547vnxhmzs.png)

###2) venv 내 ssl 인증서 업데이트 
python 코드 실행 시 SSL 에러가 발생하면 인증서를 업데이트 해줍니다.
ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1123) 
![image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/454fqw1r8db12deoqo9r.png)

###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']}")

```

#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
```
###2) 실행
작성한 스크립트 파일을 실행하면, slack으로 작성된 코드가 전달되는 것을 볼수 있다.
![image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kbxg1krumfr01cmfg12i.png)
![image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1ho15l2cbgmrjrf9nuly.png)


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

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

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

```
#-------------#
# 월간 업무 알림 #
#-------------#
1 9 1 * * /Users/syan/py/pytest2.sh
```

#6. mac 전원 깨우기
> mac이 켜져있어야 crontab도 동작을 할 것이고, 명령도 실행이 될 것 이다.

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

![image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hx6fu6d3nt8xe19bm8f3.png)