2017-10-11 43 views
0

我正在尝试向gmail发送会议请求,并使用googleapis和google-auth-library库将其注册或存储在Google日历中。 我可以将事件发送到Google日历,但我无法将该事件作为邮件发送。所以任何人都可以帮助我如何做到这一点。我已经尝试了不同选项的下面的代码,但它不工作。如何使用Google-api和nodejs发送会议请求?

var fs = require('fs'); 
var readline = require('readline'); 
var google = require('googleapis'); 
var googleAuth = require('google-auth-library'); 
const moment = require('moment'); 

var SCOPES = ['https://www.googleapis.com/auth/calendar']; 
var TOKEN_DIR = (process.env.HOME || process.env.HOMEPATH || 
    process.env.USERPROFILE) + '/.credentials/'; 
var TOKEN_PATH = TOKEN_DIR + 'calendar-nodejs-quickstart.json'; 

fs.readFile('client_secret.json', function processClientSecrets(err, content) { 
    if (err) { 
     console.error('Error loading client secret file: ' + err); 
     return; 
    } else { 
     authorize(JSON.parse(content), createEvents); 
    } 
}); 

function authorize(credentials, callback) { 
    var clientSecret = credentials.installed.client_secret; 
    var clientId = credentials.installed.client_id; 
    var redirectUrl = credentials.installed.redirect_uris[0]; 
    var auth = new googleAuth(); 
    var oauth2Client = new auth.OAuth2(clientId, clientSecret, redirectUrl); 
    fs.readFile(TOKEN_PATH, function(err, token) { 
     if (err) { 
      getNewToken(oauth2Client, callback); 
     } else { 
      oauth2Client.credentials = JSON.parse(token); 
      callback(oauth2Client); 
     } 
    }); 
} 

function getNewToken(oauth2Client, callback) { 
    var authUrl = oauth2Client.generateAuthUrl({ 
     access_type: 'offline', 
     scope: SCOPES 
    }); 
    var rl = readline.createInterface({ 
     input: process.stdin, 
     output: process.stdout 
    }); 
    rl.question('Enter the code from that page here: ', function(code) { 
     rl.close(); 
     oauth2Client.getToken(code, function(err, token) { 
      if (err) { 
       console.error('Error while trying to retrieve access token', err); 
       return; 
      } 
      oauth2Client.credentials = token; 
      storeToken(token); 
      callback(oauth2Client); 
     }); 
    }); 
} 
function storeToken(token) { 
    try { 
     fs.mkdirSync(TOKEN_DIR); 
    } catch (err) { 
     if (err.code != 'EEXIST') { 
      throw err; 
     } 
    } 
    fs.writeFile(TOKEN_PATH, JSON.stringify(token)); 
} 
function createEvents(authClient) { 
    var calendar = google.calendar('v3'); 
    calendar.events.insert({ 
     auth: authClient, 
     calendarId: "primary", 
     resource: { 
      start: { 
       dateTime: moment().add(1, "m").format(), 
       timeZone: "America/New_York" 
      }, 
      end: { 
       dateTime: moment().add(3, "m").format(), 
       timeZone: "America/New_York" 
      }, 
      attendees: [ 
       { email: "***********************" } 
      ], 
      reminders: { 
       useDefault: false, 
       overrides: [ 
        { method: "email", minutes: 1 }, 
        { method: "popup", minutes: 1 } 
       ] 
      }, 
      summary: "Testing google apis", 
      description: "Testing apis " 
     } 
    }, function(err, something) { 
     if (err) { 
      console.error(err); 
     } else { 
      console.log(something); 
     } 
    }); 
} 

回答

0

Create Events介绍如何创建日历事件,并将它们添加到您的用户的日历。

要创建或添加使用的的NodeJS事件,您可以使用在documentation提供的代码:

// Refer to the Node.js quickstart on how to setup the environment: 
// https://developers.google.com/google-apps/calendar/quickstart/node 
// Change the scope to 'https://www.googleapis.com/auth/calendar' and delete any 
// stored credentials. 

var event = { 
    'summary': 'Google I/O 2015', 
    'location': '800 Howard St., San Francisco, CA 94103', 
    'description': 'A chance to hear more about Google\'s developer products.', 
    'start': { 
    'dateTime': '2015-05-28T09:00:00-07:00', 
    'timeZone': 'America/Los_Angeles', 
    }, 
    'end': { 
    'dateTime': '2015-05-28T17:00:00-07:00', 
    'timeZone': 'America/Los_Angeles', 
    }, 
    'recurrence': [ 
    'RRULE:FREQ=DAILY;COUNT=2' 
    ], 
    'attendees': [ 
    {'email': '[email protected]'}, 
    {'email': '[email protected]'}, 
    ], 
    'reminders': { 
    'useDefault': false, 
    'overrides': [ 
     {'method': 'email', 'minutes': 24 * 60}, 
     {'method': 'popup', 'minutes': 10}, 
    ], 
    }, 
}; 

calendar.events.insert({ 
    auth: auth, 
    calendarId: 'primary', 
    resource: event, 
}, function(err, event) { 
    if (err) { 
    console.log('There was an error contacting the Calendar service: ' + err); 
    return; 
    } 
    console.log('Event created: %s', event.htmlLink); 
}); 

您可以选择添加事件的元数据,当您创建日历 事件。如果您在创建过程中选择不添加元数据,则可以使用events.update()更新许多字段,即 ;但是,某些 字段(例如事件ID)只能在操作期间设置为 events.insert()

您还可以使用实时数据看到try it的API请求和响应。

相关问题