Upload
dcubeio
View
1.345
Download
2
Embed Size (px)
Citation preview
Python × Herokuで作る雑談SlackBot
2017/03/07株式会社ビズリーチ
松岡 幸一郎
● 松岡 幸一郎
● 株式会社ビズリーチ
● 「キャリアトレック」開発
発表者紹介
会社・サービス紹介
ハイクラス層向け転職 求人検索エンジン
若年層向け転職 戦略人事 OB/OG訪問支援
会社・サービス紹介
ハイクラス層向け転職 求人検索エンジン
若年層向け転職 戦略人事 OB/OG訪問支援
Java + Angular2 (SPA) (一部) Scala + Angular1MicroService
Java + React (SPA) (一部) Scala + React / Angular2MicroService
Java + React (一部)
対象者
● テーマ
○ Python × Herokuで作る雑談SlackBot
● 想定対象者
○ SlackBotを気軽に作りたい、運用したい
○ Pythonで書きたい
■ Hubotが主流だが、CoffeeScriptを今から新しく覚えたくはない
■ Pythonのライブラリや既存資産を利用したい
早速喋ってもらいましょう
ゴールと構成
● 本日のゴール
○ 簡単なbotがかけるようになる
○ Herokuにデプロイできるようになる
○ 雑談会話用APIで簡単な会話が出来るようになる
○ 応用イメージが持てる
● 構成
○ ハンズオン風の資料だけどNotハンズオン
○ 概要と流れを説明
○ 資料を家で見て参考に作れるように
やらないこと
● Python言語自体の解説
● 雑談ロジック、言語解析や自然応答ロジックの詳細
○ 雑談ロジックは外部APIを使用
アジェンダ
1. 基本的なBotを作る
2. Herokuにデプロイする
3. 雑談できるようにする
4. 応用のための情報
アジェンダ
1. 基本的なBotを作る
2. Herokuにデプロイする
3. 雑談できるようにする
4. 応用のための情報
1. 基本的なBotを作る
a. 使用するライブラリ・サービスの紹介
b. slackでbot用API KEYを発行
c. ローカル環境でbotスクリプト作成
2. Herokuにデプロイする
3. 雑談できるようにする
4. 応用のための情報
基本的なbotを作る - 全体の流れ
使用するライブラリ・サービス
● slackbot○ https://github.com/lins05/slackbot○ Python3用○ pipでインストール可能
○ SlackのRealTimeMessagingAPIを利用
○ プラグイン拡張が簡単
○ 接続が切れても再接続してくれる
使用するライブラリ・サービス
● Heroku○ PaaS(Platform as a Service)○ git連携して簡単にビルド・デプロイ
○ 無料で使えるが制限がある (1アカウント月間1000時間)○ 元はRuby on Rails向けだったが、対象言語が拡張している
(Python, Java, Node.js, Scala, Cloujure..)
1. 基本的なBotを作る
a. 使用するライブラリ・サービスの紹介
b. slackでbot用API KEYを発行
c. ローカル環境でbotスクリプト作成
2. Herokuにデプロイする
3. 雑談できるようにする
4. 応用のための情報
基本的なbotを作る - 全体の流れ
● slackチームの準備
基本的なbotを作る - Bot integrationの登録
● slackルームにBotIntegrationを追加
基本的なbotを作る - Bot integrationの登録
基本的なbotを作る - Bot integrationの登録
● Bot integrationを新規登録する
基本的なbotを作る - Bot integrationの登録
● チャットで表示されるbotの名前を決める
基本的なbotを作る - Bot integrationの登録
● スクリプトで使用できるようにAPI Tokenをコピーしておく
1. 基本的なBotを作る
a. 使用するライブラリ・サービスの紹介
b. slackでbot用API KEYを発行
c. ローカル環境でbotスクリプト作成
2. Herokuにデプロイする
3. 雑談できるようにする
4. 応用のための情報
基本的なbotを作る - 全体の流れ
基本的なbotを作る - ローカル環境でbotを動かす
● slack botをインストール
○ $ pip install slackbot
● スクリプト作成
○ run.py : 本体
○ slackbot_setting.py:設定ファイル
(設定ファイル名は固定)
● 環境変数設定
○ $ export SLACKBOT_API=<<API TOKEN>>(変数名は固定)
○ slackbot_setting.pyに書いても動くが、git管理したいので環境変数を使う
● run.py
● slackbot_settings.py
● 実行
○ $python run.py(先ほどの環境変数を設定した環境で実行すること)
基本的なbotを作る - ローカル環境でbotを動かす
基本的なbotを作る - ローカル環境でbotを動かす
● slackのchannelにbotアカウントを招待
● botに話しかける
※画面デモ
アジェンダ
1. 基本的なBotを作る
2. Herokuにデプロイする
3. 雑談できるようにする
4. 応用のための情報
アジェンダ
1. 基本的なBotを作る
2. Herokuにデプロイする
a. アカウント作成・アプリケーション作成・設定
b. Heroku用設定ファイルの作成
c. デプロイ
3. 雑談できるようにする
4. 応用のための情報
Herokuにデプロイする ● アカウント作成
○ (画面キャプチャは省略)
Herokuにデプロイする ● アプリケーション作成
● 必要な設定を追加
○ 環境変数の設定
○ Buildpackの設定
Herokuにデプロイする ● 環境変数の設定
○ ローカルで設定したのと同じ変数名、API Tokenを設定する
Herokuにデプロイする ● Buildpackの指定
○ Pythonを指定する
アジェンダ
1. 基本的なBotを作る
2. Herokuにデプロイする
a. アカウント作成・アプリケーション作成・設定
b. Heroku用設定ファイルの作成
c. デプロイ
3. 雑談できるようにする
4. 応用のための情報
Heroku設定ファイル作成
● buildに必要なファイルの作成
○ Procfile:○ requirements.txt○ runtime.txt
※いずれも、プロジェクトルートに置く必要がある
Heroku設定ファイル作成
● Procfile : Herokuでデプロイ時に実行するプロセスの定義
pbot: python run.py
● ①:プロセス名の定義 任意の文字列でOKただし"web"だけは特別な意味を持つ(死活監視が自動で設定される)
● ②:実行される処理
ローカルで実行したのと同じコマンド
① ②
Heroku設定ファイル作成
● runtime.txt :実行Pythonのバージョンの定義
● requirements.txt : Pythonの依存ライブラリの定義
$ pip freeze > requirements.txt
アジェンダ
1. 基本的なBotを作る
2. Herokuにデプロイする
a. アカウント作成・アプリケーション作成・設定
b. Heroku用設定ファイルの作成
c. デプロイ
3. 雑談できるようにする
4. 応用のための情報
Herokuにデプロイする ● (デフォルトリプライを変更しておく)
○ DEFAULT_REPLY = "Hey, I'm on Heroku!"
● デプロイ
「Deploy」タブ内に書いてあるコマンドを叩けばOK● $ brew install heroku● $ heroku login
● 以下、「Deploy」タブの記述通りにコマンド実行
○ $ cd my-project/
$ git init
$ heroku git:remote -a pbot-sample
$ git add .
$ git commit -am "make it better"
$ git push heroku master
Herokuにデプロイする
Herokuにデプロイする ● pushすると必要なモジュールのインストール、ビルドが走る
Herokuにデプロイする
● 起動の呪文
○ $ heroku ps:scale pbot=1○ pbotに1プロセス割り当てさせるコマンド
● 話しかけてみる
(画面デモ)
アジェンダ
1. 基本的なBotを作る
2. Herokuにデプロイする
3. 雑談できるようにする
4. 応用のための情報
アジェンダ
1. 基本的なBotを作る
2. Herokuにデプロイする
3. 雑談できるようにする
a. 独自の返信を作成
b. docomo雑談APIサービス登録
c. 環境変数設定・実装
4. 応用のための情報
雑談できるようにする
● @respond_toデコレータ
● run.pyに以下のコードを追加
● 反応する単語を定義
● 半角、全角OK● (.*)で変数を渡せる
● 変数の個数は増やせる
アジェンダ
1. 基本的なBotを作る
2. Herokuにデプロイする
3. 雑談できるようにする
a. 独自の返信を作成
b. docomo雑談APIサービス登録
c. 環境変数設定・実装
4. 応用のための情報
Docomoの雑談対話API - ● Docomoが開発者向けに提供しているAPI● ユーザーの発話テキストを受け付け、雑談的な会話を返答してくれる
● REST API jsonでリクエスト/レスポンスデータ受け渡し
● 呼び出しが簡単
Docomoの雑談対話API - 登録
● docomo Developer support● アカウント登録し、「新規API利用申請」から「雑談対話」を選択
● 手順参考サイト
●
アジェンダ
1. 基本的なBotを作る
2. Herokuにデプロイする
3. 雑談できるようにする
a. 独自の返信を作成
b. docomo雑談APIサービス登録
c. 環境変数設定・実装
4. 応用のための情報
● 環境変数のセット
$ export set DIALOGUE_API_KEY= XXXXXXherokuでも設定してください
● コード
● default_replyデコレータで、他のメ
ソッドに反応しなかった場合のみ
呼び出される
● matchstrはライブラリのバグ?で
default_replyの時だけ略せない
● API指定の型でjson文字列化して
post送信
● 戻ってきた値をslackに投げる
Docomoの雑談対話API -
Docomoの雑談対話API - ● リクエスト・レスポンスのjson
Docomoの雑談対話API - ● 話しかけてみる
request{'utt': 'docomoは使いやすいですね', 'yomi': 'docomoは使いやすいですね', 'mode': 'dialog', 'da': '5', 'context': 'gq-pS1Q_YcS_anHd0AttPw'}
Docomoの雑談対話API - コンテキストを記憶
● コンテキストを記憶させる(汚いコードですが。。)
● 一応文脈を記憶してくれます。
Docomoの雑談対話API -
● 正直あまり賢くはない。。
Docomoの雑談対話API -
● 雑談対話APIだけでは味気ないので拡張
run.py 雑談対話API
独自プラグイン
slack
ここではルーティングだけするものとすると、I/OのシンプルなWebアプリケーションと考えられる!!
- @respond_toのマッチ文字列- メソッド内のロジックなどで分岐して呼び出す処理を切り替える
アジェンダ
1. 基本的なBotを作る
2. Herokuにデプロイする
3. 雑談できるようにする
4. 応用のための情報
アジェンダ
1. 基本的なBotを作る
2. Herokuにデプロイする
3. 雑談できるようにする
4. 応用のための情報
a. slackbotライブラリの機能
b. 応用事例
拡張のためのアイデア - slackbotのその他の機能
● attachment○ slack APIのAttachmentメソッドをサポート
○ 詳細は公式ガイド参照
拡張のためのアイデア - slackbotのその他の機能
● listen_toデコレータ
○ @botしなくても特定の文字列を監視 (乱用しないように。。)● message.react
○ emojiリアクションをつける
拡張のためのアイデア - slackbotのその他の機能
● 独自プラグインの切り出し
run.py
アジェンダ
1. 基本的なBotを作る
2. Herokuにデプロイする
3. 雑談できるようにする
4. 応用のための情報
a. slackbotライブラリの機能
b. 応用事例
応用事例
● おぼえて機能
○ bot自体に反応キーワードと
返答の辞書を持たせる
○ 辞書にマッチしたら返答を返す
○ マッチしなければ雑談APIに投げる
○ @respond_to('覚えて(.*)')でおぼえてメソッド呼び出し
○ 辞書マッチ前に形態素解析を挟むと
拾う率が上がる
応用事例
● ホットペッパーグルメ検索
○ ホットペッパーAPIと連携
○ @respond_to('ランチ (.*)')で拾い、
変数部分をホットペッパーAPIの検索クエリに渡す
応用事例
● 修造機能
○ ネガティブなことを言うと修造がランダムで励ましてくれる
○ @listen_to(‘だめ|修造’)とかで拾ってます。笑
○ attachmentで見た目を変えると楽しい
応用事例
● slack APIの仕組みが分かればGoogle App Scriptから叩くなども応用可能
締め
● slack bot、ChatOps、Hubotなどで検索すると色々事例が出るので
探してみてください
○ TranslimitのChatOps事情と愉快なbotたち
○ 我が家を支えるChatOps○ ChatOpsでなにができるのかまとめ
● ぜひ興味を持ったらお家で試してみてください!
本日のサンプルコード
https://github.com/little-hands/pbot
ありがとうございました