コルネの進捗や備忘録が記されたなにか

進捗や成果物や備忘録てきななにかを雑に更新していきます。

Power AutomateでTeams会議を作成する(会議のオプション変更あり)


スポンサードリンク

はじめに

connpassのイベント作成を必要項目入力したら、ボタンひとつで作ってくれるような仕組み作ってみたくってやってみました。

作成Stepとしては以下ですね。

  • MarkdownをHTMLに変換
    • connpassの説明がMarkdownだが、会議説明のメッセージがHTMLなので変換が必要
  • 会議の作成
  • 会議オプションの変更
    • 自動録画設定や、ロビーを参加者全員がバイパスできるようにする

MarkdownをHTMLに変換

MarkdownをHTMLに変換するには、GitHubが公開している"Render a Markdown document"を利用します。

docs.github.com

こちらのAPIが利用されアクションはPremiumでもありますが公開されています。

learn.microsoft.com

これにより、MarkdownをHTMLに変換された結果を取得することができます。

なおHTTPアクションを用いて自身でAPIを叩く場合は以下のようになります。

方法

POST

URI

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が必要になってきます。

以下ドキュメントを参考にトークンの生成を行ってください。

docs.github.com

会議の作成

会議の作成には、"Teams 会議の作成"を利用します。

learn.microsoft.com

ここはそんなに説明することもないので割愛。

会議オプションの変更

今回の鬼門ですね。

会議のオプションを指定して会議を作成、もしくは会議のオプションを変更するには /onlineMeetings リクエストを実行する必要があります。

learn.microsoft.com

こちらを実行するにあたり、以下のような問題があります。

  • Office 365 Groupsの"HTTP要求を送信します"アクションでは OnlineMeetings.ReadWrite は許可されていない
  • "Teams 会議の作成"アクションで出力される id とonlineMeetingの更新に必要な meetingId が異なる

この2つがめんどくさいポイントですかね。

Power AutomateのHTTPアクションで /onlineMeetings を呼び出せるようにする

こちらの記事で説明しているような設定が必要になってきます。

koruneko.hatenablog.com

これらの設定が完了したら、HTTPアクションの認証設定で以下を設定してください。

種類 設定値
認証 Active Directory OAuth
テナント AADに登録したアプリの"ディレクトリ (テナント) ID"
対象ユーザー https://graph.microsoft.com
クライアント ID AADに登録したアプリの"アプリケーション(クライアント)ID"
資格情報の種類 シークレット
シークレット AADに登録したアプリの"シークレット値"

認証がうまくいかない場合は上記サイトおよびこれらの設定を見直してください。

meetingId を取得する

"Teams 会議の作成"は /events によるイベントの作成が(おそらく)行われていると思いますが、この出力結果では meetingId は取得できません。

learn.microsoft.com

したがってOnlineMeeting の取得を用いて、 meetingId を取得しようと思います。

learn.microsoft.com

joinWebUrl は"Teams 会議の作成"でも取得が可能ですので、利用するのはこちらですね。

GET /users/{userId}/onlineMeetings?$filter=JoinWebUrl%20eq%20'{joinWebUrl}'

上の私の記事内でも触れている通り、 /me は利用できないので /users/{uerId} を利用します。

userId は"ユーザー プロフィールの取得 (V2)"を利用すれば取得できますので以下のようになりますね。

方法

GET

URI

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 の更新にはこちらを利用します。

learn.microsoft.com

更新可能なプロパティについてはこちらをご覧ください。(プロパティ名が翻訳されちゃってる箇所があるので英語でみたほうがいいかもです)

learn.microsoft.com

今回は

  • 自動録画設定
  • ロビーを参加者全員がバイパスできるよう

したいので、 recordAutomaticallylobbyBypassSettings を変更します。

lobbyBypassSettings で設定可能なプロパティに関してはこちらのドキュメントをご確認ください。

learn.microsoft.com

以上を踏まえて設定すると以下のようになります。

方法

PATCH

URI

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を用いて変更するの、結構めんどくさいですね。

なお、これにより作成されたイベントはこちらの会議に設定してみていますーー

jppgb.connpass.com

今週土曜日2023/07/15(土) 13:30 〜 18:00から開催です!
皆さん是非当日ご参加くださいー

また、皆さんが公開しているゲームも是非自身の環境にインポートして遊んでみてくださいね!

koruneko.hatenablog.com


スポンサードリンク