はじめに
connpassのイベント作成を必要項目入力したら、ボタンひとつで作ってくれるような仕組み作ってみたくってやってみました。
作成Stepとしては以下ですね。
- MarkdownをHTMLに変換
- connpassの説明がMarkdownだが、会議説明のメッセージがHTMLなので変換が必要
- 会議の作成
- 会議オプションの変更
- 自動録画設定や、ロビーを参加者全員がバイパスできるようにする
MarkdownをHTMLに変換
MarkdownをHTMLに変換するには、GitHubが公開している"Render a Markdown document"を利用します。
こちらのAPIが利用されアクションはPremiumでもありますが公開されています。
これにより、MarkdownをHTMLに変換された結果を取得することができます。
なおHTTPアクションを用いて自身でAPIを叩く場合は以下のようになります。
方法
POST
https://api.github.com/markdown
ヘッダー
{ "Accept": "application/vnd.github+json", "X-GitHub-Api-Version": "2022-11-28" }
本文
{ "text": "@{outputs('Body')}" }
認証
未加工
値
Bearer <YOUR-TOKEN>
HTTPアクションで呼び出す場合は、personal access tokenが必要になってきます。
以下ドキュメントを参考にトークンの生成を行ってください。
会議の作成
会議の作成には、"Teams 会議の作成"を利用します。
ここはそんなに説明することもないので割愛。
会議オプションの変更
今回の鬼門ですね。
会議のオプションを指定して会議を作成、もしくは会議のオプションを変更するには /onlineMeetings
リクエストを実行する必要があります。
こちらを実行するにあたり、以下のような問題があります。
- Office 365 Groupsの"HTTP要求を送信します"アクションでは
OnlineMeetings.ReadWrite
は許可されていない - "Teams 会議の作成"アクションで出力される
id
とonlineMeetingの更新に必要なmeetingId
が異なる
この2つがめんどくさいポイントですかね。
Power AutomateのHTTPアクションで /onlineMeetings
を呼び出せるようにする
こちらの記事で説明しているような設定が必要になってきます。
これらの設定が完了したら、HTTPアクションの認証設定で以下を設定してください。
種類 | 設定値 |
---|---|
認証 | Active Directory OAuth |
テナント | AADに登録したアプリの"ディレクトリ (テナント) ID" |
対象ユーザー | https://graph.microsoft.com |
クライアント ID | AADに登録したアプリの"アプリケーション(クライアント)ID" |
資格情報の種類 | シークレット |
シークレット | AADに登録したアプリの"シークレット値" |
認証がうまくいかない場合は上記サイトおよびこれらの設定を見直してください。
meetingId
を取得する
"Teams 会議の作成"は /events
によるイベントの作成が(おそらく)行われていると思いますが、この出力結果では meetingId
は取得できません。
したがってOnlineMeeting の取得を用いて、 meetingId
を取得しようと思います。
joinWebUrl
は"Teams 会議の作成"でも取得が可能ですので、利用するのはこちらですね。
GET /users/{userId}/onlineMeetings?$filter=JoinWebUrl%20eq%20'{joinWebUrl}'
上の私の記事内でも触れている通り、 /me
は利用できないので /users/{uerId}
を利用します。
userId
は"ユーザー プロフィールの取得 (V2)"を利用すれば取得できますので以下のようになりますね。
方法
GET
https://graph.microsoft.com/v1.0/users/@{outputs('ユーザー_プロフィールの取得_(V2)')?['body/id']}/onlineMeetings?$filter=JoinWebUrl%20eq%20'@{outputs('Teams_会議の作成')?['body/onlineMeeting/joinUrl']}'
こちらの結果により、 meetingId
が取得できますので、これを用いてonlineMeeting の更新を行っていきます。
onlineMeeting を更新する
onlineMeeting の更新にはこちらを利用します。
更新可能なプロパティについてはこちらをご覧ください。(プロパティ名が翻訳されちゃってる箇所があるので英語でみたほうがいいかもです)
今回は
- 自動録画設定
- ロビーを参加者全員がバイパスできるよう
したいので、 recordAutomatically
と lobbyBypassSettings
を変更します。
lobbyBypassSettings
で設定可能なプロパティに関してはこちらのドキュメントをご確認ください。
以上を踏まえて設定すると以下のようになります。
方法
PATCH
https://graph.microsoft.com/v1.0/users/@{outputs('ユーザー_プロフィールの取得_(V2)')?['body/id']}/onlineMeetings/@{body('OnlineMeeting_Get')?['value'][0]?['id']}
ヘッダー
{ "Content-Type": "application/json" }
本文
{ "lobbyBypassSettings": { "scope": "everyone", "isDialInBypassEnabled": false }, "recordAutomatically": true }
URIにて設定している meetingId
に相当する箇所の以下式ですが、
body('OnlineMeeting_Get')?['value'][0]?['id']
こちらは、onlineMeeting の取得で取得される結果が1つに絞られるので[0]で配列の最初の要素を取得しています。
これでようやく会議のオプションを変更することができましたーーー
おわりに
Teams会議のオプションをPower Automateを用いて変更するの、結構めんどくさいですね。
なお、これにより作成されたイベントはこちらの会議に設定してみていますーー
今週土曜日2023/07/15(土) 13:30 〜 18:00から開催です!
皆さん是非当日ご参加くださいー
また、皆さんが公開しているゲームも是非自身の環境にインポートして遊んでみてくださいね!