docomo 지식 Q & A API로 현명한 slackbot을 만들어 보자 (후편)

이 기사는 docomo 지식 Q & A API로 현명한 slackbot을 만들어 보자 (전편)의 계속입니다.
이전에는 콘솔에서 움직이던 시스템을 slack에 도입하여 현명한 bot화했습니다.

완성한 것은 전체는, github상에서 공개하고 있으므로, 이쪽도를 참고로,.
htps : // 기주 b. 코 m/세 y323/시즈몬군

slackbot 설치 및 설정



slackbot 주위의 설정은 여기이나 여기와 같은 선인 분들의 지혜를 빌렸습니다.
고맙습니다.
$ sudo pip3 install slackbot

링크를 참고로 한 파일 구성은 다음과 같습니다. 이전에 작성한 docomo_dialogue.pyplugins 아래로 이동시켰다.
./shitumonkun
| - plugins
|     | - __init__.py
|     | - my_mention.py
|     ` - docomo_dialogue.py
| - config.json
| - run.py
` _ slackbot_setting.py

구성 파일 만들기



api 등을 직접 프로그램에 넣는 것은 번거롭기 때문에 config.json에 기술해, 그것들을 쓰는 프로그램으로 읽어들이도록 했다. config_default.json 가 있으므로, 그쪽 참고에.

config.json
{
    "email":"@",
    "slack_bot":{
        "api_key":"APIキー"
    },
    "docomo":{
        "api_key":"APIキー",
      }
}


지난번 작성한 docomo_dialogue.py 에도 config.json 로부터 읽어들이도록 추기.

./plugins/docomo_dialogue.py
~~~ 省略 ~~~
    '''
    config.jsonからAPIキーの取得
    '''
    def get_api_param( self  , _filename ):
        json = self.load_json( _filename )
        data = json["docomo"]
        self._token = data['api_key']

    '''
    jsonファイルの読み込み
    '''
    def load_json( self ,  _filename):
            f = open( _filename )
            json_data = json.load( f )

            f.close()
            return json_data

~~~ 省略 ~~~
slackbot_setting.py 에서 API 키를 config.json 로부터 취득하도록 변경.

./slackbot_setting.py
# coding: utf-8
import json
'''
jsonファイルの読み込み用
'''
def load_json( _filename):
        f = open( _filename )
        json_data = json.load( f )

        f.close()
        return json_data


json = load_json( 'config.json' )
# botアカウントのトークンを指定
API_TOKEN = json['slack_bot']['api_key']
# このbot宛のメッセージで、どの応答にも当てはまらない場合の応答文字列
DEFAULT_REPLY = "なんだこいつ"

# プラグインスクリプトを置いてあるサブディレクトリ名のリスト
PLUGINS = ['plugins']

초기 설정



./run.py
# coding: utf-8

from slackbot.bot import Bot

def main():
    bot = Bot()
    bot.run()

if __name__ == "__main__":
    print('start slackbot')
    main()


멘션 설정



이번에는 @slackbot 또는 다이렉트 메시지로 slackbot에 말한 내용을 모두 docomoAPI에 던지도록 한다.

./plugins/my_mention.py
# coding: utf-8
import sys ,os
sys.path.append( os.pardir )

from slackbot.bot import respond_to     # @botname: で反応するデコーダ
from slackbot.bot import default_reply

from plugins.docomo_dialogue import DdialogueDriver

# @respond_to('string')     bot宛のメッセージ
#                           stringは正規表現が可能 「r'string'」

ddialogue = DdialogueDriver()

@default_reply()
def question_talk( message ):
    text = message.body['text']
    ddialogue.listen( text )
    # 表示
    message.reply( "%s" % ddialogue.speak())


실행



콘솔에서 run.py를 실행하면 slackbot이 시작됩니다.
$ python3 run.py

실행 결과는 이런 식으로


dr-strage가 slackbot입니다.
모르는 경우는 「모르겠습니다」라고 표시되어 대답할 때는 상위 5개까지의 검색 후보의 URL을 돌려줍니다.
내일의 날씨를 모르는데, 세계 최강의 인간은 대답해 주네요 웃음.

참고



Python을 사용하여 SlackBot을 만드는 방법
Python의 slackbot 라이브러리로 Slack 봇 만들기

좋은 웹페이지 즐겨찾기