この記事は,docomoの知識Q&A APIで賢いslackbotを作ってみる(前編)の続きです.
前回はコンソール上で動かしていたシステムを,slack上に導入し賢いbot化しました.
完成したものは全体は,github上で公開しているので,こちらもを参考に,.
https://github.com/sey323/shitsumonkun
slackbotのインストールと設定
slackbot周りの設定はこちらやこちらのような先人の方々の知恵をお借りしました.
ありがたや.
$ sudo pip3 install slackbot
リンクを参考にした,ファイル構成は以下の通り.前回作成したdocomo_dialogue.py
もplugins
下に移動させた.
./shitumonkun
| - plugins
| | - __init__.py
| | - my_mention.py
| ` - docomo_dialogue.py
| - config.json
| - run.py
` _ slackbot_setting.py
設定ファイルの作成
apiなどを直接プログラムに打ち込むのは面倒なので,config.json
に記述し,それらを書くプログラムで読み込むようにした.config_default.json
があるので,そちら参考に.
{
"email":"@",
"slack_bot":{
"api_key":"APIキー"
},
"docomo":{
"api_key":"APIキー",
}
}
前回作成したdocomo_dialogue.py
にもconfig.json
から読み込むように追記.
~~~ 省略 ~~~
'''
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
から取得するように変更.
# 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']
初期設定
# coding: utf-8
from slackbot.bot import Bot
def main():
bot = Bot()
bot.run()
if __name__ == "__main__":
print('start slackbot')
main()
メンションの設定
今回は@slackbot
または,ダイレクトメッセージでslackbotに話しかけた内容を,全てdocomoAPIに投げるようにする.
# 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を返してくれます.
明日の天気がわからないのに,世界最強の人間は答えてくれるんですね笑.