通过Google Apps脚本

时间:2015-12-06 22:31:59

标签: google-apps-script google-calendar-api

我已经创建了一个Google表单,可以在提交时将信息输入Google表格。

我创建了一段在提交时运行的Google Apps脚本代码,用于创建日历活动,并使用高级日历API在我创建的非主要Google日历上创建活动在表单所有者的Google帐户中。

作为活动对象的一部分,我设置了一个attendees属性收件人电子邮件地址数组,用于接收活动邀请。 我还将sendNotifications设置为true。

通过API创建事件时,我可以看到事件是在我指定的日历中创建的。 与会者列表中填充了我指定的收件人电子邮件地址。

拥有Google帐户的收件人会将日历活动作为暂定约会直接添加到其日历中。 非Google收件人(例如Hotmail用户,Exchange用户,Office 365等)只是收到邀请。

除此之外,通过日历UI编辑创建的事件会提示我“更新客人”#34;变化确认这一点会导致非Google收件人成功收到有关事件更改的电子邮件通知。 此外,直接通过日历用户界面创建活动并指定非Google与会者也会导致邀请成功投放。

只是通过Calendar API创建活动似乎无法运作。

更复杂的是,如果我访问Google events reference page,并使用试一试!表单(使用OAuth连接到API),那么我可以将数据发布到API并成功接收来自非Google地址的活动邀请。

我想我可以连接某种Google API服务帐户,编写一些Google Apps脚本代码,通过OAuth插件通过该服务帐户进行授权,并尝试通过以下方式调用API对Google Calendar API的某种外部API请求 - 但我不确定这是否有效,而且我必须弄清楚如何从Google Apps脚本中获取OAuth内容。即便如此,当Google Apps脚本无论如何都支持在内部使用Calendar API时,它似乎有点过分。

添加:我已授权脚本按照this article中的建议,通过脚本编辑器的高级Google服务区域以及开发人员控制台使用Calendar API。

我还发现this article建议修补一个事件以支持发送邀请 - 结果相同但仍然不适用于非Google帐户

我的代码如下:

  // set variables
  var appointmentWith = "Nick W";
  var location = "The Boardroom";
  var description = "Add some notes to the appointment";
  var calendar = "1v1.....u80@group.calendar.google.com"; // calendar id of calendar
  /*
  joinedStart and endDate are set elsewhere
  */

  // create an event object
  var event = {
    summary: appointmentWith, // the title of the appointment
    location: location, // the location of the appointment
    description: description, // the form description / submitted values
    start: {
      dateTime: joinedStart.toISOString() // start time of the appointment
    },
    end: {
      dateTime: endDate.toISOString() // end time of the appointment
    },
    sendNotifications: true, // email the invite
    attendees: [
      {email: recipient}, // set the recipient email address
      {email: "user@googleaccount.com"},
      {email: "non-google-user@hotmail.com"}
    ]
  };



  Logger.log("creating new calendar event");
  event = Calendar.Events.insert(event, calendar); // creates the event but won't notify non-Google email accounts
  Logger.log(event.id);
  Logger.log("new calendar event created");

  // attempting to patch the event in the hope this will fix the issue
  Logger.log("sending further invites");
  event.attendees.push({email:"user@hotmail.com"});
  event = Calendar.Events.patch(event, calendar, event.id, { sendNotifications:true});

  Logger.log("sent");

1 个答案:

答案 0 :(得分:0)

此:

sendNotifications:true,//通过电子邮件发送邀请

应设置为请求参数,而不是作为Event主体的一部分。

Calendar.Events.insert(事件,日历,{sendNotifications:true})