Skip to content

bmf-san/akashi-slack-slash-command

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

akashi-slack-slash-command

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 Functionに関数を作成

Cloud Functionsにて関数を作成しておく。トリガータイプはHTTP、認証は未認証の呼び出しを許可を選択。HTTPSが必須はチェック。 関数デプロイ後、Cloud Functionsの関数の詳細>トリガーに記載されているトリガーURLをコピーしておく。

Slack App

Slack Appを作成

Create an appにて、From scratchを 押下。

スクリーンショット 2022-06-15 21 24 12

App Nameを入力、Pick a workspace to develop your app in:にてワークスペースを選択して、Create Appを押下。

スクリーンショット 2022-06-15 21 24 51

Slash Commandを設定

設定画面(ex. https://api.slack.com/apps/*******)にて、Slash Commandsを選択。

スクリーンショット 2022-06-15 21 36 37

Create New Commandを押下し、CommandShort DescriptionUsage HintEscape channels, users, and links sent to your appは任意で設定。

Request URLはCloud Functionsの関数の詳細>トリガーに記載されているトリガーURLを入力。https://REGION名-PROJECTのID.cloudfunctions.net/関数名の形式。

スクリーンショット 2022-06-15 21 30 52

Saveを押下。

Slack Appをインストール

設定画面(ex. https://api.slack.com/apps/*******)にて、Install Appを押下。

スクリーンショット 2022-06-15 21 37 09

Install to workspaceを押下して、任意のワークスペースにAppをインストール。

Signing Secretを取得

設定画面(ex. https://api.slack.com/apps/*******)にて、Basic Infomationを押下。App Credentialsという項目に、Signing Secretがあるので、値をコピーしておく。

サービスアカウントの発行

GCPでサービスアカウントを発行。

任意のサービスアカウント名を入力したら作成して続行を押下。ロールの調整はせずに、完了を押下。 bmf-san-akashi-slack-slash-command-This-is-a-slack-slash-command-for-Akashi

サービスアカウント一覧から作成したサービスアカウントを選択、新しい鍵をJSON形式で作成�。

スクリーンショット 2022-06-15 21 47 14

作成された秘密鍵(jsonファイル)をbase64でエンコードした値をコピーしておく。 base64 service_account.json

Spread Sheetsを作成

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の作成

.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

コスト

Cloud Functions - Cloudfunctionsの料金

クォータ

Sheets API - Usage limits

参考

関連