SlackのスラッシュコマンドでAkashiのAPIを利用するアプリケーション。
SlackのスラッシュコマンドでCloud Functionsの関数を呼び出しで処理を実行します。 関数はSheets APIとAkashi APIをコールしてレスポンスを返します。
- gcloudコマンドが利用できること
- アプリケーションをデプロイするために、gcloudコマンドが利用できる必要があります。
- Cloud Build APIが有効化されていること
- Cloud Functionsに関数をデプロイするために必要です。
- Google Sheet APIが有効化されていること
- Google Cloud Platform上でGoogle Sheet APIを有効化しておく必要があります。
- AKASHI APIが有効化されていること
Cloud Functionsにて関数を作成しておく。トリガータイプはHTTP
、認証は未認証の呼び出しを許可
を選択。HTTPSが必須
はチェック。
関数デプロイ後、Cloud Functionsの関数の詳細>トリガーに記載されているトリガーURLをコピーしておく。
Create an appにて、From scratch
を
押下。
App Name
を入力、Pick a workspace to develop your app in:
にてワークスペースを選択して、Create App
を押下。
設定画面(ex. https://api.slack.com/apps/*******
)にて、Slash Commandsを選択。
Create New Command
を押下し、Command
、Short Description
、Usage Hint
、Escape channels, users, and links sent to your app
は任意で設定。
Request URL
はCloud Functionsの関数の詳細>トリガーに記載されているトリガーURLを入力。https://REGION名-PROJECTのID.cloudfunctions.net/関数名
の形式。
Save
を押下。
設定画面(ex. https://api.slack.com/apps/*******
)にて、Install App
を押下。
Install to workspace
を押下して、任意のワークスペースにAppをインストール。
設定画面(ex. https://api.slack.com/apps/*******
)にて、Basic Infomation
を押下。App Credentialsという項目に、Signing Secret
があるので、値をコピーしておく。
GCPでサービスアカウントを発行。
任意のサービスアカウント名を入力したら作成して続行
を押下。ロールの調整はせずに、完了
を押下。
サービスアカウント一覧から作成したサービスアカウントを選択、新しい鍵をJSON形式で作成�。
作成された秘密鍵(jsonファイル)をbase64でエンコードした値をコピーしておく。
base64 service_account.json
Spread Sheetを作成。
以下シートに貼り付けるためのコピペ用データ。
employee_id slack_user_name akashi_company_id akashi_api_token
dummy_id dummy_name dummy_com_id dummy_token
dummy_id dummy_name dummy_com_id dummy_token
dummy_id dummy_name dummy_com_id dummy_token
dummy_id dummy_name dummy_com_id dummy_token
dummy_id dummy_name dummy_com_id dummy_token
employee_id
は社員番号。
slack_user_name
はslackのユーザ名。
akashi_company_id
はAkashi APIのコールで利用する企業ID。
akashi_api_token
はAkashiでユーザーごとに発行するAPIトークン。
作成したSpread Sheetの共有設定を開き、サービスアカウントのメールを追加する。 サービスアカウントのメールは、サービスアカウントの詳細で確認できる。
.env.yaml
を作成。
cp .env.yaml.example .env.yaml
SLACK_SIGINING_SECRET
はSlack Appのsigning secret。
SERVICE_ACCOUNT
はbase64エンコードしたサービスアカウントの値。
SPREAD_SHEET_ID
はSpread SheetのID。IDはSpread Sheetのリンクから確認できる。https://docs.google.com/spreadsheets/d/<SPREAD SHEEET ID>/edit#gid=0
export FUNC=関数名
make deploy
コマンド | 内容 |
---|---|
/akashi | 出勤または退勤します。出勤が打刻されていない場合は出勤。出勤が打刻されているまたは退勤が打刻されている場合は退勤を打刻します。 |
/akashi 出勤 | 出勤を打刻します。 |
/akashi 退勤 | 退勤を打刻します。 |
※Slash CommandのCommandをakashi とした場合を想定。 |
トークンの期限切れた場合は、手動で再発行し、Spreadsheetの各自のトークンを更新する必要がある。 Akashiのトークンの有効期限は発行から1ヶ月であるため、月1回の更新が必要となる。 トークン再発行の自動化については以下issue参照。 cf. #6