작성일: 2024년 4월 18일
카카오 API 보다 Slack API를 사용하게 된 이유
개인적으로 자동으로 스마트폰 메신저에 Notification 메시지를 보낼 일이 있어서, Python으로 카카오톡 메시지 전송 Rest API를 사용했다. Python + 카카오 API 조합으로 구현하니까 참고할 예제가 많아서 큰 문제없이 개발을 할 수 있었다.
그런데 ...
AccessToken의 만료 시간이 4시간 밖에 안 되니까, Refresh Token을 이용해서 다시 AccessToken을 재발급해야 하는 귀찮은 일이 생겼다. 그냥 한번 코드를 작성하고 몇년 동안 잊고 살았으면 좋겠는데 말이다.
그래서 귀찮은 작업을 안 하려고 Slack API의 Webhooks를 이용하게 되었다.
Slack API의 Incoming Webhooks
Slack API를 이용해서 Slack Messenger에 메시지를 전달하기 위한 절차를 보면,
- 당연히 Slack에 계정을 만들고, slack.com에 로그인해야 한다.
- https://app.slack.com 접속해서 App을 추가한다.
+ 나는 [Incoming Webhooks]라는 App을 추가했다.
+ 이때, 기존 channel을 사용해도 되고, 아래 화면처럼 새롭게 channel을 만들어도 된다.
+ 위 화면처럼 channel을 선택하고 나면, 아래 화면이 보일 것이고 [Add Incoming WebHoos integration] 버튼을 누른다.
아래와 같이 App이 생성된 결과 및 설정 화면이 나온다.
그리고 Example 명령을 복사해서 Terminal에서 실행하면, 바로 Slack 메신저에 curl로 보낸 메시지가 보여진다.
아래와 같이 slack 메신저에 테스트로 보낸 메시지가 보여지면, Incoming-Webhook App은 정상 동작한 것이다.
Python의 requests package를 import해서 requests.post(url, headers, body)를 이용해도 curl과 동일한 효과를 낼 수 있다.
Python Code 작성
##
## FILENAME: my_webhook_test.py
##
import requests, json
## NOTE
## MY_WEBHOOK_KEY는 "T7RURUGSK/.............................. 22i"
## 이런 형태의 문자열이다.
api_url = "https://hooks.slack.com/services/{MY_WEBHOOK_KEY}"
headers = {
"Content-type": "application/json"
}
data = json.dumps({
"text": "파이썬으로 테스트 메시지를 보내다 :) \n 룰루랄라 !!!"
})
response = requests.post(api_url, headers=headers, data=data)
print(response)
위와 같이 Python code를 작성하고, 아래와 같이 명령을 수행한다.
$ python3 my_webhook_test.py
<Response [200]>
$
위 Python 앱이 아래와 같이 메신저에 "파이썬으로 테스트 메시지를 보내다... 룰루랄라!!!"를 출력할 것이다.
그리고 아래 화면처럼 Slack API 매뉴얼이 잘 되어 있어서, 읽고 따라하면 잘 동작한다.
결국, AccessToken을 발급하지 않아도 이 Webhooks처럼 쉽게 메신저에 메시지를 보내는 것이 가능한다.
꼭 알아야 할 정보
내가 만든 Slack App에 관한 전체 목록을 열람하고, 설정 정보를 관리하고 싶다면 아래 주소를 사용한다.
- 내 App 목록을 확인할 수 있다.
- 각 App의 설정 정보, REST API URL 등 정보를 직접 확인하고 제시해주는 예제 명령어를 통해 테스트할 수 있다.
'IT General' 카테고리의 다른 글
cURL 사용법 및 예제 스크립트 (0) | 2022.02.11 |
---|---|
JavaScript 개발할 때 사용하는 Framework (0) | 2022.02.09 |
JavaScript 파일을 예쁘게 변환 ( JS Beautifier ) (0) | 2022.02.07 |
KVM에서 CPU Pinning 설정 (0) | 2022.01.13 |
PatternFly를 이용한 Web Page 개발 (0) | 2022.01.03 |