今回の記事では、過去にTeamsチャネルへ投稿された内容をSharePointリストに転記するフローを実装していきます。
これまでに投稿されたメッセージをまとめて転記・整理したい場合や、投稿内容のバックアップを作成する場合にお使いください。
実現したいこと
完成イメージは次の通りです。
下記のようなTeamsチャットに対してフローを実行すると、
SharePointリストに投稿内容が転記されます。

実装方法
SharePointリストの用意
フロー作成に取り掛かる前に、転記先となるSharePointリストを作成しておきます。
まずはSharePointリストを作成し、任意の名前を付けておきます。
(私の場合は「Teams投稿一覧」リストとしました。)

SharePointリストが作成できたら、列も作成しておきます。
(※ 列名は下表の通りに作成してください。列名が異なる場合、後からエラーが発生してしまいます)

列名 | データの種類 |
---|---|
createdDateTime | 日付と時刻(時間を含める) |
lastEditedDateTime | 日付と時刻(時間を含める) |
subject | 1行テキスト |
body | 複数行テキスト(拡張リッチテキスト) |
from | ユーザーまたはグループ |
reactionsCount | 数値 |
messageLink | ハイパーリンク |
※ body列については、データの種類を「複数行テキスト」に設定した上で「拡張リッチテキストを使用」を「はい」にしておきます。

手動トリガーの作成・設定
今回は手動トリガーで作成していきます。

