2020 年 7 月の更新で、会議出席依頼における新しい時間の提案に関するプロパティが Microsoft Graph に追加されました。
実際に動きを見てみましょう。まず以下のように User01 から User02 へ明示的に allowNewTimeProposals を true にした会議出席依頼を送信します。
POST https://graph.microsoft.com/v1.0/users/User01@contoso.onmicrosoft.com/events
{
"subject": "Let's go for lunch",
"body": {
"contentType": "HTML",
"content": "Does late morning work for you?"
},
"start": {
"dateTime": "2020-07-28T12:00:00",
"timeZone": "Tokyo Standard Time"
},
"end": {
"dateTime": "2020-07-28T14:00:00",
"timeZone": "Tokyo Standard Time"
},
"location":{
"displayName":"Harry's Bar"
},
"attendees": [
{
"emailAddress": {
"address":"User02@contoso.onmicrosoft.com",
"name": "User02"
},
"type": "required"
}
],
"allowNewTimeProposals": true
}
User02 が受信した eventMessageRequest を見てみると、allowNewTimeProposals が true になっていることが分かります。デモのため、アイテムを 1 件のみ取得するように $top=1 としています。
GET https://graph.microsoft.com/v1.0/users/User02@contoso.onmicrosoft.com/messages/?$select=subject,microsoft.graph.eventMessageRequest/allowNewTimeProposals&$top=1
{
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users('User02%40rykoma03.onmicrosoft.com')/messages(subject,microsoft.graph.eventMessageRequest/allowNewTimeProposals)",
"@odata.nextLink": "https://graph.microsoft.com/v1.0/users/User02@contoso.onmicrosoft.com/messages/?$select=subject%2cmicrosoft.graph.eventMessageRequest%2fallowNewTimeProposals&$top=1&$skip=2",
"value": [
{
"@odata.type": "#microsoft.graph.eventMessageRequest",
"@odata.etag": "W/\"CwAAABYAAAAOmCTRuhGXToj3LolrhhYQAAR1EROc\"",
"id": "AAMkAGJiN2FkZTIwLWY0ODMtNDU3Yi04YTZiLTQzMDcyMGI2OWNiNABGAAAAAAC0eyYE7Ih3QZsKeUb6GLCqBwAOmCTRuhGXToj3LolrhhYQAAAAAAEMAAAOmCTRuhGXToj3LolrhhYQAAR1Gx9HAAA=",
"subject": "Let's go for lunch",
"allowNewTimeProposals": true
}
]
}
* 2020/7/27 現在、/messages/{id} でアイテムを取得すると allowNewTimeProposals が null になってしまっています。上記のように ID を指定しなければ正しく取得できます。
User02 で仮承諾しつつ新しい時間を提案してみましょう。まずは先ほどの会議出席依頼に対応する event を取得しないといけないので、以下のように実行して event の id を取得します。
GET https://graph.microsoft.com/v1.0/users/User02@contoso.onmicrosoft.com/messages/AAMkAGJiN2FkZTIwLWY0ODMtNDU3Yi04YTZiLTQzMDcyMGI2OWNiNABGAAAAAAC0eyYE7Ih3QZsKeUb6GLCqBwAOmCTRuhGXToj3LolrhhYQAAAAAAEMAAAOmCTRuhGXToj3LolrhhYQAAR1Gx9HAAA=?$expand=microsoft.graph.eventMessage/event
そして以下のように仮承諾しつつ新しい時間を提案します。
POST https://graph.microsoft.com/v1.0/users/User02@contoso.onmicrosoft.com/events/AAMkAGJiN2FkZTIwLWY0ODMtNDU3Yi04YTZiLTQzMDcyMGI2OWNiNABGAAAAAAC0eyYE7Ih3QZsKeUb6GLCqBwAOmCTRuhGXToj3LolrhhYQAAAAAAENAAAOmCTRuhGXToj3LolrhhYQAAR1GxteAAA=/tentativelyAccept
{
"comment": "Can you make the next day instead?",
"sendResponse": "true",
"proposedNewTime": {
"Start": {
"DateTime": "2020-07-29T12:00:00",
"TimeZone": "Pacific Standard Time"
},
"End": {
"DateTime": "2020-07-29T14:00:00",
"TimeZone": "Pacific Standard Time"
}
}
}
User01 が受け取った内容を以下のように取得してみると、proposedNewTime があり新しい時間を提案されていることが分かります。
GET https://graph.microsoft.com/v1.0/users/User01@contoso.onmicrosoft.com/messages?$select=subject,microsoft.graph.eventMessageResponse/proposedNewTime&$top=1
{
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users('User01%40rykoma03.onmicrosoft.com')/messages(subject,microsoft.graph.eventMessageResponse/proposedNewTime)",
"@odata.nextLink": "https://graph.microsoft.com/v1.0/users/User01@contoso.onmicrosoft.com/messages?$select=subject%2cmicrosoft.graph.eventMessageResponse%2fproposedNewTime&$top=1&$skip=1",
"value": [
{
"@odata.type": "#microsoft.graph.eventMessageResponse",
"@odata.etag": "W/\"DAAAABYAAADKF8masRMzQ4BmqIbV6OsxAARj4ZQp\"",
"id": "AAMkAGYxOTczODY2LTQwYzktNDFmYS05ZTIzLWZmNjAxYmM1MWYwZABGAAAAAACmFAp715xPRpcdN7o1X1D7BwDKF8masRMzQ4BmqIbV6OsxAAAAAAEMAADKF8masRMzQ4BmqIbV6OsxAARkbjgWAAA=",
"subject": "New Time Proposed: Let's go for lunch",
"proposedNewTime": {
"start": {
"dateTime": "2020-07-30T04:00:00",
"timeZone": "Tokyo Standard Time"
},
"end": {
"dateTime": "2020-07-30T06:00:00",
"timeZone": "Tokyo Standard Time"
}
}
}
]
}
新しい時間の提案は、上記のように eventMessageResponse で確認する以外に event 側からも確認できます。この場合は attendees の中を見る必要があります。
GET https://graph.microsoft.com/v1.0/users/User01@contoso.onmicrosoft.com/events/AAMkAGYxOTczODY2LTQwYzktNDFmYS05ZTIzLWZmNjAxYmM1MWYwZABGAAAAAACmFAp715xPRpcdN7o1X1D7BwDKF8masRMzQ4BmqIbV6OsxAAAAAAENAADKF8masRMzQ4BmqIbV6OsxAARkbhBnAAA=?$select=subject,attendees
{
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users('User01%40rykoma03.onmicrosoft.com')/events(subject,attendees)/$entity",
"@odata.etag": "W/\"yhfJmrETM0OAZqiG1ejrMQAEY+GUGw==\"",
"id": "AAMkAGYxOTczODY2LTQwYzktNDFmYS05ZTIzLWZmNjAxYmM1MWYwZABGAAAAAACmFAp715xPRpcdN7o1X1D7BwDKF8masRMzQ4BmqIbV6OsxAAAAAAENAADKF8masRMzQ4BmqIbV6OsxAARkbhBnAAA=",
"subject": "Let's go for lunch",
"attendees": [
{
"type": "required",
"status": {
"response": "tentativelyAccepted",
"time": "2020-07-27T15:13:41.4168668Z"
},
"proposedNewTime": {
"start": {
"dateTime": "2020-07-30T04:00:00",
"timeZone": "Tokyo Standard Time"
},
"end": {
"dateTime": "2020-07-30T06:00:00",
"timeZone": "Tokyo Standard Time"
}
},
"emailAddress": {
"name": "User02",
"address": "User02@contoso.onmicrosoft.com"
}
}
]
}
この後、提案を受け入れるかどうかはユーザーの判断です。受け入れるのであれば event の時間を更新してあげればよいです。
参考
Propose new meeting times in Outlook
https://docs.microsoft.com/en-us/graph/outlook-calendar-meeting-proposals