Power Automate Desktop から Teams のチャネルに投稿する 3 つの方法

:::note warn
この記事の内容は、現在廃止された方法や非推奨の内容も含みます。
2024年12月時点での最新の内容は、以下の記事をご確認ください。
:::
https://qiita.com/maekawawawa/items/0b2b8d91de6276d15d83

# はじめに
この記事では、Power Automate Desktop (デスクトップ フロー) から、Microsoft Teams のチャネルにメッセージを投稿する方法を記載しています。
一部のアクションでは、添付ファイルをつけた投稿も可能ですので、用途に合わせて利用を検討してみてください。

ここでは、以下の 3 つの方法を記載します。
A. [Web サービスを呼び出します] アクションから、Webhook を使った投稿
B. [メールの送信] アクションから、チャネルのメールアドレス向けに投稿
C. [Outlook からのメール メッセージの送信] アクションから、 チャネルのメールアドレス向けに投稿

実行した際のイメージです。(C のパターンでの動作です。)
![TeamsPAD04.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547452/b19048da-88d1-2916-7a14-0f1e6d7b59c5.gif)


# ご案内
本記事の内容やサンプルのご利用は自己責任でお願いいたします。

この方法でもちょっと難しいという場合や Power Automate Desktop の処理の中で送る必要がない場合は、Power Automate (クラウド フロー) の利用を検討してみてください。
とても簡単ですし、チャットへの投稿やこの記事の内容と比較してできることも多いです。
Qiita や様々なサイトで方法やできることが説明されています。

本記事を作成するにあたって、 @sys_zero さんの [Power Automate Desktop「簡易　見守りカメラをつくってみた」](https://qiita.com/sys_zero/items/d0fe8917bb4ccac67c83) を参考にさせていただきました。ありがとうございます！

# A. [Web サービスを呼び出します] アクションから、Webhook を使った投稿
おそらくメッセージの配送ルートが短いため一番安定性が高いアクションです。
この記事の最後にある参考情報にあるような装飾したメッセージも送ることができます。

手順としては、Teams のチャネルに Incoming Webhook の設定を行い、Webhook の URL あてに投稿を行う方法となります。

ユーザーの権限や組織の設定によっては、チャネルに Webhook のコネクタを追加出来ない場合もありますので、その場合は、チームや組織の管理者に確認するか、B と C のパターンを試してください。

手順
1. Teams 側で、Incoming Webhook の設定を行う
2. Power Automate Desktop で [Web サービスを呼び出します] のアクションを設定を行う

### 1. Teams 側で、Incoming Webhook の設定を行う
1) Teams を起動し、チームのチャネルにカーソルをあわせて表示される3点リーダーをクリックし、表示されるメニューから [コネクタ] を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547452/107a3548-722d-778f-f2f3-9392caa0988e.png)
2) コネクタ画面が表示されたら、画面左上の検索ボックスに "Incoming" と入力し、右側に表示された "Incoming Webhook" の構成を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547452/b97a0d04-ed23-d7a0-0006-06e831968105.png)
3) Webhook の名前を設定します。(ここでは、"Qiita Webhook" としています。)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547452/deb8d005-31e4-833a-f228-8c4b5487fd92.png)
4) 下にスクロールし、[作成] をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547452/79e70d6d-62f5-44b4-351f-ccc4215eff99.png)
5) 画面が切り替わるので、画面を下にスクロールすると Webhook の URL が表示されるので、こちらをコピーし、[完了] ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547452/5caa9a7a-e5f8-7c52-1b57-48e68e8e7fd2.png)
6) Teams のチャネル上に、Webhook からの設定できた旨のメッセージが表示されていたら設定完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547452/207b622e-ae51-df3b-544a-ac6055cfbd75.png)

### 2. Power Automate Desktop で [Web サービスを呼び出します] のアクションを設定します
今回は、PAD 上で表示したメッセージボックスの内容をチャネルに投稿します。

1) アクション一覧から、[入力ダイアログを表示する] アクションをダブルクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547452/69d1314c-8234-a79e-a31f-533cfa8dd0bb.png)

2) ダイアログのプロパティを設定します。設定値は下記の通りとなります。

|No | プロパティ | 設定値 |
|:--|:--|:--|
|1 | 入力ダイアログのタイトル: | Teams に投稿するメッセージ | 
|2 | 入力ダイアログ メッセージ:| Teams に投稿するメッセージを入力してください。 | 

上記以外は既定の設定のままです。
変更していないプロパティの中で、重要なものは [生成された変数] の "UserIunput" 変数です。
こちらの変数に入力されたメッセージボックスのテキストが保存されます。

