Как я могу создать событие календаря в Outlook с Microsoft Graph API?
У меня есть приложение, которое интегрируется с Office365, и я пытаюсь создать событие календаря в календаре Outlook с помощью Microsoft Graph API. Вот что у меня так далеко:
request.post({
url:'https://graph.microsoft.com/v1.0/me/events',
form: {
"Id": null,
"Subject": "Discuss the Calendar REST API",
"Body": {
"ContentType": "Text",
"Content": "This is some content."
},
"Start": {
"DateTime": "2016-01-24T18:00:00",
"TimeZone": "Pacific Standard Time"
},
"End": {
"DateTime": "2016-01-25T19:00:00",
"TimeZone": "Pacific Standard Time"
},
"ShowAs": "Free",
"IsReminderOn":false
},
headers: {
"Authorization": "Bearer " + access_token,
"Content-Type": "application/json"
}
}, function(err, httpResponse, body) {
if (err) {
console.log('addMicrosoftAccessToken() ERROR = ' + err);
callback(err, false);
} else {
console.log('httpResponse = ' + JSON.stringify(httpResponse));
callback(null, true);
}
})
Проблема в том, что событие не сохраняется в календаре пользователей Outlook. Кроме того, я не получаю сообщение об ошибке в журнале. Я подозреваю, что я не отправляю правильные данные формы в запросе. Есть идеи?
ОБНОВЛЕНИЕ: вот httpResponse
Я получаю в журнале:
{
"statusCode": 500,
"body": "{\r\n \"error\": {\r\n \"code\": \"UnknownError\",\r\n \"message\": \"\",\r\n \"innerError\": {\r\n \"request-id\": \"8ebe2efc-649c-4d8d-bee1-be2457cc3a45\",\r\n \"date\": \"2016-01-25T19:05:27\"\r\n }\r\n }\r\n}",
"headers": {
"cache-control": "private",
"transfer-encoding": "chunked",
"content-type": "application/json",
"server": "Microsoft-IIS/8.5",
"request-id": "8ebe2efc-649c-4d8d-bee1-be2457cc3a45",
"client-request-id": "8ebe2efc-649c-4d8d-bee1-be2457cc3a45",
"x-ms-ags-diagnostic": "{\"ServerInfo\":{\"DataCenter\":\"East US\",\"Slice\":\"SliceB\",\"ScaleUnit\":\"000\",\"Host\":\"AGSFE_IN_4\",\"ADSiteName\":\"EST\"}}",
"outboundduration": "707.5019",
"duration": "713.2419",
"x-powered-by": "ASP.NET",
"date": "Mon, 25 Jan 2016 19:05:27 GMT",
"connection": "close"
},
"request": {
"uri": {
"protocol": "https:",
"slashes": true,
"auth": null,
"host": "graph.microsoft.com",
"port": 443,
"hostname": "graph.microsoft.com",
"hash": null,
"search": null,
"query": null,
"pathname": "/v1.0/me/events",
"path": "/v1.0/me/events",
"href": "https://graph.microsoft.com/v1.0/me/events"
},
"method": "POST",
"headers": {
"Authorization": "Bearer blah blah",
"Content-Type": "application/x-www-form-urlencoded",
"Accept": "application/json",
"content-length": 643
}
}
}
ОБНОВЛЕНИЕ 2: Эта ссылка называется "Создать событие", и, похоже, ответ перечислен в разделах запроса и ответа, что делает ее особенно запутанной: http://graph.microsoft.io/docs/api-reference/v1.0/api/event_post_instances Также в приведенной выше ссылке, где перечислены
POST https://graph.microsoft.com/v1.0/me/events/<id>/instances
что такое <id>
? Это не говорит мне, какой идентификатор должен быть?
ОБНОВЛЕНИЕ 3: Эта ссылка также называется "Создать событие", но она имеет другой URL-адрес POST:
http://graph.microsoft.io/docs/api-reference/v1.0/api/user_post_events
Очень запутанно.
1 ответ
Причина, по которой ваш запрос me/events не выполняется, заключается в том, что вы использовали поток авторизации Azure Active Directory (AAD) для доступа к личному календарю учетной записи Microsoft (Live Id). AAD позволяет создавать пользователей, сопоставленных с учетными записями Microsoft, так что при запросе токена AAD вы входите с учетными данными учетной записи Microsoft. Таким образом, ваши учетные данные могут быть использованы для доступа как к бизнес (на работе или в школе), так и к потребительским (личным) услугам. Несмотря на то, что учетные данные являются общими, существует две разные учетные записи пользователей. При доступе к бизнес-службам, таким как OneDrive для бизнеса или SharePoint, необходимо войти в систему с учетной записью AAD в контексте вашей работы или школьной организации. При доступе к потребительским службам, таким как Hotmail или OneDrive, вам необходимо подключиться к учетной записи Microsoft (Live Id). Вы запрашиваете попытку доступа к учетной записи Outlook в контексте вашей организации, которая не существует, поскольку ваш адрес электронной почты уже обслуживается личной учетной записью Outlook, связанной с вашей учетной записью Microsoft. Пожалуйста, используйте конвергентный поток авторизации ( http://graph.microsoft.io/en-us/docs/authorization/converged_auth), чтобы войти в свою личную учетную запись Microsoft, и вы сможете получить доступ к своей личной электронной почте и календарю. В качестве альтернативы вы можете продолжать использовать процесс авторизации AAD для доступа к рабочим или школьным календарям для пользователей AAD, не привязанных к учетным записям Microsoft.