Outlookの予定表をバックエンドから作成する


はじめに

Webシステムで管理している情報をOutlookの予定表に出力、削除を行います
バックエンドと書いていますが、本記事ではREST Apiを呼んで操作を行います。
ユーザアクセスの必要がない方法なので、バッチやWebサービスから操作することが出来ます

必要なもの

  • Azureサブスクリプション
  • AzureActiveDirectryo(以下AAD)の管理者権限(他人に依頼しても可)
  • Restを叩ける環境(本記事ではVSCodeのREST Clientを使用)

準備

まずはAADの権限周りを設定しましょう
AADにアクセス
アプリの登録から新規登録を選択

名称を入力し登録

APIアクセス許可からアクセス許可の追加を選択

大きすぎてボタンと思わないMicrosoftGraphを選択

アプリケーションの許可を選択

calendarと入力し、検索結果のCalendards.ReadWriteを選択しアクセス許可の追加を選択
今回はカレンダーのイベント作成を行うので、上記の権限ですが、それ以外は
MicrosoftGraph
ページを確認して適切な権限を付与しましょう。

証明書とシークレットから新しいクライアントシークレットを選択

クライアントシークレットの説明と有効期限を選択し追加を選択

値をどこかに保存しておきましょう。これは再表示されません。パスワード的なものですね

AAD管理者でログインし***に管理者の同意を与えますを選択

アプリケーション(クライアント)とディレクトリ(テナント)IDを保存しておきましょう

いよいよカレンダーイベント作成

流れは
MicrosoftGraphにログインするとトークンが返ってくるので、WebAPIにセットし各種APIを呼び出す

MicrosoftGraphにログイン

@ClientID=保存しておいたアプリケーション(クライアント)
@ClientSecret=保存しておいたクライアントシークレットの値
@Tenant=保存しておいたディレクトリ(テナント)ID
POST https://login.microsoftonline.com/{{Tenant}}/oauth2/v2.0/token HTTP/1.1
Host: login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded

client_id={{ClientID}}
&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default
&client_secret={{ClientSecret }}
&grant_type=client_credentials

VSCodeのRESTClientだとCtrl+Alt+rでコマンドを発射できます

ログインに成功するとaccess_tokenが返ってきますので、保存しておきます

予定を作成する

それでは予定を作成してみましょう。
UserId:予定を作成するユーザ(メールアドレス)
AADToekn:ログインで得られたトークンにBearer をつけたもの
Json:予定情報
transactionId:ユニークID(GUIDがいいと思います)

@UserId [email protected]
@AADToekn=Bearer eyJ0eXAiOiJKV1QiLCJ...............
###
post https://graph.microsoft.com/v1.0/users/{{UserId}}/calendar/events
Content-type: application/json
Authorization: {{ AADToekn }}

{
  "subject": "test",
  "start": {
      "dateTime": "2022-01-04T00:00:00",
      "timeZone": "Asia/Tokyo"
  },
  "end": {
      "dateTime": "2022-01-05T00:00:00",
      "timeZone": "Asia/Tokyo"
  },
  "location":{
      "displayName":"年始の出勤"
  },
  "isAllDay":true,

  "transactionId":"F0A42756-575E-4590-82D6-4C18FCD2355F"
}

jsonのプロパティはeventリソースの種類から確認できます

Outlookの予定表で確認してみましょう

@UserId [email protected]
@AADToekn=Bearer eyJ0eXAiOiJKV1QiLC........
@id=AAMkAGRhO.....
delete https://graph.microsoft.com/v1.0/users/{{UserId}}/calendar/events/{{id}}
Authorization: {{ AADToekn }}

で削除も可能です。
idは予定を作成した時のレスポンスに入っています。