本記事は リンクアンドモチベーション Advent Calendar 2024 の15日目です🎄
思い立ち
「システムの操作権限を一時的に付与したいなー、でもガッツリ作り込むのは嫌だなー」
最近、こんなことを思ってました。
操作権限の付与自体は、大体のシステム側のGUIがしっかりしているので「ボタン ポチッ」でできますよね。
じゃあその導線を準備してあげて、操作権限の剥奪だけ自前で作ろうとなりました。
(決してサボりたかったとかではありませんよ?)
この時Slack ワークフローで使える値に知らない部分がいくつかあったので備忘がてら紹介します。
(無効化プロセスの方はまたの機会にでも)
そもそもSlack ワークフローについて
知っている人は読み飛ばしてください。
Slack ワークフローは、Slack上で日常的なタスクやプロセスを自動化するための機能です。
例えば、
- 定期的な報告: 毎日、週ごと、月ごとに特定のチャンネルに報告を投稿する
- タスクの割り当て: 新しいタスクが発生した際に、担当者に通知を送る
- 承認プロセス: 申請や承認のプロセスをSlack上で完結させる
- アンケート: チームメンバーに対してアンケートを実施し、結果を集計する
など、様々なことを自動化できます。
個人的には、馴染みのアプリケーションと連携が容易にできるようになっていて、上記の機能をコンパクトにできる点が好みです。
(Slackに来たアラートに対して、すぐにgit issue作ったりとか)
本題
Slack ワークフローには結構な種類のフォームがあってカスタムアプリとか作んなくてもそれなりの情報を持ってます。
例えばタイプがSlack ユーザーの場合(ワークフロー起動者とかでも)、以下の情報を取得しています。
- 表示名(メンションあり)
- ユーザーID(メンションあり)
- 表示名
- ユーザーID
- 氏名
- Eメール
この辺の情報、関数を使って表示されてまして
Eメールだと以下のような形でuser_idから取得してます。
{{{slack.user_email(user_id={xxxx})}}}
他にも日時形式では以下のようなことができます。
## 日付をM月d日で表示したいとき
{{{time.format(seconds={{inputs.Ft0856UQ2V2Q__event_timestamp}}, timezone=Asia/Tokyo, locale=ja-JP, dateType=DATE_WITH_ORDINAL_MONTH_YEAR_HOUR_MINUTE_AMPM_TZ,format='M月d日')}}}
## 日時まで表したいとき
{{{time.format(seconds={{inputs.Ft0856UQ2V2Q__event_timestamp}}, timezone=Asia/Tokyo, locale=ja-JP, dateType=DATE_WITH_ORDINAL_MONTH_YEAR_HOUR_MINUTE_AMPM_TZ,format='M月d日 HH:mm')}}}
これらを使って、ボタンに埋め込むリンクを工夫できます
## 別のアプリケーションのユーザーリンクにする
https://your-redash-instance.com/api/users?q={slack.user_email(user_id={{inputs.Ft0856UQ2V2Q__user_id}})}
## 別のアプリケーションの日付検索リンクにする
https://qiita.com/search?sort=&q=created%3E={time.format(seconds={{inputs.Ft0856UQ2V2Q__event_timestamp}}, timezone=Asia/Tokyo, locale=ja-JP, dateType=DATE_WITH_ORDINAL_MONTH_YEAR_HOUR_MINUTE_AMPM_TZ,format='Y-M-d')}
他にも色々ありそうなものですが、そもそもuser_email()とか関数記述が公式にはなかったのでワークフロー専用の関数かもしれませんね。
最後に
記事を読んでくださりありがとうございました!
今後もちょっと楽になるものをサボりながら日常的に作っていこうと思います!
参考
- ワークフローを作成する : Slack でワークフローを作成する
- Slack platform overview
- redash ※今回付与対象のシステムとして使用しました