この記事で出来ること
GraphAPIを使ってTeamsへメッセージを送信
認証について
Microsoft Graphの認証の詳細な仕組みはこちらを参考にして下さい。
今回はユーザーに代わってアクセスする委任アクセス
を使用します。
手順
1.AzureのEntraにアプリを作成
※こちらの記事を参考にしています。Microsoft Teamsにつないでみた【認証編】
Azure Portalにログイン
「Azure Active Directory」を選択しアプリの登録を行う
※テナントが作成されていない場合はテナントの作成から始めて下さい。
2. アクセス許可を追加
Teamsのチャットへメッセージを送信する為に必要な権限を追加します。
ドキュメントを参考にしてください。チャットにメッセージを送信する アクセス許可
今回は ChatMessage.Send
を追加しました。
3. クライアントシークレットを発行
証明書とシークレットより新しいキーを発行します。大切に保管して下さい。
4. アプリへのアクセス許可を承認する
以下URLをChromeで叩きます。手順1
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
ブラウザで認証画面が表示されるので 「承諾」 をクリック。
アプリ作成時に指定したリダイレクトURIへ遷移すれば承認は完了です。
注意
アプリ単位で承認が必要になります。
5. URLからコードを取得
遷移したページのURLからコードを取得します。このコードは次のアクセストークン取得の際、認証情報として使用します。
<リダイレクトURL>?code=xxx&session_state=xxx
6. アクセストークンを取得
HULFT Square
※こちらの記事を参考にしています。
Microsoft Teamsにつないでみた【認証編】 ◎HULFT Squareの設定
コネクションの作成からはじめます。
アクセストークンを取得するスクリプトを用意します。
POST実行処理
パス:<tenant_id>/oauth2/v2.0/token
・リクエスト/レスポンス/ヘッダ設定
こちらを参考にしてください。公式ドキュメント
mapping
クエリパラメータの値を入れて下さい。
キー | 値 |
---|---|
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で取得したクライアントシークレット> |
実行するとアクセストークンが取得できます。
実務で使用する場合はリフレッシュトークンを使用してアクセストークンを取得する等追加で考慮が必要だと思います。今回は検証用途で試しています。
7. HULFTSqaureのスクリプトを作成&実行
コネクションを作成
認証用とは別にGraphAPIの呼び出しに必要です。
URL:https://graph.microsoft.com
Teamsへメッセージを送信するスクリプトを作成します。こちらのAPIを使用します。
チャットにメッセージを送信する アクセス許可
POST実行処理(GraphAPI呼び出し)
接続先:<GraphAPI用に作成したコネクション>
パス:/chats/{chat-id}/messages
{chat-id}はチャット内のメッセージのリンクをコピーから取得できます。teams.microsoft.com/l/message/19:xxxxx@thread.v2
←ここ
ヘッダー設定
Authorization:Bearer ${アクセストークン}
※6で取得したアクセストークン
Content-type:application/json
スクリプト呼び出し
出力変数にアクセストークンがあることを確認します。
mapping
content
にはチャットに書き込みたいメッセージを入力します。
スクリプト呼び出しの出力変数であるアクセストークン
も線をひきます。
8. Teamsのチャットを確認
無事メッセージが書き込まれていることが分かります!
最後に
参考になれば幸いです。
PowerAutomateの認証方法についても記事を載せています。