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を削除
前回は動作確認のため、設定ファイルにデフォルトの返事を書いていたのでまずはこれを削除しておきます。
# デフォルトの返答
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に読み込ます。
# 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して値を引っ張ったらうまくいきました。
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
なお、gitignore.ioというものがあるようなので次から使いたいです。