我们的租户上有一个服务帐户,该帐户具有一个Outlook邮箱和一个日历。
此服务帐户在其日历中创建事件,并通过Microsoft Graph向邀请发送邀请给与会者。
/ messages的服务帐户subscribes更新其自己邮箱的通知:
{
"changeType": "updated",
"notificationUrl": "https://webhook.azurewebsites.net/api/send/myNotifyClient",
"resource": "me/messages",
"expirationDateTime":"2016-11-20T18:23:45.9356913Z",
"clientState": "secretClientValue",
"latestSupportedTlsVersion": "v1_2"
}
如果其中一位与会者对新的会议日期建议做出了暂时性答复,我们将收到服务帐户收到的电子邮件通知,其中包含答复和建议日期:
{
...,
"resourceData": {
"@odata.type": "#Microsoft.Graph.Message",
"@odata.id": "Users/{service_account_id}/Messages/AAMkAGFlY2E0ZWM4LTA3OGEtNDY2OS04ZDA0LTA4YTA5OWIxMTcxMQBGAAAAAADNyiJ8h61FRpmwpx9BAnv-BwDH8bMHMKLFSakCYHIeBUnvAAAAAAEMAADH8bMHMKLFSakCYHIeBUnvAADz_ctmAAA="
}
}
我们的目标是获取此消息以及响应/日期信息。为此,我们进行GET /me/messages/{message_id}
request。 message_id
是通过订阅通知提供给我们的。
但是,尝试获取订阅通知提供的消息会导致ErrorItemNotFound
。在查看服务帐户的消息历史记录时,我们注意到最后一条消息的ID与订阅的ID匹配,除了一个字母之外:订阅中的字母比历史记录中找到的最后一条消息的字母小1。例如,订阅给出的message_id等于...hAAA=
,历史记录的最后一条消息给出...iAAA=
那太好了,因为当前我们必须发出一些真的很奇怪 / me / messages GET请求以获取我们想要的信息:
me/messages/{message_id}?$select=SingleValueExtendedProperties&$expand=microsoft.graph.eventMessage/event($select=id),singleValueExtendedProperties($filter%3Did+eq+'SystemTime+%7B00062002-0000-0000-C000-000000000046%7D+Id+0x8250'+or+id+eq+'SystemTime+%7B00062002-0000-0000-C000-000000000046%7D+Id+0x8251'+or+id+eq+'SystemTime+%7B6ED8DA90-450B-101B-98DA-00AA003F1305%7D+Id+0x00000009')
修改 我已将changeType更改为“ created”。该实现目前似乎可以正常工作。我将保持更新状态,因为行为似乎仍然不稳定。