[HULFT Square]GraphAPIを使ってTeamsへメッセージを送信

# この記事で出来ること
GraphAPIを使ってTeamsへメッセージを送信

# 認証について
Microsoft Graphの認証の詳細な仕組みはこちらを参考にして下さい。

https://learn.microsoft.com/ja-jp/graph/auth/auth-concepts

今回はユーザーに代わってアクセスする``委任アクセス``を使用します。

# 手順
## 1.AzureのEntraにアプリを作成
※こちらの記事を参考にしています。[Microsoft Teamsにつないでみた【認証編】](https://www.hulft.com/column/hulft-square-08)

### Azure Portalにログイン
https://azure.microsoft.com/ja-jp/get-started/azure-portal/

### 「Azure Active Directory」を選択しアプリの登録を行う

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3586761/64b6c6c2-99b2-0dde-ca89-ce69e20d0167.png)

※テナントが作成されていない場合はテナントの作成から始めて下さい。

## 2. アクセス許可を追加
Teamsのチャットへメッセージを送信する為に必要な権限を追加します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3586761/d1e4f289-fb07-58f4-bd97-ccb86d2bd438.png)

ドキュメントを参考にしてください。[チャットにメッセージを送信する アクセス許可](https://learn.microsoft.com/ja-jp/graph/api/chat-post-messages?view=graph-rest-1.0&tabs=http)

今回は ``ChatMessage.Send`` を追加しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3586761/825dd457-934a-6219-41b5-bb37a80e72df.png)

## 3. クライアントシークレットを発行
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3586761/9813564f-8dbf-b764-cbc1-feee660632df.png)

証明書とシークレットより新しいキーを発行します。大切に保管して下さい。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3586761/c5fad440-ef70-f78f-c1ca-d7fdaba471e3.png)


## 4. アプリへのアクセス許可を承認する
以下URLをChromeで叩きます。[手順1](https://learn.microsoft.com/ja-jp/graph/auth-v2-user?tabs=http)

```
https://login.microsoftonline.com/<tenant_id>/oauth2/v2.0/authorize?client_id=xxx&response_type=code&redirect_uri=xxx&scope=https://graph.microsoft.com/.default
```
ブラウザで認証画面が表示されるので **「承諾」** をクリック。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3586761/079cebba-d47e-f906-a485-b0ee959046c7.png)

アプリ作成時に指定したリダイレクトURIへ遷移すれば承認は完了です。

:::note warn
注意
アプリ単位で承認が必要になります。
:::

## 5. URLからコードを取得
遷移したページのURLからコードを取得します。このコードは次のアクセストークン取得の際、認証情報として使用します。
``<リダイレクトURL>?code=xxx&session_state=xxx``

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3586761/e0479009-8fe1-e048-65dd-cc1bf1cf5505.png)

## 6. アクセストークンを取得
### HULFT Square
※こちらの記事を参考にしています。
[Microsoft Teamsにつないでみた【認証編】　◎HULFT Squareの設定](https://www.hulft.com/column/hulft-square-08)

コネクションの作成からはじめます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3586761/3521c56a-c9ff-c355-a7a4-76c934a2c31a.png)

アクセストークンを取得するスクリプトを用意します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3586761/bf67f317-4c07-dbe7-19d7-58c104298105.png)

**POST実行処理**

パス：```<tenant_id>/oauth2/v2.0/token```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3586761/f5e4b3a1-8939-4a01-7649-783cd11a8928.png)

**・リクエスト/レスポンス/ヘッダ設定**
こちらを参考にしてください。[公式ドキュメント](https://learn.microsoft.com/ja-jp/graph/auth-v2-user?tabs=http#step-2-request-an-access-token)

**mapping**
クエリパラメータの値を入れて下さい。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3586761/6d681784-ccf4-603f-9311-fe11777c2624.png)


|キー|値|
|:-:|:-:|
|client_id|<1で作成したアプリのクライアントID>|
|grant_type|authorization_code|
|scope|https://service.flow.microsoft.com//.default|
|code|<6でURLから取得したコード>|
|redirect_uri|<1で設定したリダイレクトURI>|
|client_secret|<3で取得したクライアントシークレット>|

実行するとアクセストークンが取得できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3586761/a9ce658c-4519-19d4-977c-2396e6ba8daf.png)

実務で使用する場合はリフレッシュトークンを使用してアクセストークンを取得する等追加で考慮が必要だと思います。今回は検証用途で試しています。

## 7. HULFTSqaureのスクリプトを作成&実行
### コネクションを作成
認証用とは別にGraphAPIの呼び出しに必要です。
URL：``https://graph.microsoft.com``

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3586761/7dadcd82-85c9-b503-f440-5ad52c7251db.png)


Teamsへメッセージを送信するスクリプトを作成します。こちらのAPIを使用します。
[チャットにメッセージを送信する アクセス許可](https://learn.microsoft.com/ja-jp/graph/api/chat-post-messages?view=graph-rest-1.0&tabs=http)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3586761/bc05ef84-d20f-1101-b010-b15ebad855e7.png)

### POST実行処理（GraphAPI呼び出し）
接続先：``<GraphAPI用に作成したコネクション>``
パス：```/chats/{chat-id}/messages```

**必須設定**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3586761/479f2d4e-0776-5826-7a69-4a96ae7124fa.png)

{chat-id}はチャット内のメッセージのリンクをコピーから取得できます。teams.microsoft.com/l/message/``19:xxxxx@thread.v2``←ここ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3586761/1715c7bf-cbce-16f9-4b83-a6f0490a1ced.png)

**リクエスト設定**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3586761/093a1eeb-c174-2aac-4578-ee258d1159a4.png)

**レスポンス設定**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3586761/576d1484-976f-cd1f-5cbe-0f96b70f3e1b.png)

**ヘッダー設定**
Authorization：``Bearer ${アクセストークン}``　※6で取得したアクセストークン
Content-type：``application/json``

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3586761/c2b1a73e-7805-6419-814f-3ae34faf6d9e.png)

### スクリプト呼び出し
アクセストークンを取得するスクリプトを呼び出します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3586761/23fe4ea6-c4ba-9814-02d1-2bdd7440c9ed.png)

出力変数にアクセストークンがあることを確認します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3586761/739e24e1-f08f-8e04-834a-2002587a12ce.png)


### mapping
``content``にはチャットに書き込みたいメッセージを入力します。
スクリプト呼び出しの出力変数である``アクセストークン``も線をひきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3586761/64b7fe41-c6dd-08a1-c75f-0524541f2b1a.png)

設定が完了したら実行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3586761/d23bd1f5-2723-7d6b-39bf-e17fccabeb57.png)

## 8. Teamsのチャットを確認
無事メッセージが書き込まれていることが分かります！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3586761/5a0569bd-69ad-b775-c2fc-e35e3877b729.png)

# 最後に
参考になれば幸いです。
PowerAutomateの認証方法についても記事を載せています。