O slideshow foi denunciado.
Seu SlideShare está sendo baixado. ×

Python × Herokuで作る 雑談slack bot

Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Carregando em…3
×

Confira estes a seguir

1 de 63 Anúncio

Python × Herokuで作る 雑談slack bot

Baixar para ler offline

普段slackを利用していて、Botに興味はあるけどまだ手を出したことがない・・・!
そんな方のために簡単な作り方、デプロイ方法、応用方法をお伝えします。
今回は、公開されている雑談APIと組み合わせて、SlackBotと簡単な雑談できるようなものを例として作ります。
また、Herokuへのデプロイ方法、その他応用事例などもお伝えします。

SlackBotといえばCoffeeScriptで書けるHubotが有名ですが、今回はPythonで書いてみたい、という方向けのコンテンツです。

普段slackを利用していて、Botに興味はあるけどまだ手を出したことがない・・・!
そんな方のために簡単な作り方、デプロイ方法、応用方法をお伝えします。
今回は、公開されている雑談APIと組み合わせて、SlackBotと簡単な雑談できるようなものを例として作ります。
また、Herokuへのデプロイ方法、その他応用事例などもお伝えします。

SlackBotといえばCoffeeScriptで書けるHubotが有名ですが、今回はPythonで書いてみたい、という方向けのコンテンツです。

Anúncio
Anúncio

Mais Conteúdo rRelacionado

Diapositivos para si (20)

Semelhante a Python × Herokuで作る 雑談slack bot (20)

Anúncio

Mais de dcubeio (20)

Mais recentes (20)

Anúncio

Python × Herokuで作る 雑談slack bot

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

×