LoginSignup
0
0

More than 1 year has passed since last update.

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

Last updated at Posted at 2022-01-04

はじめに

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

必要なもの

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

準備

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

名称を入力し登録
image.png

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

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

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

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

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

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

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

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

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

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

流れは
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でコマンドを発射できます
image.png

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

予定を作成する

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

@UserId =hogehoge@test365.onmicrosoft.com
@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の予定表で確認してみましょう
image.png

@UserId =hogehoge@test365.onmicrosoft.com
@AADToekn=Bearer eyJ0eXAiOiJKV1QiLC........
@id=AAMkAGRhO.....
delete https://graph.microsoft.com/v1.0/users/{{UserId}}/calendar/events/{{id}}
Authorization: {{ AADToekn }}

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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0