この記事はオルターブース Advent Calendar 2021の12日目の記事です。
Teamsをプログラムから操作する際、何かと必要になるチームIDをチャネルIDをLogic Appsで取得してみます。 このブログでご紹介するLogic Appsの全景は次ようになります。
Logic Apps作成
チーム名とチャネル名をLogic Appsに渡したら、チームIDとチャネルIDが返ってくるLogic Appsを作成します。
Logic AppsのHTTP要求の受信時トリガーを利用します。
HTTPポストでチーム名とチャネル名を受け取ります。
スキーマは次のようになります。
{ "properties": { "channelName": { "type": "string" }, "teamName": { "type": "string" } }, "type": "object" }
変数を初期化するアクションで変数を用意します。後ほど取得したチームIDとチャネルIDを格納します。
チームの一覧表示アクションでチーム一覧を取得します。
チームの一覧表示アクションの結果をJSONの解析アクションで解析します。
スキーマは次のようになります。
{ "items": { "properties": { "classification": {}, "description": { "type": "string" }, "discoverySettings": {}, "displayName": { "type": "string" }, "funSettings": {}, "guestSettings": {}, "id": { "type": "string" }, "internalId": {}, "isArchived": { "type": "boolean" }, "memberSettings": {}, "messagingSettings": {}, "specialization": {}, "visibility": {}, "webUrl": {} }, "required": [ "id", "displayName", "description", "internalId", "classification", "specialization", "visibility", "webUrl", "isArchived", "memberSettings", "guestSettings", "messagingSettings", "funSettings", "discoverySettings" ], "type": "object" }, "type": "array" }
取得したチーム一覧をJSON解析した結果は次のようになります。各チーム情報が
body
リストに存在します。チーム情報にチームIDもid
として存在します。{ "body": [ { "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "createdDateTime": null, "displayName": "チーム名", "description": "チームの説明", "internalId": null, "classification": null, "specialization": null, "visibility": null, "webUrl": null, "isArchived": false, "isMembershipLimitedToOwners": null, "memberSettings": null, "guestSettings": null, "messagingSettings": null, "funSettings": null, "discoverySettings": null },
body
リストをFor Eachアクションでループします。body
リストからチーム名と一致するチームIDを取り出すためにループします。ループは逐次処理となるように設定します。
- コンカレンシー制御
有効
- 並列処理の次数
1
- コンカレンシー制御
条件アクションでIF判定をおこないます。
チーム情報の
displayName
とHTTPポストのteamName
が一致するか判定します。条件アクションの結果がTrueの場合
チーム名が一致するため処理続行します。
条件アクションの結果がFalseの場合
一致するチーム名が存在しないため処理終了です。
条件アクションの結果がTrueの場合
チーム情報の
id
からチャネルの一覧アクションでチャネル一覧を取得します。取得したチャネル一覧をJSONの解析アクションで解析します。
スキーマは次のようになります。
{ "items": { "properties": { "displayName": { "type": "string" }, "email": { "type": "string" }, "id": { "type": "string" }, "webUrl": { "type": "string" } }, "required": [ "id", "displayName", "email", "webUrl" ], "type": "object" }, "type": "array" }
取得したチャネル一覧をJSON解析した結果は次のようになります。各チャネル情報が
body
リストに存在します。チャネル情報にチャネルIDもid
として存在します。{ "body": [ { "id": "xx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx@thread.skype", "createdDateTime": "2019-07-08T03:17:49.353Z", "displayName": "チャンネル名", "description": "チャネルの説明", "isFavoriteByDefault": null, "email": "", "webUrl": "https://teams.microsoft.com/l/channel/xxx", "membershipType": "standard" }, ...
body
リストをFor Eachアクションでループします。body
リストからチャネル名と一致するチャネルIDを取り出すためにループします。ループは逐次処理となるように設定します。
- コンカレンシー制御
有効
- 並列処理の次数
1
- コンカレンシー制御
条件アクションでIF判定をおこないます。
チャネル情報の
displayName
とHTTPポストのchannelName
が一致するか判定します。条件アクションの結果がTrueの場合
チャネル名が一致するため処理続行します。
条件アクションの結果がFalseの場合
一致するチャネル名が存在しないため処理終了です。
条件アクションの結果がTrueの場合
チームIDとチャネルIDを特定できたので、取得したチームIDとチャネルIDを格納します。
HTTPレスポンスアクションでチームIDとチャネルIDをHTTPポストのレスポンスとして返します。
Logic Appsを保存します。
動作確認
Logic Appsを保存するとHTTP要求の受信時アクションがHTTP POST の URL
が発行します。このURLにチーム名とチャネル名をリクエストとしてHTTP POSTすればチームIDとチャネルIDを取得できます。
Logic Appsを残しておけば、必要な時にLogic AppsへHTTP POSTすればいつでもチームIDとチャネルIDを取得できます。もし、チームIDとチャネルIDが取得できないときは、そのチームのメンバーではない可能性あります。チーム所有者に依頼してチームメンバーに入れてもらいましょう。