設定の画像
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547452/be0d3303-70f4-f471-a9e9-a0fa94fdc9d2.png)

3) アクション一覧から、[Web サービスを呼び出します] アクションをダブルクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547452/29d6e506-e8a5-f0be-37fd-92d24f54d7c6.png)

4) [Web サービスを呼び出します] アクションのプロパティを設定します。設定値は下記の通りとなります。

|No | プロパティ | 設定値 |
|:--|:--|:--|
|1 | URL: | 手順1 で取得した Webhook の URL | 
|2 | メソッド:| POST |
|3 | 要求本文:| 欄外を確認してください |
|4 | 要求本文をエンコードします:| False |



``` 
要求本文: に入力する内容
{
    "@type": "MessageCard",
    "title": "Power Automate Desktop からの投稿です。",
    "text": "%UserInput%"
}
```
上記の要求本文の内容を説明すると、Teams への投稿では、複数のカード形式がサポートされています。
今回は、@type に、MessageCard 形式を指定し、タイトルと本文にあたるテキストを設定しています。
title 部は、固定文字で、「Power Automate Desktop からの投稿です。」を設定しています。
text 部は、[入力ダイアログを表示する] アクションで生成した UserInput 変数を指定しています。

設定の画像
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547452/daee32e4-7e52-7313-e145-c5ca18e56dd1.png)

以上の設定で、Teams の投稿の設定が完了となります。

デスクトップ フローの全体像です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547452/7750a38a-33b0-1c4a-0129-a7c7a7bde962.png)

PAD に貼り付けて使える Robin のサンプルです。
Webhook の URL をご自身の環境の URL を設定してもらえれば使用できるはずです。

``` 
Display.InputDialog Title: $'''Teams に投稿するメッセージ''' Message: $'''Teams に投稿するメッセージを入力してください。''' InputType: Display.InputType.SingleLine IsTopMost: False UserInput=> UserInput ButtonPressed=> ButtonPressed
Web.InvokeWebService Url: $'''<Webhook の URL>''' Method: Web.Method.Post Accept: $'''application/xml''' ContentType: $'''application/xml''' RequestBody: $''' {
    \"@type\": \"MessageCard\",
    \"title\": \"Power Automate Desktop からの投稿です。\",
    \"text\": \"%UserInput%\"
}''' ConnectionTimeout: 30 FollowRedirection: True ClearCookies: False FailOnErrorStatus: False EncodeRequestBody: False UserAgent: $'''Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.21) Gecko/20100312 Firefox/3.6''' Encoding: Web.Encoding.AutoDetect AcceptUntrustedCertificates: False ResponseHeaders=> WebServiceResponseHeaders Response=> WebServiceResponse StatusCode=> StatusCode
``` 

# B. [メールの送信] アクションから、チャネルのメールアドレス向けに投稿
続いては、Teams のチャネルが持っているメールアドレス宛の投稿です。
この方法の利点は添付ファイルが付けられることだと思います。

手順としては、Teams のチームのチャネルが持っているメールアドレスを取得し、そのメールアドレス宛に PAD からメールを送信する方法です。

今回のサンプルでは、Microsoft 365 の Exchange Online を介して送付します。


手順
1. Teams 側で、チャネルのメール アドレスの取得を行う
2. Power Automate Desktop で [メールの送信] アクションの設定を行う

###1. Teams 側で、チャネルのメール アドレスの取得を行う
1) Teams を起動し、チームのチャネルにカーソルをあわせて表示される3点リーダーをクリックし、表示されるメニューから [メール アドレスを取得] を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547452/8e4d135b-2ade-327c-80d4-7d026fc757b0.png)

2) チャネルのメール アドレスが表示されるので、[コピー] をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547452/4cc0890f-786f-aa3e-9f98-ebdab39d235c.png)

3) コピーしたメール アドレスは、メモ帳に貼り付けておきます。
ちなみに、このあと使用するのは、<> の中のメール アドレス部分のみです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547452/4e242269-1d9a-7592-8e8b-31546ffedd45.png)


### 2. Power Automate Desktop で [メールの送信] アクションの設定を行う
今回も、PAD 上で表示したメッセージボックスの内容をチャネルに投稿します。
A のパターンと同じ設定ですが、そのまま再掲します。

1) アクション一覧から、[入力ダイアログを表示する] アクションをダブルクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547452/69d1314c-8234-a79e-a31f-533cfa8dd0bb.png)

2) ダイアログのプロパティを設定します。設定値は下記の通りとなります。