アクションのコピー・貼り付け
次に下記のコードをコピーします。(1行目右端のコピーボタンをご利用ください)
{"id":"4408512f-5e11-4046-9f6b-6edbeda7343b","brandColor":"#8C3900","connectionReferences":{"shared_sharepointonline":{"connection":{"id":"/providers/Microsoft.PowerApps/apis/shared_sharepointonline/connections/shared-sharepointonl-fd87a1ff-b982-4fa1-b9d6-aaaf563a5575"}},"shared_office365users":{"connection":{"id":"/providers/Microsoft.PowerApps/apis/shared_office365users/connections/8bf5610fb58e465ba2d5a1c531895206"}},"shared_teams":{"connection":{"id":"/providers/Microsoft.PowerApps/apis/shared_teams/connections/5b03efb8afa44f8f9a6baeda47eab776"}},"shared_teams_1":{"connection":{"id":"/providers/Microsoft.PowerApps/apis/shared_teams/connections/3bdeec61ac09485eb1f9edfa74ea42b9"}},"shared_sharepointonline_1":{"connection":{"id":"/providers/Microsoft.PowerApps/apis/shared_sharepointonline/connections/3a9c5a4dfcde44e3b452876d0eb0f8f9"}},"shared_office365users_1":{"connection":{"id":"/providers/Microsoft.PowerApps/apis/shared_office365users/connections/shared-office365user-e412c8d6-0f8f-4860-89b9-c5e5d8c0eb99"}}},"connectorDisplayName":"制御","icon":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDMyIDMyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPg0KIDxwYXRoIGQ9Im0wIDBoMzJ2MzJoLTMyeiIgZmlsbD0iIzhDMzkwMCIvPg0KIDxwYXRoIGQ9Im04IDEwaDE2djEyaC0xNnptMTUgMTF2LTEwaC0xNHYxMHptLTItOHY2aC0xMHYtNnptLTEgNXYtNGgtOHY0eiIgZmlsbD0iI2ZmZiIvPg0KPC9zdmc+DQo=","isTrigger":false,"operationName":"スコープ","operationDefinition":{"type":"Scope","actions":{"メッセージを取得します":{"type":"OpenApiConnection","inputs":{"host":{"connectionName":"shared_teams_1","operationId":"GetMessagesFromChannel","apiId":"/providers/Microsoft.PowerApps/apis/shared_teams"},"parameters":{"groupId":"xxx","channelId":"xxx"},"authentication":{"type":"Raw","value":"@json(decodeBase64(triggerOutputs().headers['X-MS-APIM-Tokens']))['$ConnectionKey']"}},"runAfter":{},"description":"投稿一覧を取得","runtimeConfiguration":{"paginationPolicy":{"minimumItemCount":100000}},"metadata":{"operationMetadataId":"3310a8a9-0945-4921-ac68-f7c72f0fdf4c"}},"アレイのフィルター処理":{"type":"Query","inputs":{"from":"@outputs('メッセージを取得します')?['body/value']","where":"@equals(empty(item()?['deletedDateTime']), true)"},"runAfter":{"メッセージを取得します":["Succeeded"]},"description":"削除済み投稿を除外(エラー原因となるため)","metadata":{"operationMetadataId":"196c126f-69f8-40ff-8dcd-9296feaec788"}},"作成":{"type":"Compose","inputs":"@sort(body('アレイのフィルター処理_2'), 'createdDateTime')","runAfter":{"アレイのフィルター処理_2":["Succeeded"]},"description":"作成日(昇順)で並び替え","metadata":{"operationMetadataId":"4753a5a2-f58e-4572-9459-acb6ad9f164a"}},"Apply_to_each":{"type":"Foreach","foreach":"@outputs('作成')","actions":{"メッセージ詳細を取得する":{"type":"OpenApiConnection","inputs":{"host":{"connectionName":"shared_teams_1","operationId":"GetMessageDetails","apiId":"/providers/Microsoft.PowerApps/apis/shared_teams"},"parameters":{"messageId":"@items('Apply_to_each')?['id']","threadType":"channel","body/recipient/groupId":"xxx","body/recipient/channelId":"xxx","body/recipient/parentMessageId":"@items('Apply_to_each')?['replyToId']"},"authentication":{"type":"Raw","value":"@json(decodeBase64(triggerOutputs().headers['X-MS-APIM-Tokens']))['$ConnectionKey']"}},"runAfter":{},"description":"各メッセージの詳細を取得","metadata":{"operationMetadataId":"078abd76-9f44-497b-897c-bf3f6aac56b6"}},"項目の作成":{"type":"OpenApiConnection","inputs":{"host":{"connectionName":"shared_sharepointonline_1","operationId":"PostItem","apiId":"/providers/Microsoft.PowerApps/apis/shared_sharepointonline"},"parameters":{"dataset":"xxx","table":"xxx","item/createdDateTime":"@outputs('メッセージ詳細を取得する')?['body/createdDateTime']","item/lastEditedDateTime":"@outputs('メッセージ詳細を取得する')?['body/lastEditedDateTime']","item/subject":"@outputs('メッセージ詳細を取得する')?['body/subject']","item/body":"@outputs('メッセージ詳細を取得する')?['body/body/content']","item/from/Claims":"@outputs('ユーザー_プロフィールの取得_(V2)')?['body/userPrincipalName']","item/reactionsCount":"@length(outputs('メッセージ詳細を取得する')?['body/reactions'])","item/messageLink":"@outputs('メッセージ詳細を取得する')?['body/messageLink']"},"authentication":{"type":"Raw","value":"@json(decodeBase64(triggerOutputs().headers['X-MS-APIM-Tokens']))['$ConnectionKey']"}},"runAfter":{"ユーザー_プロフィールの取得_(V2)":["Succeeded","Failed"]},"metadata":{"operationMetadataId":"f105d423-55b3-4aef-af1c-16029b24ca7f"}},"ユーザー_プロフィールの取得_(V2)":{"type":"OpenApiConnection","inputs":{"host":{"connectionName":"shared_office365users_1","operationId":"UserProfile_V2","apiId":"/providers/Microsoft.PowerApps/apis/shared_office365users"},"parameters":{"id":"@outputs('メッセージ詳細を取得する')?['body/from/user/id']"},"authentication":{"type":"Raw","value":"@json(decodeBase64(triggerOutputs().headers['X-MS-APIM-Tokens']))['$ConnectionKey']"}},"runAfter":{"メッセージ詳細を取得する":["Succeeded"]},"description":"投稿者の詳細を取得","metadata":{"operationMetadataId":"8ada6907-9d92-4ada-a43d-39fd8aced649"}}},"runAfter":{"作成":["Succeeded"]},"metadata":{"operationMetadataId":"beca4e2f-ab9b-449a-bd3b-90a93fd67af5"}},"アレイのフィルター処理_2":{"type":"Query","inputs":{"from":"@body('アレイのフィルター処理')","where":"@equals(item()?['messageType'], 'message')"},"runAfter":{"アレイのフィルター処理":["Succeeded"]},"description":"メッセージのみに絞込(システムメッセージを除外)","metadata":{"operationMetadataId":"0cf0f2f2-5c7f-4df8-b090-6a3d5c2de3d2"}}},"runAfter":{},"metadata":{"operationMetadataId":"26a3223b-2e88-4bb2-a6ac-f09581b85341"}}}
トリガー下の「新しいステップ」ボタンを押した後、自分のクリップボードから「スコープ」を選択します。
(※表示されない場合は、「自分のクリップボード」を選択した状態でCtrl + Vを押すと表示されます)

接続エラー(警告アイコン)が表示されるため、既存の接続を選択するか新しい接続を作成してください。
※計4カ所あります


チーム・チャネルの設定(転記元)
接続が設定できたら、「メッセージを取得します」アクションと「メッセージの詳細を取得する」アクションの設定値を変更します。
「xxx」となっている部分を消去し、転記元のTeamsチーム・チャネルを指定してください。
SharePointリストの設定(転記先)
最後に、「項目の作成」アクションの設定値を変更します。
「xxx」となっている部分を消去し、最初のステップで作成したSharePointリストを指定してください。
フローの保存が成功すれば、操作は完了です。
テストを実行してみると、投稿内容がSharePointリストに転記できたことが分かります。

フローの流れ
フローの流れ
フローの流れは下記の通りです。
# | アクション名 | 動き |
---|---|---|
1 | メッセージを取得します | Teamsチャネルを指定して、投稿されたメッセージの一覧を取得します |
2 | アレイのフィルター処理 | 既に削除された投稿を除外することで、エラー発生を防ぎます |
3 | アレイのフィルター処理 2 | システムメッセージを除外することで、エラー発生を防ぎます |
4 | 作成 | 投稿を時刻順(昇順)に並び替えます |
5 | メッセージ詳細を取得する | 投稿メッセージの詳細情報(メッセージへのリンクなど)を取得します |
6 | ユーザープロフィールの取得 (V2) | 投稿者の詳細情報を取得します |
7 | 項目の作成 | 上記 5, 6の内容をSharePointリストに転記します |
エラーを防ぐためデータ整形・詳細情報取得の処理を多く入れており、複雑に見えるかと思います。
ただ各アクションの処理自体はそこまで難しくないため、コピペした式やメモを見ながらご理解いただければと思います。
まとめ
Teamsチャネルへ投稿された内容をSharePointリストに転記するフローを実装しました。
コピペで比較的簡単にお使いいただけるため、ご自身の業務効率化にご活用ください。