自動でMicrosoft teamsで個人あてにチャットを送る方法

#自動でMicrosoft teamsで個人あてにチャットを送る方法
　相手からの**電子メッセージにできるだけ早く、かつ漏れなく確認すること**は、業務上大事である。
メールは全体へ連絡したり情報共有するのは使いやすいが、**自身とあまり関係のないメッセージも大量に来る**ので漏れなく確認するのは難しい。チャットにはプッシュ通知機能があり、その連絡に気付きやすく効率的な連絡ができる。**今回は自動で個人あてにteamsにメッセージを送る方法を紹介する。**

##Microsoft Teamsを操作するプログラム

1. **Microsoft公式Teams app "Incoming Webhook"を使う。**  
   teamsに標準装備されている"Incoming Webhook"を使い、Python "request"や"pymsteams"を使ってメッセージをチームへ送る。※ただし"チーム"のみで個人には送れないので、通知専用の"チーム"を作成し、チャンネルで分けるなどする必要がある。  
https://docs.microsoft.com/ja-jp/microsoftteams/platform/webhooks-and-connectors/how-to/add-incoming-webhook
2. **Microsoft公式Tool "Power Automate"を使う**   
   簡単なメッセージの定期送信なら、これが一番簡単である。公式APIが"チーム"しか送れないのに対し、個人やグループチャットにも標準で送れる。ただ有償ライセンス(¥1630~/月)をユーザーごとに購入する必要がある。この方法も少し紹介する。
3. **Microsoft公式Tool "Power Automate for desktop"を使う**   
Power Automate for desktopは2021年3月3日にリリースされた、Windows 10 さえあれば無料で使えるRPAツール。ファイル操作やWeb操作、Microsoft Appの操作をNo codeで自動化できる。  
https://powerautomate.microsoft.com/ja-jp/desktop/
4. **Seleniumによりブラウザを操作して、Web版teamsを操作する。**  
スクレイピングToolであるSeleniumを使ってWeb版を自動化する方法。今回はこの方法によるTeams自動送信を紹介します。  
https://www.selenium.dev/

##1. Power Automate
power Automateの方法も非常に簡単なので紹介する。今回は既に有償ライセンスを購入していることを前提とする。

1. Access bellow link and sign in.  
   [Please decide flow name/flow timing/term](Please decide flow name/flow timing/term)
2. 左側にある "+作成" をclick.
3. 真ん中にある"スケジュール済みクラウドフロー" をclick.
4. "新しいステップ" をclick.
5. "Microsoft teams" を選択する
6. "チャットまたはチャネルでメッセージを投稿する" を選択する
7. 投稿先 に"Group chart" を選択し、送りたいグループチャットを選択する
8. 送りたいメッセージを入力する
9. 最後に保存する

##2. Selenium
　SeleniumはWebDriverを使用したAPIにより、Web ブラウザの操作を自動化するためのフレームワークであり、2004年にシカゴのThoughtWorksで始まり、JasonHuggins氏が内部のTimeand Expensesアプリケーションを自動テストするために作られた。現在ではブラウザアプリケーションの自動テスト以外でも使われている。

https://www.selenium.dev/

###Chrome Driver
　今回はGoogle Chromeの自動化を紹介する。Seleniumによるブラウザ操作には各ブラウザのdriverのダウンロードが必要である。以下のリンクから適当なフォルダにダウンロードして置いておこう。

-- **Download Link** --
　[Chrome driver](https://chromedriver.chromium.org/downloads)
　[Microsoft-edge driver](https://developer.microsoft.com/ja-jp/microsoft-edge/tools/webdriver/)

###install python selenium by pip
pip installでseleniumをinstallする。

```
pip install selenium
```
###Web版teamsの操作
　今回はChrome web driverを使ってWeb版TeamsをChromeで開いて操作する。
　開くページのURLにチャットの相手のユーザーネームが書いてるので、複数送りたい相手がいる場合はその箇所を送りたい相手に変更する。

```python:python
driver_path = r'/path/chromedriver.exe'
driver = webdriver.Chrome(executable_path = driver_path)

driver.get('https://teams.microsoft.com/dl/launcher/***' + Name +'**')
driver.maximize_window()
```
デスクトップアプリ版を使うかどうかアラートが出る場合があるので、例外処理でアラートへswichして"いいえ"を押す。

```python:python
try:
    alert = driver.switch_to.alert
    text = alert.text
    alert.dismiss()
except:
    pass
```
メッセージボックスをクリックして入力可能状態にし、過去の未送信のメッセージがある場合があるのでBack Spaceで消して、送りたいメッセージを送る。

```python:python
driver.find_element_by_xpath('message boxのxpath').click()
for i in range(30):
    driver.find_element_by_xpath('message boxのxpath').send_keys(Keys.BACK_SPACE)
message = """
Hello! jon
How are you doing?
Would you like to go fishing with me this weekend?
"""
driver.find_element_by_xpath('message boxのxpath').send_keys(message)
driver.find_element_by_id('send-message-button').click()
```


##まとめ
Microsoft teamsで個人あてにチャットを送る方法を紹介した。定期業務で忘れやすい人はこれでreminderを送るのもいいかもしれません。