Gluegent Flow 外部システム実行とSlackの連携 ~ チャンネル作成編~
みなさん、こんにちは。 せしょうです。
本日は、Gluegent Flowの外部システム実行を使って、Slackのチャンネルの作成を行おうと思います。
今回説明する方法では、パブリックチャンネル・プライベートチャンネルどちらの作成にも対応しています。
ただし、今回の作成方法は、ボット(Slack App)に権限を持たせて、そのBotにチャンネルの作成を行ってもらうので、ユーザーの招待までがセットになっています。(プライベートチャンネルを作ったのに、そのプライベートの権限を持っているのはボットのみ... なんてことにならないためにも)
外部システム実行は、可能性は無限大!ということで、みなさんもぜひぜひ使ってみてください。
※なお、今回の外部システム実行を使ってSlackチャンネルを作成する処理は サポート対象外です。
目次
- 目標
- Slack Appの作成とインストール
- 今回使用するモデルの全体像
- 今回使用するモデルの詳細
- 実際の流れ
- おすすめ
- まとめ
目標
今回、外部システム実行で Slack チャンネルを作成するに当たっての目標は以下の通りです。
作成するチャンネル名と 招待するユーザーを 入力して 申請すると、外部システム実行で それらを自動的に行ってくれるというものを目標とします。
(イメージ図)
なお、今回 Bot Token Scopesで行うため、チャンネル作成 + メンバーの追加までを行います。
もし、プライベートで作成した場合 誰も参加できなくなるため、それを防ぐために「メンバーの追加」経路を用意してあります。
タスクの流れとしては以下の通りです。 入力が必要な経路は 申請のみとしています。
- 申請:以下の項目を入力
- チャンネル名
- チャンネルの種類
- ユーザー(Slack Member ID)
- 複数追加する場合は、「,」でつなぐ
- チャンネルの作成:申請内容に問題が無ければ、外部システム実行で チャンネルの作成
- メンバーの追加:チャンネルの作成に成功したら、ユーザーの追加
- 確認: チャンネルの作成とメンバーの追加に成功していたら、確認して終了
記事自体は、出来るだけ詳細に説明するために長いですが、 やっていること大まかに以下の2点ですので、気楽に試してみていただけると幸いです。
- Slack Appの作成・インストール
- Gluegent Flowで モデルを作成する (外部システム実行を二つ作る)
Slack Appの作成とインストール
-
Create New Appを選択
-
From Scratch を選択 > 以下入力後 「Create App」
-
App Name: 適当に (後で変更可)
-
workspace: 使用したいSlackのワークスペース
-
-
-
権限を付与する
-
Features > OAuth & Permissionsへ移動する
-
下にスクロールして Scopes > Bot Token Scopesに移動
-
Add an OAuth Scope から以下を追加する
-
プライベートチャンネル
-
groups:write ⇦ プライベートチャンネルを作成するときに必要な権限
-
groups:write.invites ⇦ プライベートチャンネルにユーザーを招待するときに必要な権限
-
-
パブリックチャンネル
-
channels:manage ⇦ パブリックチャンネルを作成するときに必要な権限
-
channels:write.invites ⇦ パブリックチャンネルにユーザーを招待するときに必要な権限
-
-
両方作るとき、i, ii の4つ全ての権限を付与する (今回の例では こちらを使用する)
-
例) パブリック・プライベートチャンネル両方に対応
-
ワークスペースにインストールをする
-
Settings > Install App へ移動
-
-
「Install to Workspace」を選択
-
権限をリクエストを許可する
-
※権限がない場合は、管理者に許可をしてもらう。
-
-
許可されアプリがインストールされると、 OAuthTokens for Your Workspaceに Bot User OAuth Token が作成される
-
このTokenの値は、 また Gluegent Flowの作成するモデルの入力フォームで使用します。
-
xoxb-.... から始まる値
-
後でもコピー可能
-
-
お疲れ様です。
以上で チャンネル作成 & ユーザー招待をするためのアプリが作成完了しました。
次はこのアプリを Gluegent Flowの外部システム実行で動かしましょう。
※ 使用する Slack API
- channelの作成 (conversations.create)
- channelに招待 (conversations.invite)
今回使用するモデルの全体像
経路
目標と準備 で書いた流れと同様。「チャンネルの作成」・「メンバーの追加」の経路で自動処理を追加します。 詳しいことは、 モデルの詳細に記載してあります。
入力フォーム
申請者に入力してもらうフォームに加え、プライベートorパブリックチャンネルどちらを作るかを判定するための「is_private」や 自動処理の結果を受け取るための入力フォームなどを今回作ります。
一見多そうですが、 必要な理由を理解できればスムーズに作れると思います。
今回使用するモデルの詳細
管理者だけが編集可能とする(推奨) 自動処理で使用する 入力フォーム
-
token: 必須
-
単行テキストで作成
-
Slack Appの作成とインストールで 作成された Bot User OAuth Tokenをコピーして 初期値に入力
-
「チャンネルの作成」「メンバーの追加」両方の自動処理で使用する
-
全ての経路で 非表示 にすること推奨
-
team_id: 必須
-
単行テキストで作成
-
該当するteam idを初期値に入力
-
team idの取得方法
-
-
- 「チャンネルの作成」の自動処理で使用する
- 全ての経路で 非表示 にすること推奨
申請
入力フォーム
- チャンネル名: 必須
- 単行テキスト
- 申請のみ 編集可能 それ以外の経路は 表示
- チャンネルの種類: 必須
- 単一チェック
- ユーザーにパブリック・プライベートチャンネルどちらを作るか選択してもらう
- 申請のみ 編集可能 それ以外の経路は 表示
- is_private: 必須
- カスタムラベル
- チャンネルの種類で、ユーザーが publicを選んだら false、 privateを選んだら trueを返す。
- 「チャンネルの作成」の自動処理で使用する
- 個別設定 コピー用
if (${チャンネルの種類} == "private") {
return true;
}
return false;
- ユーザー(Slack Member ID): 必須
- 単行テキスト
- 申請のみ 編集可能 それ以外の経路は 表示
- 「メンバーの追加」の自動処理で使用する
- 招待したいユーザーの Slack IDを入力してもらう
- メンバー IDの取得方法
- 個別のメンバーIDの取得方法
- *ユーザーのアイコンを選択 > 三点リーダーを選択 > メンバーIDをコピーを選択
- 複数メンバーのIDをまとめて取得する方法 は、メンバーIDの取得方法を確認してください。
- 個別のメンバーIDの取得方法
- メンバー IDの取得方法
- 複数ユーザーを招待したいとき、ユーザーIDの間を「,」で区切る
- 例) Uxxxxxx, Uyyyyy
(* ユーザーのアイコンを選択 > 三点リーダーを選択 > メンバーIDをコピーを選択)
チャンネルの作成
使用する入力フォーム
既に説明済み
- token
- team_id
- チャンネル名
- is_private
新規
- create_channel_status: 任意
- 単行テキスト
- 「チャンネルの作成」の自動処理で使用する
- 成功したら、 「true」 失敗したら 「false」が入る
- create_channel_error: 任意
- 単行テキスト
- 「チャンネルの作成」の自動処理で使用する
- 自動処理が失敗した際に、エラー内容が入る
- エラー内容は、conversations.createを参照
- 次のメンバーの追加 で表示すると失敗した原因が分かるため 表示推奨
- channel_id: 必須
- 単行テキスト
- 「チャンネルの作成」「メンバーの追加」両方の自動処理で使用する
- 自動処理が成功した場合、作成したチャンネルのIDが返ってくる
自動処理
チャンネルを作成するためのAPI (conversations.create)
コピー用に各値を、記事の最後に記載
メンバーの追加
使用する入力フォーム
既に説明済み
- token
- channel
- users
新規
- invite_user_status: 任意
- 単行テキスト
- 「メンバーの追加」の自動処理で使用する
- 成功したら、 「true」 失敗したら 「false」が入る
- invite_user_error: 任意
- 単行テキスト
- 「メンバーの追加」の自動処理で使用する
- 自動処理が失敗した際に、エラー内容が入る
- エラー内容は、conversations.inviteを参照
- 次の確認 で表示すると失敗した原因が分かるため 表示推奨
自動処理
ユーザーをチャンネルに招待するためのAPI (conversations.invite)
コピー用に各値を、記事の最後に記載
以上で、Flowのモデル作成も終了です。
お疲れ様でした。これで、チャンネル作成と メンバーの追加までを Flowでのモデル化が完了しました。
あとは、こちらのモデルを使ってみて不具合がなければOKです。
実際の流れ
申請
入力フォームに必要な内容を書いて、申請
チャンネルの作成
申請された内容を確認し問題が無ければ承認 (チャンネルの作成 自動処理を実行)
メンバーの追加
チャンネルが無事作成されたことを確認したら、承認 (メンバーの追加 自動処理を実行)
確認
エラーが出てないことを確認し、またユーザーがチャンネルに入っていることが確認出来たら終了
以上が 全体の流れです。
エラーが出た際は、 各errorの部分に エラーになった理由が表示されます。
今回の場合は、既にチャンネル名が存在している事によるエラーです。
エラーの内容は、以下のサイトに書かれているので、それを参照して修正後 再度申請してください。
- チャンネルの作成:conversations.create
- メンバーの追加:conversations.invite
おすすめ
本記事では、 チャンネルの作成とユーザーの招待を同じ申請でまとめて行いましたが、実際のところユーザーのIDが違ったなどで、確認部分で失敗した場合に また最初から申請する羽目になるため、チャンネルの作成とメンバーの追加の申請を二つに分ける もしくは、タスクを分けてしまった方がいいと思います。
また、実行結果の確認も 実行者が確認することをおすすめします。
【おすすめ 経路 例】
- チャンネル作成 申請
- チャンネル作成 実行
- チャンネル作成 結果確認
- メンバーの追加 申請
- メンバーの追加 実行
- メンバーの追加 結果確認
確認
また、 各結果確認にてStatusを見てのボタン表示切替があると 失敗した際に間違えて承認ボタンを押すミスを防げると思うのでこちらも 設定しておくことをおすすめします。
経路 > 【指定した経路】 > ボタン表示切替
例) チャンネル作成 結果確認
有効・無効を切り替える
チャンネルの作成 結果確認
if (${create_channel_status}) {return true;}return false;
メンバー追加 結果確認
if (${invite_user_status}) {return true;}return false;
まとめ
今回は、外部システム実行とSlack Appを組み合わせて Slack チャンネルを作成する方法について書かせていただきました。
この記事の方法についてはサポート対象外ですが、外部システム実行を使えばこんなこともできるよ!と知っていただき、また皆様の参考になりましたら幸いです。
読んでいただきありがとうございました。
外部システム実行は、可能性は無限大!
(せしょう)
その他
Slack メンバーIDの取得方法
-
Slack の左上のアイコンを選択
-
設定と管理 > メンバーを管理するを選択
-
メンバー管理のサイトから、通常メンバーのリストをエクスポートするを選択
-
csvがエクスポートされる。 その中にSlackのメンバーIDの一覧が入力されている。
コピー用
【チャンネルの作成】
-
自動処理の名前
-
任意
-
URL
-
HTTPメソッド
-
POST
-
コンテンツの種類
-
application/x-www-form-urlencoded
-
パラメーター
-
name: 必須
-
${チャンネル名}
-
team_id: 必須
-
${team_id}
-
is_private: 必須
-
${is_private}
-
token: 必須
-
${token}
-
レスポンス形式
-
JSON
-
レスポンス
-
json.ok
-
create_channel_status
-
json.error
-
create_channel_error
-
json.channel.id: 必須
-
channel_id
【メンバーの追加】
-
自動処理の名前
-
任意
-
URL
-
https://slack.com/api/conversations.invite
-
HTTPメソッド
-
POST
-
コンテンツの種類
-
application/x-www-form-urlencoded
-
パラメーター
-
channel: 必須
-
${channel_id}
-
users: 必須
-
${ユーザー(Slack Member ID)}
-
token: 必須
-
${token}
-
レスポンス形式
-
JSON
-
レスポンス
-
json.ok
-
invite_user_status
-
json.error
-
invite_user_error