ответ на push-уведомление outlook api

Настраиваю push-уведомление с помощью outlook api, сервер написан на nodejs. Это почтовый запрос, который клиент делает для подписки.

POST /api/v2.0/me/subscriptions HTTP/1.1
Host: outlook.office.com
Content-Type: application/json
client-request-id: f7d3812g-dfbz-4eb5-8edg-0f9a3ad716aq
User-Agent: node-outlook/2.0
return-client-request-id: true
X-Anchor-Mailbox: [email protected]
Authorization: Bearer "ACCESS_TOKEN"
Content-Type: application/json

{
"@odata.type":"#Microsoft.OutlookServices.PushSubscription",
"Resource": "https://outlook.office.com/api/v2.0/me/events",
"NotificationURL": "https://mywebsite.azurewebsites.net/push",  
"ChangeType": "Created,Deleted,Updated"
}

Затем сервер nodejs отвечает токеном проверки, который был сгенерирован службой уведомлений Outlook.

response.writeHead(200, { 'Content-Type': 'text/plain' });
response.write(validation_token);
response.end();

Затем клиент (который отправил исходный почтовый запрос) получает следующий ответ

{
 "@odata.context":"https://outlook.office.com/api/v2.0/$metadata#Me/Subscription/$entity",
 "@odata.type": "#Microsoft.OutlookServices.PushSubscription",
 "@odata.id": "https://outlook.office.com/api/v2.0/Users('00034001-ffef-f16e-0000-000000000000@74df9q7f-e9s6-40ad-b43w-aaaaaaaaaaaa')/Subscriptions('RERFNkJFNGUsNEE1My00RjFFLUExQkMtQkU1NkQ9OTdDOTlBXzAwMDM0MDAxLUZGRUYtZTE2RS0wMDAwLTAwMDAwMDAwMEAwMA==')",
 "Id": "RERFNkJFNGUsNEE1My00RjFFLUExQkMtQkU1NkQ9OTdDOTlBXzAwMDM0MDAxLUZGRUYtZTE2RS0wMDAwLTAwMDAwMDAwMEAwMA==",
 "Resource": "https://outlook.office.com/api/v2.0/me/messages",
  "ChangeType": "Created, Updated, Deleted, Missed",
  "NotificationURL": "https://mywebsite.azurewebsites.net/push",
  "SubscriptionExpirationDateTime": "2017-03-30T09:35:37.6586596Z",
  "ClientState": null

}

Именно это и должно происходить в документации по Outlook. https://dev.outlook.com/restapi/concepts/webhooks

Этот процесс проверяет NotificationURL для получения push-уведомлений от Outlook. Конечная точка NotificationURL получает ответ от Outlook при создании события, но не тот, который мне нужен !!!

Я должен был ожидать получить что-то вроде этого:

{
"value": [
    {
        "@odata.type": "#Microsoft.OutlookServices.Notification",
        "Id": null,
        "SubscriptionId": "Mjk3QNERDQQ==",
        "SubscriptionExpirationDateTime": "2015-04-23T22:46:13.8805047Z",
        "SequenceNumber": 1,
        "ChangeType": "Created",
        "Resource" : "https://outlook.office.com/api/v2.0/Users('ddfcd489-628b-7d04-b48b-20075df800e5@1717622f-1d94-c0d4-9d74-f907ad6677b4')/Events('AAMkADNkNmAA=')",
        "ResourceData": {
            "@odata.type": "#Microsoft.OutlookServices.Event",
            "@odata.id": "https://outlook.office.com/api/v2.0/Users('ddfcd489-628b-7d04-b48b-20075df800e5@1717622f-1d94-c0d4-9d74-f907ad6677b4')/Events('AAMkADNkNmAA=')",
            "Id": "AAMkADNkNmAA="
        }
    }
 ]
}

Но вместо этого я получаю что-то вроде этого

   {
    _readableState: 
    ReadableState {
        objectMode: false,
        highWaterMark: 16384,
        buffer: BufferList { head: null, tail: null, length: 0 },
        length: 0,
        pipes: null,
        pipesCount: 0,
        flowing: null,
        ended: false,
        endEmitted: false,
        reading: false,
        sync: true,
        needReadable: false,
        emittedReadable: false,
        readableListening: false,
        resumeScheduled: false,
        defaultEncoding: 'utf8',
        ranOut: false,
        awaitDrain: 0,
        readingMore: true,
        decoder: null,
        encoding: null }, .......

И это тело ответа продолжается еще 600 строк.

Я знаю, что там много чего происходит, но мы будем очень благодарны за любые советы или помощь.


person Kashif Iqbal    schedule 23.03.2017    source источник
comment
Вам следует разместить свой код там, где вы пытаетесь прочитать полученные данные. То, что вы там показываете, похоже на объект узла на основе быстрого поиска readableState (github.com / nodejs / node / issues / 445). Я предполагаю, что вы сбрасываете не тот объект.   -  person Jason Johnston    schedule 23.03.2017
comment
@JasonJohnston Это код: console.log ('это в push-уведомлениях', util.inspect (request, false, null)) response.writeHead (200, {'Content-Type': 'text / html'} ); response.write ('Изменить во входящих'); response.end (); } Данные push-уведомления принимаются в конечной точке уведомления и выводятся на экран. Я не занимаюсь анализом или очисткой данных, просто получая их.   -  person Kashif Iqbal    schedule 23.03.2017


Ответы (1)


Я только что нашел решение. Когда я читаю запрос из уведомления Outlook, я должен переключить поток, текущий на on, по умолчанию это было установлено на null (см. ReadableState JSON выше).

Это очень просто, просто привяжите on к телу запроса и используйте обратный вызов. Более подробную информацию можно найти здесь: https://www.sandersdenardi.com/readable-writable-transform-streams-node/

Так это становится

 request.on('data', function(record) {
    console.log('received: ' + record);
});
person Kashif Iqbal    schedule 24.03.2017