- Teamsと連携させたい
- 自動返信させたい
この記事では、そんな方にTeamsのチャットに自動返信する方法を紹介します。
この記事を読むと、TeamsでチャットBOTのような動きを再現できます。
自動返信の動き
受信メッセージに合わせて決められたメッセージを返信します。
確認をお願いします → 承知しました。
退勤します → お疲れ様でした。
実際に動かすと・・
こんな感じです。
自分で好きな文言を設定すれば使える幅はかなり広いと思います。
このフローはTeamsのアクションを使います。
気になる方は公式の説明も参考にしてください。
フローの内容
フローは5つの流れで動きます。
- メッセージを受信したらトリガーを動かす
- Teamsのメッセージ取得
- 返信メッセージ検索
- 返信要否判断
- Teamsへメッセージ返信
(1)メッセージを受信したらトリガーを動かす
作成から「自動化したクラウドフロー」を選択します。
「チャットに新しいメッセージが追加されたとき」を選択して作成。
このトリガーは設定する項目がないので、トリガーの準備はこれでOKです。
ここから説明するアクションはコピペできます。
アクションの追加にある「自分のクリップボード」を開いてこのコードを貼り付けて使用してください。
{"id":"0ff15860-d819-4abd-932a-419bbeacb58f","brandColor":"#8C3900","connectionReferences":{"shared_teams":{"connection":{"id":"/providers/Microsoft.PowerApps/apis/shared_teams/connections/shared-teams-7d81905c-e42f-4822-a5a2-727980150bac"}}},"connectorDisplayName":"制御","icon":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDMyIDMyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPg0KIDxwYXRoIGQ9Im0wIDBoMzJ2MzJoLTMyeiIgZmlsbD0iIzhDMzkwMCIvPg0KIDxwYXRoIGQ9Im04IDEwaDE2djEyaC0xNnptMTUgMTF2LTEwaC0xNHYxMHptLTItOHY2aC0xMHYtNnptLTEgNXYtNGgtOHY0eiIgZmlsbD0iI2ZmZiIvPg0KPC9zdmc+DQo=","isTrigger":false,"operationName":"スコープ","operationDefinition":{"type":"Scope","actions":{"Teamsへメッセージ返信":{"type":"Scope","actions":{"チャットまたはチャネルでメッセージを投稿する":{"type":"OpenApiConnection","inputs":{"host":{"connectionName":"shared_teams","operationId":"PostMessageToConversation","apiId":"/providers/Microsoft.PowerApps/apis/shared_teams"},"parameters":{"poster":"Flow bot","location":"Group chat","body/recipient":"@outputs('メッセージ会話ID(グループチャット)')","body/messageBody":"<p>これは自動返信です。<br>\n@{outputs('返信メッセージ')}</p>"},"authentication":"@parameters('$authentication')"},"runAfter":{},"metadata":{"operationMetadataId":"46c4d2f8-b668-4c8a-9b8f-542c1dcab215"}}},"runAfter":{"返信要否判断":["Succeeded"]},"metadata":{"operationMetadataId":"c9da18ac-6e70-45d9-a7ac-030a8c71b64e"}},"返信要否判断":{"type":"Scope","actions":{"条件":{"type":"If","expression":{"equals":["","@null"]},"actions":{"終了":{"metadata":{"operationMetadataId":"6d4b86f6-ebfe-4093-a480-1e0b3b80aa84"},"type":"Terminate","inputs":{"runStatus":"Succeeded"},"runAfter":{}}},"runAfter":{},"metadata":{"operationMetadataId":"9c418b65-d4ad-4387-a9c2-c76282a98983"}}},"runAfter":{"返信メッセージ検索":["Succeeded"]},"metadata":{"operationMetadataId":"c4b086c5-720a-484b-a214-9af210b7d34c"}},"返信メッセージ検索":{"type":"Scope","actions":{"返信メッセージ紐づけ情報":{"type":"Compose","inputs":[{"受信":"確認をお願いします","返信":"承知しました。"},{"受信":"退勤します","返信":"お疲れ様でした。"}],"runAfter":{},"metadata":{"operationMetadataId":"fe9ac873-5436-435b-9044-7c356ee153ee"}},"Apply_to_each":{"type":"Foreach","foreach":"@outputs('返信メッセージ紐づけ情報')","actions":{"一致したメッセージの返信情報":{"type":"Compose","inputs":{"結果":"@contains(outputs('メッセージ(テキスト)'), items('Apply_to_each')?['受信'])","返信":"@{items('Apply_to_each')?['返信']}"},"runAfter":{},"metadata":{"operationMetadataId":"a566c96b-4d5f-428a-afad-b7e6222f7380"}}},"runAfter":{"返信メッセージ紐づけ情報":["Succeeded"]},"metadata":{"operationMetadataId":"07ebc433-80c6-4354-8501-0b78d98cf883"}},"アレイのフィルター処理":{"type":"Query","inputs":{"from":"@outputs('一致したメッセージの返信情報')","where":"@equals(item()?['結果'], true)"},"runAfter":{"Apply_to_each":["Succeeded"]},"metadata":{"operationMetadataId":"f340ee76-76f4-4134-9799-c2c8493b2dbf"}},"返信メッセージ":{"type":"Compose","inputs":"@first(body('アレイのフィルター処理'))?['返信']","runAfter":{"アレイのフィルター処理":["Succeeded"]},"metadata":{"operationMetadataId":"fd8f383c-5b8e-4221-9117-30fa4fb8c4fa"}}},"runAfter":{"Teamsのメッセージ取得":["Succeeded"]},"metadata":{"operationMetadataId":"91b82e08-5f95-40d1-9786-0c5972cda9e8"}},"Teamsのメッセージ取得":{"type":"Scope","actions":{"メッセージ取得":{"type":"Scope","actions":{"メッセージ(コンテンツ)":{"type":"Compose","inputs":"@outputs('メッセージ詳細を取得する')?['body/body/content']","runAfter":{"メッセージ(テキスト)":["Succeeded"]},"metadata":{"operationMetadataId":"cd58068c-67d3-4e75-a2bd-a937303192a2"}},"メッセージ(テキスト)":{"type":"Compose","inputs":"@outputs('メッセージ詳細を取得する')?['body/body/plainTextContent']","runAfter":{"メッセージ詳細を取得する":["Succeeded"]},"metadata":{"operationMetadataId":"84f710db-eaab-42bf-aca9-fb16f931df23"}},"メッセージ詳細を取得する":{"type":"OpenApiConnection","inputs":{"host":{"connectionName":"shared_teams","operationId":"GetMessageDetails","apiId":"/providers/Microsoft.PowerApps/apis/shared_teams"},"parameters":{"messageId":"@outputs('メッセージID')","threadType":"groupchat","body/recipient":"@outputs('メッセージ会話ID(グループチャット)')"},"authentication":"@parameters('$authentication')"},"runAfter":{"メッセージ会話ID(グループチャット)":["Succeeded"]},"metadata":{"operationMetadataId":"91c6b71f-9aab-4673-b2ae-47a46947d9d9"}},"メッセージ会話ID(グループチャット)":{"type":"Compose","inputs":"@outputs('トリガーチャット')?['conversationId']","runAfter":{"メッセージID":["Succeeded"]},"description":"conversationId","metadata":{"operationMetadataId":"0172405a-b7d9-42d6-aa44-7e634c1fd7a6"}},"メッセージID":{"type":"Compose","inputs":"@outputs('トリガーチャット')?['messageId']","runAfter":{"トリガーチャット":["Succeeded"]},"description":"messageId","metadata":{"operationMetadataId":"7bf28484-6e65-4dc8-b2ec-1876ac9fdad6"}},"トリガーチャット":{"type":"Compose","inputs":"@first(triggerOutputs()?['body/value'])","runAfter":{},"metadata":{"operationMetadataId":"c8ff649c-aba7-4f18-9ce7-543c1d1b80eb"}}},"runAfter":{},"metadata":{"operationMetadataId":"901b3f12-8d3a-4065-915e-698beb9800e4"}},"タイトル取得":{"type":"Scope","actions":{"チャット一覧を作成":{"type":"OpenApiConnection","inputs":{"host":{"connectionName":"shared_teams","operationId":"GetChats","apiId":"/providers/Microsoft.PowerApps/apis/shared_teams"},"parameters":{"chatType":"all","topic":"all"},"authentication":"@parameters('$authentication')"},"runAfter":{},"metadata":{"operationMetadataId":"361a7bab-900f-47df-a40c-46ecb39d8193"}},"チャットフィルター":{"type":"Query","inputs":{"from":"@outputs('チャット一覧を作成')?['body/value']","where":"@equals(item()?['Id'], outputs('メッセージ会話ID(グループチャット)'))"},"runAfter":{"チャット一覧を作成":["Succeeded"]},"metadata":{"operationMetadataId":"583c190c-9d77-4f35-8a4c-218958451db1"}},"チャットタイトル":{"type":"Compose","inputs":"@first(body('チャットフィルター'))?['topic']","runAfter":{"チャットフィルター":["Succeeded"]},"metadata":{"operationMetadataId":"742b18cb-ec0c-45bc-b1fa-e260c417f44c"}}},"runAfter":{"メッセージ取得":["Succeeded"]},"metadata":{"operationMetadataId":"d51c6eb9-3be2-4b67-bda2-b5b2f1a1741e"}}},"runAfter":{},"metadata":{"operationMetadataId":"49e75b60-43e9-47eb-94b7-5f185de10eb6"}}},"runAfter":{}}}
(2)Teamsのメッセージ取得
アクション「メッセージ詳細を取得する」で受信したメッセージを取得する。
メッセージ取得に必要なアクションはこちらです。
各アクションの説明はこちらの記事を参考にしてください。
(3)返信メッセージ検索
受信メッセージとそれに合わせた返信メッセージを準備します。
受信メッセージを照合して一致した返信メッセージのみ取り出します。
返信メッセージ検索に必要なアクションはこちらです。
データ操作の「作成」アクションを追加。※名前を「返信メッセージ紐づけ情報」に変更
カッコ{}内にある受信と返信で1セットになっています。組み合わせを増やしたい場合は自由に追加できます。
[ { "受信": "確認をお願いします", "返信": "承知しました。" }, { "受信": "退勤します", "返信": "お疲れ様でした。" } ]
ここで設定した文字はこの後の処理で、部分一致で検索します。また最初に一致したものが優先されます。
作業が終わりました。退勤します。 →2つめと一致
確認をお願いします。それでは退勤します。 →2つ一致したが1つめが優先される
コントロールの「それぞれに適用する(Apply to each)」アクションを追加。
先ほど設定した受信と返信の文字を繰り返し処理で1セットずつ取り出します。
outputs('返信メッセージ紐づけ情報')
データ操作の「作成」アクションを追加。※名前を「一致したメッセージの返信情報」に変更
{ "結果": @{contains(outputs('メッセージ(テキスト)'), items('Apply_to_each')?['受信'])}, "返信": "@{items('Apply_to_each')?['返信']}" }
受信メッセージに検索文字が含まれているかcontains関数でチェックしています。
その結果をtrue/falseで「結果」に保存します。また、返信メッセージも保存します。
フローを動かして2つめのメッセージと一致した場合はこんな結果になります。
データ操作の「アレイのフィルター処理」アクションを追加。
先ほど検索した結果からtrueのみに絞ります。
outputs('一致したメッセージの返信情報')
item()?['結果']
次の値に等しい
true
フローを動かした結果、2つある返信内容からtrueとなっている「お疲れ様でした。」の方だけ残りました。
データ操作の「作成」アクションを追加。※名前を「返信メッセージ」に変更
first(body('アレイのフィルター処理'))?['返信']
first関数を使いtrueで絞った内容から最初の1つだけを選択します。
フローを動かすとキーが返信になっている「お疲れ様でした。」を取り出せました。
(4)返信要否判断
返信メッセージが空(から)の場合は返信する必要がないのでフローを中断させます。
返信要否判断に必要なアクションはこちらです。
コントロールの「条件」アクションを追加。
outputs('返信メッセージ')
null
※nullの追加は式から行ってください。
「はいの場合」にコントロールの「終了」を追加します。
状態欄は自由にしてください。
「いいえの場合」は次に設定する「Teamsへメッセージ返信」へ進むのでここでは何も指定しません。
(5)Teamsへメッセージ返信
Teamsの「チャットまたはチャネルでメッセージを投稿する」アクションを追加。
投稿者:フローボット
投稿先:グループチャット
outputs('メッセージ会話ID(グループチャット)')
これは自動返信です。 @{outputs('返信メッセージ')}
テストとして分かりやすいように「これは自動返信です。」と書いていますが、実際には必要ありません。
以上でアクションの設定は完了です。
チャット上で「確認をお願いします。」や「退勤します。」と入力すると自動で返信されました。
アクションの追加にある「自分のクリップボード」を開いてこのコードを貼り付けて使用してください。
{"id":"0ff15860-d819-4abd-932a-419bbeacb58f","brandColor":"#8C3900","connectionReferences":{"shared_teams":{"connection":{"id":"/providers/Microsoft.PowerApps/apis/shared_teams/connections/shared-teams-7d81905c-e42f-4822-a5a2-727980150bac"}}},"connectorDisplayName":"制御","icon":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDMyIDMyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPg0KIDxwYXRoIGQ9Im0wIDBoMzJ2MzJoLTMyeiIgZmlsbD0iIzhDMzkwMCIvPg0KIDxwYXRoIGQ9Im04IDEwaDE2djEyaC0xNnptMTUgMTF2LTEwaC0xNHYxMHptLTItOHY2aC0xMHYtNnptLTEgNXYtNGgtOHY0eiIgZmlsbD0iI2ZmZiIvPg0KPC9zdmc+DQo=","isTrigger":false,"operationName":"スコープ","operationDefinition":{"type":"Scope","actions":{"Teamsへメッセージ返信":{"type":"Scope","actions":{"チャットまたはチャネルでメッセージを投稿する":{"type":"OpenApiConnection","inputs":{"host":{"connectionName":"shared_teams","operationId":"PostMessageToConversation","apiId":"/providers/Microsoft.PowerApps/apis/shared_teams"},"parameters":{"poster":"Flow bot","location":"Group chat","body/recipient":"@outputs('メッセージ会話ID(グループチャット)')","body/messageBody":"<p>これは自動返信です。<br>\n@{outputs('返信メッセージ')}</p>"},"authentication":"@parameters('$authentication')"},"runAfter":{},"metadata":{"operationMetadataId":"46c4d2f8-b668-4c8a-9b8f-542c1dcab215"}}},"runAfter":{"返信要否判断":["Succeeded"]},"metadata":{"operationMetadataId":"c9da18ac-6e70-45d9-a7ac-030a8c71b64e"}},"返信要否判断":{"type":"Scope","actions":{"条件":{"type":"If","expression":{"equals":["","@null"]},"actions":{"終了":{"metadata":{"operationMetadataId":"6d4b86f6-ebfe-4093-a480-1e0b3b80aa84"},"type":"Terminate","inputs":{"runStatus":"Succeeded"},"runAfter":{}}},"runAfter":{},"metadata":{"operationMetadataId":"9c418b65-d4ad-4387-a9c2-c76282a98983"}}},"runAfter":{"返信メッセージ検索":["Succeeded"]},"metadata":{"operationMetadataId":"c4b086c5-720a-484b-a214-9af210b7d34c"}},"返信メッセージ検索":{"type":"Scope","actions":{"返信メッセージ紐づけ情報":{"type":"Compose","inputs":[{"受信":"確認をお願いします","返信":"承知しました。"},{"受信":"退勤します","返信":"お疲れ様でした。"}],"runAfter":{},"metadata":{"operationMetadataId":"fe9ac873-5436-435b-9044-7c356ee153ee"}},"Apply_to_each":{"type":"Foreach","foreach":"@outputs('返信メッセージ紐づけ情報')","actions":{"一致したメッセージの返信情報":{"type":"Compose","inputs":{"結果":"@contains(outputs('メッセージ(テキスト)'), items('Apply_to_each')?['受信'])","返信":"@{items('Apply_to_each')?['返信']}"},"runAfter":{},"metadata":{"operationMetadataId":"a566c96b-4d5f-428a-afad-b7e6222f7380"}}},"runAfter":{"返信メッセージ紐づけ情報":["Succeeded"]},"metadata":{"operationMetadataId":"07ebc433-80c6-4354-8501-0b78d98cf883"}},"アレイのフィルター処理":{"type":"Query","inputs":{"from":"@outputs('一致したメッセージの返信情報')","where":"@equals(item()?['結果'], true)"},"runAfter":{"Apply_to_each":["Succeeded"]},"metadata":{"operationMetadataId":"f340ee76-76f4-4134-9799-c2c8493b2dbf"}},"返信メッセージ":{"type":"Compose","inputs":"@first(body('アレイのフィルター処理'))?['返信']","runAfter":{"アレイのフィルター処理":["Succeeded"]},"metadata":{"operationMetadataId":"fd8f383c-5b8e-4221-9117-30fa4fb8c4fa"}}},"runAfter":{"Teamsのメッセージ取得":["Succeeded"]},"metadata":{"operationMetadataId":"91b82e08-5f95-40d1-9786-0c5972cda9e8"}},"Teamsのメッセージ取得":{"type":"Scope","actions":{"メッセージ取得":{"type":"Scope","actions":{"メッセージ(コンテンツ)":{"type":"Compose","inputs":"@outputs('メッセージ詳細を取得する')?['body/body/content']","runAfter":{"メッセージ(テキスト)":["Succeeded"]},"metadata":{"operationMetadataId":"cd58068c-67d3-4e75-a2bd-a937303192a2"}},"メッセージ(テキスト)":{"type":"Compose","inputs":"@outputs('メッセージ詳細を取得する')?['body/body/plainTextContent']","runAfter":{"メッセージ詳細を取得する":["Succeeded"]},"metadata":{"operationMetadataId":"84f710db-eaab-42bf-aca9-fb16f931df23"}},"メッセージ詳細を取得する":{"type":"OpenApiConnection","inputs":{"host":{"connectionName":"shared_teams","operationId":"GetMessageDetails","apiId":"/providers/Microsoft.PowerApps/apis/shared_teams"},"parameters":{"messageId":"@outputs('メッセージID')","threadType":"groupchat","body/recipient":"@outputs('メッセージ会話ID(グループチャット)')"},"authentication":"@parameters('$authentication')"},"runAfter":{"メッセージ会話ID(グループチャット)":["Succeeded"]},"metadata":{"operationMetadataId":"91c6b71f-9aab-4673-b2ae-47a46947d9d9"}},"メッセージ会話ID(グループチャット)":{"type":"Compose","inputs":"@outputs('トリガーチャット')?['conversationId']","runAfter":{"メッセージID":["Succeeded"]},"description":"conversationId","metadata":{"operationMetadataId":"0172405a-b7d9-42d6-aa44-7e634c1fd7a6"}},"メッセージID":{"type":"Compose","inputs":"@outputs('トリガーチャット')?['messageId']","runAfter":{"トリガーチャット":["Succeeded"]},"description":"messageId","metadata":{"operationMetadataId":"7bf28484-6e65-4dc8-b2ec-1876ac9fdad6"}},"トリガーチャット":{"type":"Compose","inputs":"@first(triggerOutputs()?['body/value'])","runAfter":{},"metadata":{"operationMetadataId":"c8ff649c-aba7-4f18-9ce7-543c1d1b80eb"}}},"runAfter":{},"metadata":{"operationMetadataId":"901b3f12-8d3a-4065-915e-698beb9800e4"}},"タイトル取得":{"type":"Scope","actions":{"チャット一覧を作成":{"type":"OpenApiConnection","inputs":{"host":{"connectionName":"shared_teams","operationId":"GetChats","apiId":"/providers/Microsoft.PowerApps/apis/shared_teams"},"parameters":{"chatType":"all","topic":"all"},"authentication":"@parameters('$authentication')"},"runAfter":{},"metadata":{"operationMetadataId":"361a7bab-900f-47df-a40c-46ecb39d8193"}},"チャットフィルター":{"type":"Query","inputs":{"from":"@outputs('チャット一覧を作成')?['body/value']","where":"@equals(item()?['Id'], outputs('メッセージ会話ID(グループチャット)'))"},"runAfter":{"チャット一覧を作成":["Succeeded"]},"metadata":{"operationMetadataId":"583c190c-9d77-4f35-8a4c-218958451db1"}},"チャットタイトル":{"type":"Compose","inputs":"@first(body('チャットフィルター'))?['topic']","runAfter":{"チャットフィルター":["Succeeded"]},"metadata":{"operationMetadataId":"742b18cb-ec0c-45bc-b1fa-e260c417f44c"}}},"runAfter":{"メッセージ取得":["Succeeded"]},"metadata":{"operationMetadataId":"d51c6eb9-3be2-4b67-bda2-b5b2f1a1741e"}}},"runAfter":{},"metadata":{"operationMetadataId":"49e75b60-43e9-47eb-94b7-5f185de10eb6"}}},"runAfter":{}}}
まとめ
PowerAutomateのTeamsのチャットに自動返信する方法を紹介しました。
Teamsのアクションは単純ですが、返信メッセージを検索する部分が複雑になっています。難しい場合はコピペして必要なところだけ変更して使ってみてください。
PowerAutomateのおすすめ記事
人気ページ
Apply to eachの使い方
アレイのフィルター処理の使い方
日付関数の使い方
エラーを無視する方法
メールの内容をExcelへ転記
メール本文から名前を抽出
>>PowerAutomateの記事一覧を見る<<
お気に入り必須!公式ページ
Microsoft Power Automate
式関数のリファレンス
コネクタのリファレンス
Excel Online (Business)のリファレンス