みなさん、こんにちは!shunsukeです。
お久しぶりです。
全然ブログ書いていませんでしたので、小さな機能でも作ったら書いていこうと思い、久々に執筆します。
今回作ったものは?
Slack上で自分のタスクにしたいメッセージをリアク字一発で簡単に追加する機能を作りました!
というか前に作ったのを忘れて3ヶ月ほど放置してたんですが、思い出したので書きました!って内容です。
Slack中心の生活をしてると、日々発生するタスクを起票するのとか大変じゃないですか?
タスク管理ツール開いて、タイトル入れて内容入れてー…etcするの面倒。。。
あとで登録しとこーと思って、放置して…まぁほとんど忘れちゃいますよね。
退かぬ!媚びぬ!省みぬ!な某聖帝なら良いんですが、残念ながら僕らは一般人なので
タスク起票忘れちゃう問題はどうにか解決したいものです。
5月某日
?:顧客の問い合わせチケット管理機能(*)あるやん?あれ、同じ感じで個人のタスクに追加できるようにできる?
自分:出来ますよー
↓
自分:できましたー
?:ありがとー
時は流れ、8月某日
?:最近忙しくてチケット起票漏れが多発しとる…これはかなり問題だなー
?:あっ 個人タスク起票つーかお
自分:あっそういえばそんなの作りましたね
?:クラウドネイティブのみんなー、これ便利だよー
みんな:\( ‘ω’)/ウオオオオオオアアアアーーーーッッッ!!!!
(*)チケット管理機能の話
- WorkatoでSlackの発言をリアク字トリガーでAzure DevOpsへチケット起票する(弊社ブログ)
- ※現在Azure DevOpsは使っていません。AsanaというSaaSに変えております。
使い方
- Slackのメッセージにリアクションをつける(ユーザー操作)
- Workato発火(自動)
- チケット管理ツールのマイタスクに追加(自動)
- Slackの対象メッセージのスレッドにURLをはかせる(自動)
以上。ユーザー操作はリアクションつけるのみ。
動作イメージ
まずは起票したいメッセージにリアクションをつける

すると、Workatoが動き出して、スレッドにレスポンスがくる

URLを押下すると、自分の個人タスクボードにいき問題なく起票されてることがわかる

レシピの作り方
トリガーの設定

Step1:リアクションの定義をします。
ここでは「mytask」というリアクションが押されたらトリガーが発火します。
※1:もちろんチャンネルも絞ることができます。
※2:もしリアクションを絞らない場合、全てのリアクションで発火してしまい大変なことになりますので注意してください。
アクション設定
これから下はアクションの説明です。
今回Slackのアクションはほぼカスタムアクションを利用しています。
カスタムアクションとはWorkatoで標準で用意していないアクションの場合、利用したいAPIを調べて自分で設定ができるものです。
詳しくは弊社のブログでより詳しく説明していますので、そちらもご確認ください。
Workato:標準アクションがない?カスタムアクションを作ればいいじゃない
SlackのApi methodのURL、設定項目、ポイントも含めて説明していきます。
Step2:App Botを自動的に追加

設定した目的↓
- チャンネルにBotが居ないと後続のアクションで実行出来ないケースがある
- チャンネルにApp Botを自動的に入れたい。
- 手動で入れるの面倒
設定値↓

ポイント↓
- 参考Slack API method URL
- 必要なスコープ
- Bot tokens → channels:join
- User tokens → channels:write
- inputのchannelはリアクションが押されたチャンネルのデータピルを設定してあげる
Step3:押した人の情報を取得

設定した目的↓
- マイタスクに追加するためにUser情報を取得するため
- 欲しい情報はメールアドレス
設定値↓

ポイント↓
- 参考Slack API method URL
- 必要なスコープ
- Bot tokens → users:read
- User tokens → users:reag
- inputのuserはリアクションが押された人のデータピルを設定してあげる
Step4:リアクションされた投稿のリンクを取得する

設定した目的↓
- タスク管理ツールの内容の部分にリンクを入れるため
- これ何で出てきたんだっけ?ってなった時にすぐ飛べるようにするため
設定値↓

ポイント↓
- 参考Slack API method URL
- 必要なスコープ
- Bot tokens → 特になし
- User tokens → 特になし
- inputのMessage tsはリアクションが押されたtsでなく、対象メッセージのtsを選択してください
Step5:投稿されたチャンネル名を取得する

設定した目的↓
- タスク管理ツールのタイトルに入れるため
設定値↓

ポイント↓
- 参考Slack API method URL
- 必要なスコープ
- Bot tokens → channels:read、groups:read、im:read、mpim:read
- User tokens → channels:read、groups:read、im:read、mpim:read
- inputのchannelはリアクションしたチャンネルであれば、どこのデータピルを使ってもいいです
Step6:メッセージ内容を取得

設定した目的↓
- タスク管理ツールの内容の部分に入れるため
- パーマリンクのapiでは取得できなかったからこのapiを使いました
設定値↓

ポイント↓
- 参考Slack API method URL
- 必要なスコープ
- Bot tokens → channels:history、groups:history、im:history、mpim:history
- User tokens → channels:history、groups:history、im:history、mpim:history
- inputのMessage tsはリアクションが押されたtsでなく、対象メッセージのtsを選択してください
Step7:Asanaに存在するUserを取得する

設定した目的↓
- タスク管理ツールのユーザーを探すため
- アサイン時にIDが必要なため
設定値↓

ここは設定は特にありません。
Step8:ユーザーリストをループさせる

設定した目的↓
- 7のアクションはUser Listが返ってくるのでループ処理させる
- このあとの条件分岐で使うための前準備したいなもの
設定値↓

ポイント↓
7で返ってきたリストを選択してあげる
Step9:リアク字をしたUserを条件分岐で探す

設定した目的↓
- ループされたユーザーのEmailとステップ3で取得したリアクションしたユーザーのEmailで一致するか条件分岐を使って探すため
- 一致ならYes、一致しなければNoに後続のアクションをおこなっていく
設定値↓

上を参考に設定してください
Step10:タスク管理ツールのマイタスクに起票する

設定した目的↓
- マイタスクに作成するため
設定値↓

ポイント↓
Workspace IDはあらかじめ知っておく必要があります。
ここは固定なので、特にアクションを入れませんでした。
- projects:空欄で大丈夫(マイタスクに入れるため不要)
- Due on:期日設定を任意で入れてます(空欄の場合は空欄で作成されます)
- Task name:ここではステップ5で取得したチャンネル名を入れてます
- Description:ステップ4と6で取得したURLとテキストを設定してあげます
- Assignee ID:ステップ8一致したユーザーをアサインされるように設定してあげます
Step11:作成後のタスクURLをレスポンスさせる

設定した目的↓
- 作成した後のレスポンスがあった方が安心なため
- 簡単にタスクの確認ができるようにするため
設定値↓

ポイント↓
ここでのアクションはWorkato標準で用意されてるPost messageでいいと思います。
channel:リアクション押されたチャンネルを設定してください
Notification text:タスクのURLを投下してあげるように設定しました
Advanced:Thread ID:ここはリアクションが押されたtsでなく、対象メッセージのtsを選択してください
以上です。
最後に
今回はSlackから簡単にタスク作成ができる機能を実装しました。
これから機能追加として、以下を実装していこうと考えています。
- 特定のチャンネルで動作する場合、特定のAsanaボードにタスクを追加
- タイトルをもっとかっこよくする(現状チャンネル名になってる)
- タグとかも自動的につくようにする
以上、ありがとうございました!
少しでもこのブログを読んで、皆様のお力になれればなと思います。