Как я могу создать событие календаря в 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.

Другие вопросы по тегам