-
[NAVER WORKS] 파이썬을 사용하여 BOT으로 메시지 보내기오픈소스 2023. 1. 6. 15:05
네이버웍스(NAVER Works)는 네이버에서 만든 기업용 메신저입니다.
테스트 환경
- OS : Rocky Linux release 8.6 (Green Obsidian)
- Python : 3.9
1. 네이버 클라우드(NAVER Cloud) 가입
네이버 클라우드 가입하는 방법은 생략하고, 나중에 시간 될 때 다시 정리하도록 하겠습니다.
2. API 키 생성하기
NAVER WORKS Developer Console을 통해 앱을 생성합니다.
https://developers.worksmobile.com/kr/console/openapi/v2/app/list/view
메시지를 발송하기 위해서는 Client ID, Client Secret, Private Key , Servce Account 정보가 필수로 필요합니다.
앱을 생성하여 메모장에 잘 적어 두세요.
3. Python JWT
BOT을 통해 메시지를 받기 위해서는 먼저 인증이 필요합니다.
엑세스 토큰을 발급하려면 JWT를 사용하여 인증을 받게 되는데요.
파이썬 스크립트를 사용하여 PyJWT 라이브러리를 설치하고 테스트 하였습니다.
설치
$ pip install pyjwt
사용
>>> import jwt >>> encoded_jwt = jwt.encode({"some": "payload"}, "secret", algorithm="HS256") >>> print(encoded_jwt) eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzb21lIjoicGF5bG9hZCJ9.4twFt5NiznN84AWoo1d7KO1T_yoc0Z6XOpOVswacPZg >>> jwt.decode(encoded_jwt, "secret", algorithms=["HS256"]) {'some': 'payload'}
NAVER WORKS API 2.0을 통해 Access Token을 발급 받는 코드입니다.
CONFIG 항목에 위에서 발급받은 값을 넣어주면 됩니다.
#!/usr/bin/env python3.9 # -*- coding: utf-8 -*- import time, jwt, requests, json # CONFIG # client_id = '************' client_secret = '**********' service_account = '*********' private_key = "************* def getAccessToken(): secret = private_key iat = time.time() exp = iat + 3600 payload = { 'iss': client_id, 'sub': service_account, 'iat': iat, 'exp': exp } jwt_options = { 'verify_signature': False, 'verify_aud': False, } signed_jwt = jwt.encode(payload, secret, algorithm='RS256') token_url = 'https://auth.worksmobile.com/oauth2/v2.0/token' token_h = { 'Content-Type':'application/x-www-form-urlencoded' } toekn_p = { 'grant_type':'urn:ietf:params:oauth:grant-type:jwt-bearer', 'client_id': client_id, 'client_secret': client_secret, 'assertion':signed_jwt, 'scope':'bot' } token_r = requests.post(token_url, headers=token_h, params=toekn_p) if token_r.status_code != 200: print("Response Code : " + str(token_r.status_code) + "\n" + token_r.text) a = json.dumps(token_r.json()["access_token"]) a = a.replace("\"", "") return(a)
네이버 웍스에 인증 요청을 하게 되면 아래와 같이 응답을 받을 수 있습니다.
코드 마지막줄에서 json.dumps를 이용하여 토큰값만 추출합니다.
{"access_token": "kr1AAABGbJ***************", "scope": "bot", "token_type": "Bearer", "expires_in": "86400"}
토큰 값은 하루동안 유요하니 캐시에 저장해서 다시 활용이 가능합니다.
4. NAVER WORKS BOT
이제 BOT을 통해 NAVER WORKS로 메세지를 발송하도록 하겠습니다.
위에 Access_token만 있으면 메시지 발송은 간단히 할 수 있습니다.
BOT ID와 Channel ID 값을 확인해서 넣어줍니다.
메세지는 여러 종류가 있지만 기본적인 text 메시지 형식으로 전송하였습니다.
bot_id = '******* channel_id = '******* def sandMessage(): auth_token = getAccessToken() msg_url = 'https://www.worksapis.com/v1.0/bots/'+ bot_id + '/channels/' + channel_id + '/messages' msg_h = { 'Content-Type':'application/json; charset=UTF-8' , 'Authorization':'Bearer ' + auth_token, } msg_d = { "content": { "type": "text", "text": "Hello. World" } } send = requests.post(msg_url, headers=msg_h, json=msg_d) print(send)
메시지가 정상적으로 발송되면 201코드를 반환합니다.
아래와 같이 네이버 웍스에 메시지를 발송할 수 있습니다.
전체 코드
github에 전체 코드 업로드 하였습니다.
NAVER Works BOT : https://developers.worksmobile.com/kr/reference/bot?lang=ko
'오픈소스' 카테고리의 다른 글
리눅스OS 자주 사용하는 모니터링 툴 (0) 2023.01.16 리눅스 서버 OS별 EOL일자 정리 (0) 2023.01.10 [Rocky Linux8] 5분 안에 손쉽게 MariaDB 설치 하기 (0) 2023.01.02 [Prometheus] snmp export server returned HTTP status 500 Internal Server Error (0) 2022.04.29 CnetOS7(Amazon Linux2) Docker Compose 설치 하기 (0) 2021.10.14