4月 27, 2019

簡単なslack bot作ってみますの回

皆さんこんにちは

久しぶりの投稿になります。

突然ですが弊社ではgsuiteを使用しており、勤務時間の管理はspreadsheetで行っています。

一方で社内のコミュニケーションツールとしてslackも使用しており、ある程度slackで完結出来るようになるといいなー、と思い今回は勤怠集計用のslackアプリ(bot)作成のために簡単にどんなもんか確認してみようと思います。

とはいえいきなりbotとか言われてもイメージ湧きません、、、ということで最終的に目指すやり取りを絵にしました。
30秒で書いたので見栄えが悪いことをご了承ください。

slackのbotに話しかけるとspreadsheetの勤怠ファイルから値を取得して教えてくれるイメージです

1. slackのアプリ作成

まずはslackでメッセージを受け取れるようにしてみます。

何はともあれ公式サイトのガイドを見てみましょう。

読んだところすごく簡単に言うと

  1. slackへのアクセス用のトークンを作成
  2. pythonのライブラリをインストール

の2つで良いようです。

1. トークン作成

なのでまずはトークンを作成します。

ガイドを読むとこちらからトークンを作成出来るようなのでCreate New Appというボタンを押してアプリの名前と、対象にするWorkspaceを選びます。

Basic Informationを開くとやるべきことが書いてあるので順番にやっていきます。

Add features and functionalityで作成したアプリの権限を選び、
Install your app to your workspaceで作成したアプリをslackへ取り込めます。

今回は権限はメッセージ送信だけで良さそうです。あとはBotsを選んでユーザを作成しておきました。
アプリをインストールしたらこの時点でslackに反映されているか確認してみます。

slackへログインして、左側にあるメニューのAppsの+を押してアプリを探すと、、、

ある!簡単!

テンション上がって話かけてしまいましたが、現時点では当然返事は無いです。

2. ライブラリのインストール

お次はライブラリのインストールです。

githubにインストール方法とサンプルコードがあるので試してみます。

インストールするライブラリはslackclientのみです。この際vertualenvで環境を分けておくとスムーズかと思います。
コマンドだけ書きますとこれで準備は終了です。
virtualenv app_env
source app_env/bin/activate
pip install slackclient

サンプルコードを実行します、この際に作成したトークン(Bot User OAuth Access Token)を使用します。

SLACK_BOT_TOKEN="トークン" python startbot.py

このトークンは外部に公開してしまうとslackにアクセスされてしまい危険なので気を付けましょう。
アプリの実行に成功するとweb画面のアプリのステータスがアクティブになります。

受け取ったメッセージにビックリマークを付けて返すだけの実装ですが、返事は来るようになりました。

あとはgsuiteのspreadsheetへアクセスが出来ればOKですね。

2. google spreadsheetへのアクセス

googleのdevelopers guideも見てみましょう。

こちらも概ね同じような以下の手順で進められるようです。

Step 1

手順に従ってAPIアクセスに使用するOAuth2.0の認証情報を作成します。

作成したらjsonファイルをダウンロードしておきます。この認証情報も公開しないようにしましょう。

Step 2

必要なライブラリをインストールします、コマンドは記載されているものをそのまま使用出来ます。

pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib

Step 3とStep 4

サンプルコードと実行コマンドです。コード中にサンプル用のspreadsheetのIDが記載されているので自分でアクセスしたいファイルのIDに置き換えます。

IDはspreadsheetを開いたときのURLに記載されています。

実際の勤怠ファイルはお見せできないのでお試し用のファイルを作成しました。

サンプルコードを実行するとOAuth認証を行うためにブラウザが開きますのでgsuiteアカウントで認証を行います(キャプチャは取り忘れました)。

指定した範囲の値を取得出来るようなので、A1とB1の値を取得するよう指定します。ソースの以下の箇所です。

sheet.values().get(spreadsheetId=SAMPLE_SPREADSHEET_ID,
range=SAMPLE_RANGE_NAME).execute()

rangeにA1:B1を指定して実行するとこのように値が取得出来ました。うーん便利。
(app_env) Mypc:spreadsheet oh$ python quickstart.py
['10:00', '19:00']

さてslackとspreadsheetのアクセスが出来ましたので、slackのアプリに話しかけると時間を教えてくれるようにしてみます。

それぞれ試した内容を組み合わせて、、、

ありがとう。。。

かなり駆け足になってしまいましたが、公式サイトのガイド2つでさくっと作れますね。

例えば自動で集計して管理者にお知らせしたり、

メッセージではなく別のファイルに集計したり色々な運用に対応出来そうです。

実際にはきちんと認証情報の管理を考えないといけないですが、今回はslack botのお試しということでこの辺で失礼します。

~追伸~

ちょうどこの文章を書いている最中にこんな記事を見かけました

https://internet.watch.impress.co.jp/docs/event/1182127.html

gsuiteとの接続やプログラムを書かずにワークフローを簡単に作れるそうで、、、

このブログ程度の使い方ならこちらの方が楽かもしれませんね。次回はこれを使って完成を目指してみようかと思います。

references

  • – slack

APIガイドトップ

pythonのslackclient

  • –  google spreadsheet

pythonでのアクセス方法

OAuth2.0の説明

最後までお読みいただき、誠にありがとうございます。


星野修

  • facebook
  • twitter
  • line
  • このエントリーをはてなブックマークに追加

アットファイブで一緒に働きませんか?

エンジニアをはじめ、複数の職種で仲間を募集しています!