Python에서 Slackbot에 Docomo 자연 대화 API 도입 및 환경 변수로 API 키 관리

Python으로 개인 Slack 용 bot 만들기 의 계속입니다.
지난번에는 가상 환경에 slackbot을 도입해 동작 확인하는 곳까지를 했습니다.
이번에 한 일은
  • bot에 응답을 날릴 때 기본적으로 Docomo 자연 대화 API에서 자연스러운 대화가 반환됩니다.
  • API 키 등을 환경 변수로 관리하여 github 등에 올라가지 않도록합니다.

    slackbot 데코레이터



    slackbot은 편리한 데코레이터를 제공합니다.
    @respond_to 데코레이터: bot에의 리플라이중에 지정한 캐릭터 라인에 반응@default_reply 데코레이터: @respond_to 로 정의되어 있지 않은 경우의 디폴트 반응@listen_to 데코레이터: bot가 join 하고 있는 channel로 지정한 캐릭터 라인에 반응

    기본적으로는 이러한 데코레이터를 사용해 bot의 기능을 구현해 갑니다.

    마지막으로 slackbot_settings.py에 설정한 DEFAULT_REPLY 삭제



    전회는 동작 확인을 위해, 설정 파일에 디폴트의 회신을 쓰고 있었으므로 우선은 이것을 삭제해 둡니다.

    slackbot_settings.py
    # デフォルトの返答
    DEFAULT_REPLY = "Sorry but I didn't understand you"
    
    

    Docomo 자연 대화 API 도입



    Docomo 잡담 대화 API의 후계라고 합니다.
    appId 취득부터 말할 때까지 이 기사 가 상세합니다.

    이 API는 여러가지 할 수 있어 즐거운 것 같습니다만, 이번은 우선 디폴트로 그럴듯한 대답이 돌아오는 곳까지로 좋기 때문에 링크처의 코드를 그대로 사용해 주시고 있습니다.

    plugins 폴더에 python 파일을 저장하면 런타임에 읽어 주어 동작 할 것입니다.



    움직였습니다! (파트너 bot로 유명한 할아버지를 사용하고 있습니다만, 신경쓰지 않고)

    환경 변수로 API 키 등 관리



    이번에는 코드 마루마루 사용하게 하고 있는 느낌으로 특별히 쓰는 일이 없습니다만, github로 관리하고 싶기 때문에 API key등을 올리지 않게 환경 변수로 관리하고 싶습니다.

    python-dotenv 설치


    (env)$ pip install python-dotenv
    

    .env에 비밀 값 입력



    run.py와 같은 디렉토리에 .env를 만듭니다. 여기에 API Key등의 git등에 주고 싶지 않은 값을 넣습니다.
    # Slack API
    API_TOKEN = "XXXXXXXXXXXXXX"
    
    # Docomo対話API
    DOCOMO_API_KEY = "XXXXXXXXXXXXXX"
    DOCOMO_APP_ID = "XXXXXXXXXXXXXX"
    

    .env에서 slackbot_settings.py로 로드



    환경 변수는 slackbot_settings.py로 읽어들입니다.

    slackbot_settings.py
    # coding: UTF-8
    import os
    from os.path import join, dirname
    from dotenv import load_dotenv
    
    dotenv_path = join(dirname(__file__), '.env')
    load_dotenv(dotenv_path)
    
    # Slack API
    API_TOKEN =  os.environ.get("API_TOKEN")
    
    # Docomo対話API
    DOCOMO_API_KEY = os.environ.get("DOCOMO_API_KEY")
    DOCOMO_APP_ID = os.environ.get("DOCOMO_APP_ID")
    
    # プラグイン指定
    PLUGINS = [
        'plugins',
    ]
    

    플러그인에서 API 키, appId 로드



    초보자이므로 import에 상당히 집계했습니다만, run.py가 실행 디렉토리이므로 slackbot_settings를 import해 값을 끌어내면 잘 되었습니다.

    plugins/docomo_talk.py
    import slackbot_settings
    
    # ~~中略~~
    @default_reply()
    def default(message):
        """
        Docomo自然対話APIから返答する
        """
        #エンドポイントの設定
        endpoint = 'https://api.apigw.smt.docomo.ne.jp/naturalChatting/v1/dialogue?APIKEY=REGISTER_KEY'
        appid = slackbot_settings.DOCOMO_APP_ID
        url = endpoint.replace('REGISTER_KEY', slackbot_settings.DOCOMO_API_KEY)
    

    .gitignore에 추가



    .env는 잊지 않고 .gitignore에. slackbot_settings.py에서 민감한 데이터를 제거할 수 있었으므로 git로 관리할 수 있습니다.
    .DS_Store
    __pycache__
    env
    .env
    

    덧붙여 기치 g의 레. 이오 라고 하는 것이 있는 것 같기 때문에 다음부터 사용하고 싶습니다.

    참고 링크


  • lins05/slackbot
  • Docomo 자연 대화 API
  • Slackbot 비망록(2)~docomoAPI를 사용한 bot~
  • 【GitHub】에 올리고 싶지 않은 환경 변수 작성 방법 Python
  • Python import에 대해 요약
  • 좋은 웹페이지 즐겨찾기