2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

PythonでSlackbotにDocomo自然対話APIを導入&環境変数でAPIキーを管理

Posted at

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ファイルを保存すれば実行時に読み込んでくれて動作するはずです。

Screenshot 2018-04-21 18.44.26.png

動きました!(パートナーbotとして有名なおじいさんを使っていますが、お気になさらず)

環境変数でAPIキーなどを管理する

今回はコードまるまる使わせてもらってる感じで特に書くことがないのですが、githubで管理したいのでAPI keyなどを載せないように環境変数で管理したいと思います。

python-dotenvをインストール

(env)$ pip install python-dotenv

.envに秘密の値を入力する

run.pyと同じディレクトリに.envを作成します。ここにAPI Keyなどのgitなどにあげたくない値を入れます。

.env
# 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で管理できるようになりました。

.gitignore
.DS_Store
__pycache__
env
.env

なお、gitignore.ioというものがあるようなので次から使いたいです。

参考リンク

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?