Okta Workflows で、Box ファイルリンクを自動生成し、Slack にポストするサンプル
Okta の Workflows だと UD のユーザ情報を使って云々というようなケースもあるのですが、割と便利だなと思うのは、オーケストレーションに関する認証ロジックをスキップできることにあります。
というわけで Okta Workflows をやってみましょう
- Boxの特定フォルダーにファイルがアップロードされたのをトリガーとして実行
- Box にアップロードされたファイルの共有リンクを作成する(Box API)
- Slack にファイル情報、共有リンクを通知する
Workflow の基本画面が表示されたら、Add Event をクリックします。
②New Connection 画面でDescription を入力し、Create ボタンを押すと、Box への接続許可を求める画面が表示されるので「Boxへのアクセスを許可」ボタンを押します。
④Box API で、アップロードされたファイルの共有リンクを作成していきましょう。
次に Add Function をクリックして、Okta Workflows で最もよく使われる Compose カードを選択し、
/files/ とタイプした後に、左側 Box Upload の Output 部分から File ID を /files/ の後に図のようにドラッグします。
⑤ここまで出来たら一気に共有リンクを作成するとこまで進みましょう。
次のカードで Add Application をクリックし、Box を選択、Action 選択画面で Custome API Action を選択し、Request Type に PUT を選択し Save ボタンを押します。
チェックボックスは以下のようにチェックし Save ボタンを押します。
Inputs
- Request Query
- Request Headers
- Request Body
- Response Status Code
- Response Headers
- Response Body
1つ左の Compose の Output を Relative URL にドラッグし、Query 以下を以下のように入力します。
入力が完了したら、再び Add Function で新しいカードを作成し、Function 選択の左側ペインの下の方にある Advanced の JSON > Parse を選択し、Box Custom API カードの Response Body で入力した shared_link を JSON String 部分にドラッグし、JSON カードの output 部分に url とタイプします。
⑥ここまでで、Box の指定のフォルダーにファイルがアップロードされたら、そのファイルに共有リンクを作成し、作成された url を取得できるところまでできあがりました。
次にこれらの情報を Slack に通知しましょう。
Add Application で新しいカードを作成し Slack を検索し、一番下の方にある Send Message to Channel を選択します。
Slack Connection を実行し、権限付与が完了したら、下記を設定して Save ボタンを押します。
- 通知したいチャンネルを選択
- Send as Bot = YES
- Unfurl URL = YES
- Message Type = Plain text
オプション選択では、チェックボックスは以下のようにチェックし Save ボタンを押します。
Inputs
- Slackbot name
- Slackbot Icon (Emoji)
- Message Timestamp
Send Message to Channel 画面では、Text 部分に Compose の Output をドラッグします。
通知bot の名前を Name に入れ、Icon Emoji に絵文字の名前をセットします。
⑦ここまで出来たら、右上の Save ボタンを押し、ワークフロー一覧に戻り、ON/OFF スイッチを ON にします。
⑧指定したフォルダーにファイルをアップロードすると、Slack に通知されることが確認できます。(アイコンは box のアイコンをアップロードしたものを利用しています)
その他の留意点-1: Box の挙動による重複通知
- Boxのファイルアップローダ経由でのアップロード(この場合ユーザは anonymous になります)
- Boxの自社テナントでアクセス可能な自社ユーザ、外部コラボレーションユーザからのファイルアップロード
- Boxの他社テナントで、外部コラボレーションされているフォルダーへのファイルアップロード(Workflow 作成者がコラボレーション招待されている必要あります)
しかし、Box は同一のファイルをリネームしたり、下位のサブフォルダーに移動したりするだけでも、アップロード通知が行われます。当社では Okta Workflows のテーブルを用いて、同一ファイルの通知がきた場合は無視するようにしていますが、今回のBoxアップロード通知はあくまでもサンプルとしての位置づけですので、スキップするロジックは含まれておりません。
その他の留意点-2: エラーハンドリング
Box API ドキュメント
https://ja.developer.box.com/reference/
Okta Workflows: フローにおけるカードのエラー処理の設定
https://help.okta.com/wf/ja-jp/content/topics/workflows/build/set-error-handling.htm
Okta Workflows: HTTPステータスコード
https://help.okta.com/wf/ja-jp/content/topics/workflows/execute/http-status-codes.htm
その他の留意点-3: デバッグ方法
その他の留意点-4: Slack メッセージ
Blocks を使うと、デザインレイアウトされたメッセージを投稿したり、インタラクティブにボタンをつけたり(OK , Cancel など)、ポップアップのダイアログで独立したアプリケーションのようなものを作成することもできます。当社では上長の承認業務を Slack を通じて承認が行えるワークフローを実現したりもしています。(Okta Workflows ではありませんが)そのため、iPhone の Slack アプリだけで承認ワークフローを素早く処理することができています。
Slack API も遊んでみるとかなり楽しいので、一度 Incomming Hook 辺りから BlockKit と組み合わせてやってみると面白いかもしれません!
Slack API - BlockKit
https://api.slack.com/block-kit
所感
Okta Workflows は Okta での管理業務(プロビジョニング、特定の条件検知によるレポート出力)をオートメーション化することが可能ですが、今回は複数の SaaS アプリケーションの認証を Okta で一元化しているメリットが享受できるユースケースとしてご紹介いたしました。
また、オーケストレーションは 対象アプリが Okta で認証統合されていることでかなりのメリットがある反面、少し複雑なロジックを書こうとしたりすると、横スクロール・シューティングゲームですか並に長くなり、とても視認性が悪く、デバッグも大変になるという特徴があります。自分でプログラムやスクリプト書いちゃった方が早いやというパターンと、Okta Workflows でノーコード自動化するメリットはデザインするときによく考えてから着手くださいね。
あと、Okta として推奨されないユースケース(リアルタイム同期等)、イベント数制限などありますので、下記リンクをご参照いただき、そこら辺もご注意くださいね!
お疲れさまでした!
Workflowsのシステム制限
https://help.okta.com/wf/ja-jp/content/topics/workflows/workflows-system-limits.htm
Okta Workflows
https://help.okta.com/wf/ja-jp/content/topics/workflows/workflows-main.htm