LoginSignup
4
0

More than 3 years have passed since last update.

Slackのremindに書いてあるヘルプ内容が分かりづらいので/remind_helpを作った話

Last updated at Posted at 2020-07-10

はじめに

Slackの/remindコマンドを使う機会が結構あると思うのですが、公式のhelpがイマイチ解りづらいので非公式ヘルプを表示するスラッシュコマンドを作ってみました。
ことの発端は弊社のPM(プロダクトマネージャ)からの一言「remindって便利だけど毎回使い方ググるんですよね(意訳」でした。

スラッシュコマンドとは

/remind/polly/me など / から始まるコマンドのことです。

スラッシュコマンドの例
image.png

スラッシュコマンドの実装について

前提

  • Googleのアカウント(G Suiteも可)を持っていること
  • Slackのアカウントを持っていること

スラッシュコマンドの実行環境について

今回は気軽にスラッシュコマンドを使う基盤としてGoogleAppScript(以降GAS)を選択しました。
GASと実行される流れについてはこちらの記事にまとまっているので細かく知りたい方は見てみて下さい。
※大体の人が再現できるように、導入しやすい基盤を選んだつもりです。

GASの事前設定

プロジェクトの作成

https://script.google.com を開いて自分のプロジェクトページを表示します。
※Googleアカウントにログインしている必要があります
image.png

新しいプロジェクトをクリックして、プロジェクトの設定を行います。
image.png

プロジェクト名と主なコードの記述

以下を入力します。

  • プロジェクト名: 任意(例: 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);
}

公開設定

  1. ウェブアプリケーションとしての導入をクリックする image.png
  2. 以下の通り公開設定を行う ※初回更改時は導入 または Deployと表示されます image.png
  3. APIのURLが生成されるのでメモしておく image.png

Slack Appを作る

  1. https://api.slack.com/appsにアクセスする
  2. Create an Appボタンを押す image.png
  3. 以下の情報を入力する
    • App Name
      • remind_help
    • Development Slack Workspace
      • remind_helpを導入したいワークスペース
  4. Create Appボタンを押す image.png
  5. Basic Informationが表示されるのでSlash Commandsをクリックする image.png
  6. Slash Commandsが表示されるのでCreate New Commandボタンを押す image.png
  7. 以下の情報を入力する
  8. Saveボタンを押す image.png
  9. Basic InformationAdd features and functionalityにチェックが入っていることを確認する image.png
  10. Install your app to your workspaceを展開し、Install App to Workspaceボタンを押してワークスペースに追加する image.png
  11. 許可するボタンを押す image.png

ここまででSlack App側の設定は一通り完了です。

Slack Appの見た目を変える

Basic InformationDisplay Informationからついでに見た目を変えておくとよいかもしれません。
image.png

セキュリティ(Verification Token)の設定

そのままだと誰でもAPIのURLを知っていれば実行できてしまうので、最低限のセキュリティ設定としてGASVerification Tokenを設定します。

  1. Slack AppBasic InformationページにあるApp Credentialsの項目を確認する
  2. Verification Tokenの項目をメモする image.png
  3. 事前に作成したGAS側にトークン情報を書き込む
function doPost(e) {
  var VerificationToken = e.parameter.token;
  // AppのVerification Tokenを入れる。複数ワークスペースに登録する場合は判定条件を増やす。
  if (VerificationToken != 'トークン') {
    throw new Error('Invalid token');
  }
  1. ウェブアプリケーションとしての導入をクリックする image.png
  2. Project VersionNewに設定して更新ボタンを押す image.png
  3. OKボタンを押す image.png

ここまででスラッシュコマンドの設定は完了です。

/remind_helpコマンドのメッセージ

  1. /remind_help コマンドを実行する
  2. 以下の通りヘルプが表示されます。 image.png

Tips

複数のワークスペースから実行する場合、以下の通りVerification Tokenを複数設定することで複数ワークスペースによる実行も可能です。

function doPost(e) {
  var VerificationToken = e.parameter.token;
  // AppのVerification Tokenを入れる。複数ワークスペースに登録する場合は判定条件を増やす。
  if (VerificationToken != 'トークン1' && VerificationToken != 'トークン2') {
    throw new Error('Invalid token');
  }

参考リンク

以下の記事を参考にしているので、途中でなにか詰まったら以下の記事を読んでみると解決するかもしれません。

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0