ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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에 전체 코드 업로드 하였습니다.

     

    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 

    PyJWT : https://pyjwt.readthedocs.io/en/stable/

Copyright 2020. bluewins All Rights Reserved.