はじめに
Slackの/remind
コマンドを使う機会が結構あると思うのですが、公式のhelpがイマイチ解りづらいので非公式ヘルプを表示するスラッシュコマンドを作ってみました。
ことの発端は弊社のPM(プロダクトマネージャ)からの一言「remindって便利だけど毎回使い方ググるんですよね(意訳」でした。
スラッシュコマンドとは
/remind
や /polly
、 /me
など /
から始まるコマンドのことです。
スラッシュコマンドの実装について
前提
- Googleのアカウント(G Suiteも可)を持っていること
- Slackのアカウントを持っていること
スラッシュコマンドの実行環境について
今回は気軽にスラッシュコマンドを使う基盤としてGoogleAppScript(以降GAS)
を選択しました。
GAS
と実行される流れについてはこちらの記事にまとまっているので細かく知りたい方は見てみて下さい。
※大体の人が再現できるように、導入しやすい基盤を選んだつもりです。
GASの事前設定
プロジェクトの作成
https://script.google.com を開いて自分のプロジェクトページを表示します。
※Googleアカウントにログインしている必要があります
新しいプロジェクト
をクリックして、プロジェクトの設定を行います。
プロジェクト名と主なコードの記述
以下を入力します。
- プロジェクト名: 任意(例: remind_help)
- main.gs: 以下のコードを入力する
function doPost(e) {
var VerificationToken = e.parameter.token;
// AppのVerification Tokenを入れる。複数ワークスペースに登録する場合は判定条件を増やす。
if (VerificationToken != '※後で設定するトークン※') {
throw new Error('Invalid token');
}
var response_japanese = { text: '*/remind コマンドの基本フォーマット*\n\
```\n\
/remind [どの部屋で] [誰に] [メッセージ本文(必須)] [いつ(必須)]\n\
```\n\
`※[メッセージ本文]と[いつ]は順番を入れ替えても大丈夫です。`\n\
*[どの部屋で(任意)]*\n\
```\n\
#チャンネル名\n\
```\n\
*[誰に(任意)]*\n\
```\n\
@誰か or me(自分のみに通知したい場合)\n\
```\n\
`※メンショングループは指定できません。`\n\
*[メッセージ本文(必須)]*\n\
```\n\
メッセージ本文を書きます。\n\
```\n\
*[いつ(必須)]*\n\
```\n\
時刻、日付、何分後、曜日指定などを選んだり組み合わせて指定できます。\n\
・時刻指定 … at hh:mm (例:at 10:00)\n\
・日付指定 … on month day(例:on January 1)\n\
・時刻・日付指定 … (例:on January 1 at 10:00)\n\
・n(分〜ヵ月)後指定 … in number [minutes|hours|days|months] (例:in 3 minutes)\n\
・曜日指定 … every [weekday|monday|tuesday|wednesday|thursday|friday|saturday|sunday](例:every monday)\n\
・複数曜日指定 … (例:evry monday, and friday)\n\
```\n\
*設定例*\n\
```\n\
/remind me 明日インフラ神様にランチ代返す\n\
/remind #テスト部屋 週次定例始めます every monday at 11:00\n\
/remind #テスト部屋 @here 月初定例始めます on January 1 at 11:00\n\
```\n\
' };
return ContentService.createTextOutput(JSON.stringify(response_japanese)).setMimeType(ContentService.MimeType.JSON);
}
公開設定
Slack Appを作る
- https://api.slack.com/appsにアクセスする
-
Create an App
ボタンを押す - 以下の情報を入力する
- App Name
- remind_help
- Development Slack Workspace
- remind_helpを導入したいワークスペース
- App Name
-
Create App
ボタンを押す -
Basic Information
が表示されるのでSlash Commands
をクリックする -
Slash Commands
が表示されるのでCreate New Command
ボタンを押す - 以下の情報を入力する
- Command
- /remind_help
- Request URL
- Short Description
- details of /remind help
- Usage Hint
- [Enter]
- Command
-
Save
ボタンを押す -
Basic Information
でAdd features and functionality
にチェックが入っていることを確認する -
Install your app to your workspace
を展開し、Install App to Workspace
ボタンを押してワークスペースに追加する -
許可する
ボタンを押す
ここまででSlack App
側の設定は一通り完了です。
Slack Appの見た目を変える
Basic Information
のDisplay Information
からついでに見た目を変えておくとよいかもしれません。
セキュリティ(Verification Token)の設定
そのままだと誰でもAPIのURLを知っていれば実行できてしまうので、最低限のセキュリティ設定としてGAS
にVerification Token
を設定します。
-
Slack App
のBasic Information
ページにあるApp Credentials
の項目を確認する -
Verification Token
の項目をメモする - 事前に作成した
GAS
側にトークン情報を書き込む
function doPost(e) {
var VerificationToken = e.parameter.token;
// AppのVerification Tokenを入れる。複数ワークスペースに登録する場合は判定条件を増やす。
if (VerificationToken != 'トークン') {
throw new Error('Invalid token');
}
ここまででスラッシュコマンドの設定は完了です。
/remind_helpコマンドのメッセージ
Tips
複数のワークスペースから実行する場合、以下の通りVerification Token
を複数設定することで複数ワークスペースによる実行も可能です。
function doPost(e) {
var VerificationToken = e.parameter.token;
// AppのVerification Tokenを入れる。複数ワークスペースに登録する場合は判定条件を増やす。
if (VerificationToken != 'トークン1' && VerificationToken != 'トークン2') {
throw new Error('Invalid token');
}
参考リンク
以下の記事を参考にしているので、途中でなにか詰まったら以下の記事を読んでみると解決するかもしれません。
- Slash CommandsとGASでSlackのオリジナルコマンドをつくる