Slackのみで稟議完結
今回作ったもの
Slackとkickflowを用いて、申請者にワークフローサービス(kickflow)を認識させる事なく、稟議を完了させる。
レシピ
トリガー:Slackワークフロー
ワークフロー:kickflow
繋ぎ込み:GoogleAppsScript
作った経緯
・特定部署しかワークフローサービス(kickflow)を利用してない → 稟議ってどうやって起票するんだっけ? → kickflowを使え?どうやってログインするの、どうやって起票するの、どうやって・・・
からの
Slackから稟議が起票できると良いなぁ → 私が作りました
突然、利用してないサービスをいきなり使えと言われても混乱します。
それなら、日常的に利用しているSlackで何とかしたい。
そんな気持ちで作りました。
メリット
・稟議申請者のアクセス先は、Slackのみ(起票→完了まで)
なのでもう迷わない。
人数分のkickflowライセンス買い足しもいらない(小声)。
・承認者もSlackのみで完結(※)
秒速の承認を実現。
※一部、特殊なワークフローを組んだ場合のみ、該当パターンのAPIが作成されていないため、承認者がkickFlowへログインして作業する必要あり(2021/07/01時点)
デメリット
・GASの箇所がボトルネック(エラー吐いても申請者は成否が不明)
そのため、申請が成功したか確認するステップが必要
→弊社では、Slackワークフローにて最初の承認者へ申請アラートを飛ばして漏れを防いでいます。
注意ポイント
今回作ったワークフローは代理申請という形になります。
個人アカウントで発行したトークンを利用するので、全稟議がトークン発行者からの申請と見なされます。
稟議は基本的に「職務権限規程」をベースに作られるため、
”誰が申請したか”
”どの規程をベースとしたワークフローを用いたか”
”誰に承認されたか”
が重要となります。
”誰が申請したか”の部分が全て代理申請となるので、
エビデンスが必要となる稟議には向いておりません。
例えば、秘書さんが役員の経費申請を代理で行うとか
経理が代理申請していた小口現金精算を、本人に申請させるとか
オリジナルワークフロー(規定関係なし)に利用するとか
そんな使い方になるかと。
作ってみよう
では実際に作っていきましょう。
今回は、
申請者はGoogleフォームから申請 → Slackの総務チャンネルに転記 → 記載された情報を元に総務がkickflowで稟議を起票 → 承認完了したら総務がSlackで申請者へ連絡
という流れで運用していた備品購入フローを
申請者はSlackワークフローから申請 → 承認完了 → 申請者のDM(Slack)へ稟議完了連絡
というフローに改善した時の物となります。
細かーく設定を記載すると仕様やAPIが変更された時に、この記事との乖離が大きくなるので、ざっくりベースです。ご了承くださいませ。
やった事は2つ
1:Slackワークフローの作成
2:スプレッドシートのトリガーとGoogleAppsScriptの作成
1:Slackワークフローの作成
作り方については、マニュアルが公式から出てますので、必要項目だけ。
トリガー:アップデートによりショートカットコマンドが見やすい位置にあるので、こちらからSlackワークフローを起動する設定がおススメ。
フォームの作成:稟議申請に必要なデータを入力させる、フォームを作成します。注意ポイントとしては、KickFlowのフィールドとSlackフォームのフィールドが同じ型で作る必要があります。
(とは言っても、現状はSlackフォームで選択できるフィールドタイプが限定的で、kickflow側と同期出来るのでそこまで気にする必要は無いかも)
通知:GASが動かなかった時でも稟議を検知出来る様にするため、「DMか特定チャンネル」にメッセージ投稿する処理を付けておきましょう。
転記するスプレッドシートの選択:転記する先のスプレッドシートを選択し、転記する内容をどの列に入力するのか指定します。
条件
・kickflowのフィールド順序と合わせる
・誰からの申請なのか分かる様に、申請したユーザ名を入力する行を作成
(変数”ショートカット名”をクリックしたユーザ でピックアップ可能)
2:スプレッドシートのトリガーとGoogleAppsScriptの作成
1で作成したSlackワークフローを実行すると、こんな感じにスプレッドシートへ転記されます。
そこでGASを以下の様に書いて、トリガーを「スプレッドシートから - 変更時」に設定。
function Welfare_request() {
//全データを取得するシート情報を取得
var spreadsheet_id = SpreadsheetApp.openById(‘SheetID’);//スプレッドシートID格納
var sheet_name = spreadsheet_id.getSheetByName('sheet_name');//シート名を格納
const lastrow = sheet_name.getLastRow();
const Kick_Data = sheet_name.getRange(lastrow,1,1,5).getValues();
var kickflow_token = "****"; // 発行したKickflow Token
var kickflow_uri = "https://api.kickflow.com/v1/tickets"; //エンドポイントを取得
//payload の設定
const payload = {
"status":"in_progress",
"authorTeamId":"****",
"workflowId":"****",
"slipItems": [],
"inputs":[
{"formFieldCode”:”****,”value":Kick_Data[0][0]},
{"formFieldCode":"****","value":Kick_Data[0][1]},
{"formFieldCode":"****","value":Kick_Data[0][2]},
{"formFieldCode":"****","value":Kick_Data[0][3]},
{"formFieldCode":"****","value":Kick_Data[0][4]}
],
};
//paramの設定
const kick_params = {
'method' : 'post',
'contentType' : 'application/json',
'payload' : JSON.stringify(payload),
"headers": {
Authorization: "Bearer " + kickflow_token
}
};
//リクエストの処理
var kick_response = UrlFetchApp.fetch(kickflow_uri,kick_params);
}
これだけ。
後は承認者がSlack上で承認するのみ。
テスト運用が成功しただけで、リリースはこれからなのですが、これで総務や申請者の負担が減れば良いな、と思ってます。
以上です。
この記事が気に入ったらサポートをしてみませんか?