|No | プロパティ | 設定値 |
|:--|:--|:--|
|1 | 入力ダイアログのタイトル: | Teams に投稿するメッセージ | 
|2 | 入力ダイアログ メッセージ:| Teams に投稿するメッセージを入力してください。 | 

上記以外は既定の設定のままです。
パターン A 同様に、[生成された変数] の "UserIunput" 変数に入力されたメッセージボックスのテキストが保存されますので、こちらをメールで送付します。

3) アクション一覧から、[メールの送信] アクションをダブルクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547452/dccdcec9-70a2-d2f8-b13a-1c21ff25e705.png)

4) [メールの送信] アクションのプロパティを設定します。設定値は下記の通りとなります。
Microsoft 365 の Exchange Online を使用しています。

|No | プロパティ | 設定値 |
|:--|:--|:--|
|1 | SMTP サーバー: | smtp.office365.com | 
|2 | サーバー ポート:| 587 |
|3 | SSL を有効にする:| True |
|4 | SMTP サーバーには認証が必要:| True |
|5 | ユーザー名:| Microsoft 365 のアカウント |
|6 | パスワード:|  アカウントのパスワード|
| | ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547452/e7b217fa-ab2b-e0ce-a788-70a2d1bd76e2.png)|  |
|7 | 送信元:| 自分のメールアドレス |
|8 | 送信者の表示名:|  PAD|
|9 | 送信先:|  チャネルのメールアドレス|
|10 | 件名:|  Power Automate Desktop からの送信|
|11 | 本文:|  %UserInput%|

上記以外は既定の設定のままです。
SMTP サーバーとサーバー ポートは、Microsoft 365 が指定する値を設定します。
設定値は、以下の公開情報を参考にしています。

[Microsoft 365 または Office 365 を使用してメールを送信するように多機能デバイスまたはアプリケーションをセットアップする方法](https://docs.microsoft.com/ja-jp/exchange/mail-flow-best-practices/how-to-set-up-a-multifunction-device-or-application-to-send-email-using-microsoft-365-or-office-365)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547452/95d2d68d-9ec8-ea95-1064-badbed5f7166.png)


送信先に、チャネルのメールアドレスを指定します。
このサンプルでは指定していませんが、[添付ファイル] にファイルを指定することで、ファイル付きでチャネルへ投稿することが可能です。

設定の画像
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547452/8058cc3b-da49-093c-e345-1ab15cd560e0.png)

デスクトップ フローの全体像です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547452/44ef7454-4ce4-186e-71af-a9205e0287b0.png)


PAD に貼り付けて使える Robin のサンプルは以下の通りです。
アカウント情報やパスワード等をご自身の環境の値を設定してもらえれば使用できるはずです。

``` 
Display.InputDialog Title: $'''Teams に投稿するメッセージ''' Message: $'''Teams に投稿するメッセージを入力してください。''' InputType: Display.InputType.SingleLine IsTopMost: False UserInput=> UserInput ButtonPressed=> ButtonPressed
Email.AuthenticateAndSend SMTPServer: $'''smtp.office365.com''' Port: 587 EnableSSL: True Username: $'''<Microsoft 365 のアカウント>''' Password: P'<PADに貼り付けたあとにパスワードをいれます>' AcceptUntrustedCertificates: False SendFrom: $'''<送信元のメールアドレス>''' SenderDisplayName: $'''PAD''' SendTo: $'''<送信先のチャネルのメールアドレス>''' Subject: $'''Power Automate Desktop からの送信''' Body: UserInput IsBodyHtml: False
```

# C. [Outlook からのメール メッセージの送信] アクションから、 チャネルのメールアドレス向けに投稿

最後も Teams のチャネルが持っているメールアドレス宛の投稿です。

手順としては、Bと一緒で、Teams のチームのチャネルが持っているメールアドレスを取得し、そのメールアドレス宛に PAD からメールを送信する方法です。
B の方法との違いは、Outlook のアプリケーションを介して送信を行います。
送信処理は、Outlook の設定に準じて行うため、B のパターンより、設定内容が少ないです。
ただし、Outlook を起動させる必要があるため、Outlook が起動しなかった場合にメールを送れないというデメリットがあります。

今回のサンプルでは、Microsoft 365 の Outlook を介して送付します。

手順
1. Teams 側で、チャネルのメール アドレスの取得を行う
2. Power Automate Desktop で [Outlook からのメール メッセージの送信] アクションの設定を行う

###1. Teams 側で、チャネルのメール アドレスの取得を行う
パターン B と同じ設定ですが、そのまま再掲します。

