[NAVER WORKS] 파이썬을 사용하여 BOT으로 메시지 보내기
네이버웍스(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에 전체 코드 업로드 하였습니다.
GitHub - bluewins/shell-script: 리눅스 쉘 스크립트
리눅스 쉘 스크립트. Contribute to bluewins/shell-script development by creating an account on GitHub.
github.com
NAVER Works BOT : https://developers.worksmobile.com/kr/reference/bot?lang=ko