Outlook 使用 NodeJS 创建日历事件

Outlook Create calendar event with NodeJS

我需要使用 NodeJS 脚本在 Outlook 中创建一个日历事件。我到处搜索并尝试了不同的 npm 包,但我没有得到解决方案。

我正在尝试使用以下代码创建日历事件:

const rp = require('request-promise');

let token = "<access token>"

var jsonBody = {
    "Subject": "test event",
    "Body": {
        "ContentType": "HTML",
        "Content": "hello world"
    },
    "Start": {
        "DateTime": "2020-10-21T10:10:00",
        "TimeZone": "India Standard Time"
    },
    "End": {
        "DateTime": "2020-10-21T11:10:00",
        "TimeZone": "India Standard Time"
    },
    "location": {
        "displayName": "Noida"
    },
    "Attendees": [
        {
            emailAddress: {
                address: "yyy@yyy.com",
                name: "yyy yyy"
            },
            type: "required"
        },
        {
            emailAddress: {
                address: "yyy@yyy.com",
                name: "yyy yyy"
            },
            type: "required"
        }
    ]
};
///me/calendar/events
var optionsForCreatingcalendar = {
    uri: 'https://outlook.office.com/api/v2.0/me/events',
    port: 443,
    method: 'POST',
    headers: {
        'Authorization': 'Bearer ' + token,
        'Content-Type': 'application/json'
    },
    json: true,
    body: jsonBody,
    resolveWithFullResponse: true,
    simple: false
};

// --- API call using promise-----
rp(optionsForCreatingcalendar)
    .then(function (response) {
        console.log(response);
    }, function (err) {
        console.log(err);

    });

但是代码有些问题。它抛出如下错误:

 error: {
      code: 'UnableToDeserializePostBody',
      message: 'were unable to deserialize '
    }

请帮我看看我在上面的代码中遗漏了什么。

谢谢

https://github.com/jasonjoh/node-outlook or https://www.npmjs.com/package/node-outlook

我想向您推荐那些使用日历事件的库 API。 如果你不想使用它,那么你需要通过outlook发送序列化数据API.

创建事件的示例代码。

var outlook = require('node-outlook');

var newEvent = {
    "Subject": "Discuss the Calendar REST API",
    "Body": {
        "ContentType": "HTML",
        "Content": "I think it will meet our requirements!"
    },
};

let createEventParameters = {
    token: ['access token will come here'],
    event: newEvent
};
outlook.calendar.createEvent(createEventParameters, function (error, event) {
    if(error) {
        console.log(error);                 
    } else {
        console.log(event);                         
    }
});

在您的情况下,您需要使用 jsonBody 而不是 newEvent。那么它将起作用。

var outlook = require('node-outlook');

var jsonBody = {
    "Subject": "test event",
    "Body": {
        "ContentType": "HTML",
        "Content": "hello world"
    },
    "Start": {
        "DateTime": "2020-10-21T10:10:00",
        "TimeZone": "India Standard Time"
    },
    "End": {
        "DateTime": "2020-10-21T11:10:00",
        "TimeZone": "India Standard Time"
    },
    "location": {
        "displayName": "Noida"
    },
    "Attendees": [
        {
            emailAddress: {
                address: "yyy@yyy.com",
                name: "yyy yyy"
            },
            type: "required"
        },
        {
            emailAddress: {
                address: "yyy@yyy.com",
                name: "yyy yyy"
            },
            type: "required"
        }
    ]
};

let createEventParameters = {
    token: ['access token will come here'],
    event: jsonBody
};
outlook.calendar.createEvent(createEventParameters, function (error, event) {
    if(error) {
        console.log(error);                 
    } else {
        console.log(event);                         
    }
});

这是使用 node-outlook 库的示例代码。

jsonBody中的所有属性请使用 PascalCase。那行得通。

var jsonBody = {
 Subject: "test event",
 Body: {
   ContentType: "HTML",
   Content: "hello world",
 },
Start: {
   DateTime: "2020-10-21T10:10:00",
   TimeZone: "India Standard Time",
 },
End: {
   DateTime: "2020-10-21T11:10:00",
   TimeZone: "India Standard Time",
},
Location: {
  DisplayName: "Noida",
},
Attendees: [
{
    EmailAddress: {
       Address: "yyy@yyy.com",
      Name: "yyy yyy",
    },
    Type: "required",
},
{
    EmailAddress: {
      Address: "yyy@yyy.com",
      Name: "yyy yyy",
    },
    Type: "required",
  },
 ],
};