1) Teams を起動し、チームのチャネルにカーソルをあわせて表示される3点リーダーをクリックし、表示されるメニューから [メール アドレスを取得] を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547452/8e4d135b-2ade-327c-80d4-7d026fc757b0.png)

2) チャネルのメール アドレスが表示されるので、[コピー] をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547452/4cc0890f-786f-aa3e-9f98-ebdab39d235c.png)

3) コピーしたメール アドレスは、メモ帳に貼り付けておきます。
ちなみに、このあと使用するのは、<> の中のメール アドレス部分のみです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547452/4e242269-1d9a-7592-8e8b-31546ffedd45.png)

###2. Power Automate Desktop で [Outlook からのメール メッセージの送信] アクションの設定を行う
今回も、PAD 上で表示したメッセージボックスの内容をチャネルに投稿します。
パターン A と同じ設定ですが、そのまま再掲します。

1) アクション一覧から、[入力ダイアログを表示する] アクションをダブルクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547452/69d1314c-8234-a79e-a31f-533cfa8dd0bb.png)

2) ダイアログのプロパティを設定します。設定値は下記の通りとなります。

|No | プロパティ | 設定値 |
|:--|:--|:--|
|1 | 入力ダイアログのタイトル: | Teams に投稿するメッセージ | 
|2 | 入力ダイアログ メッセージ:| Teams に投稿するメッセージを入力してください。 | 

上記以外は既定の設定のままです。
パターン A 同様に、[生成された変数] の "UserIunput" 変数に入力されたメッセージボックスのテキストが保存されますので、こちらをメールで送付します。

3) アクション一覧から、[Outlook を起動します] アクションをダブルクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547452/310bce86-6a1d-7725-05ff-1950fac93e64.png)

4) 既定の設定のまま保存します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547452/938c5668-60a0-288e-172d-963d8adc91a1.png)

5) アクション一覧から、[Outlook からのメール メッセージの送信] アクションをダブルクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547452/9fce61ac-c7fe-16fb-8b29-9fe3b11b2e14.png)

6) [Outlook からのメール メッセージの送信] アクションのプロパティを設定します。設定値は下記の通りとなります。

|No | プロパティ | 設定値 |
|:--|:--|:--|
|1 | アカウント: | 自分のメールアドレス | 
|2 | 宛先:|  チャネルのメールアドレス |
|3 | 件名:|  Power Automate Desktop からの送信|
|4 | 本文:|  %UserInput%|

Outlook の設定を使用して送信するため、パターン B より設定内容が少ないことがわかります。

設定の画像
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547452/b369eda7-7d46-7a89-a708-395417d7db39.png)

デスクトップ フローの全体像です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547452/9ff64549-dcfc-fdad-a061-6da36da5646c.png)

PAD に貼り付けて使える Robin のサンプルは以下の通りです。
アカウント情報等をご自身の環境の値を設定してもらえれば使用できるはずです。

``` 
Display.InputDialog Title: $'''Teams に投稿するメッセージ''' Message: $'''Teams に投稿するメッセージを入力してください。''' InputType: Display.InputType.SingleLine IsTopMost: False UserInput=> UserInput ButtonPressed=> ButtonPressed
Outlook.Launch Instance=> OutlookInstance
Outlook.SendEmail Instance: OutlookInstance Account: $'''<自分のメールアドレス>''' SendTo: $'''<チャネルのメールアドレス>''' Subject: $'''Outlook からの送信''' Body: UserInput IsBodyHtml: False
``` 

# おわり
以上、3つのTeams への投稿パターンについて、まとめてみました。
安定性が高い実装を優先するか、添付ファイルの利用や設定の簡単さなどでどのパターンを利用するかを検討してみると良いかもしれません。

レコーダーなどで UI 要素を記録して Teams 自体を直接操作する方法もありますが、個人的には避けたい方法だと思っています。
GUI を介した操作は安定性に懸念がありますし、Teams はアップデートが多くかかりますので、保守性に課題があります。
そのため、使用頻度が高いフローや長期間使用するフローは、出来るだけレコーダーの利用をはじめとした GUI による操作を避けた実装を心がけたいと個人的には思っています。

# 参考情報
パターン A の Webhook での投稿は、シンプルなメッセージの投稿以外にも、装飾したカードによる投稿が可能です。
例えば以下のボタンがあったり、テキストが入力できるカードも投稿が行なえます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547452/9dddcffa-df74-dc8c-a417-f8fc8aecb6ff.png)

カードの詳細については、下記公開情報をご確認ください。
上の画像のメッセージのサンプルコードについても、記載があります。

https://docs.microsoft.com/ja-jp/microsoftteams/platform/webhooks-and-connectors/how-to/connectors-using