Search code examples
twiliogoogle-calendar-apigoogle-api-nodejs-client

"ReferenceError: calendar is not defined" encountered in NodeJS but same code works in API Test Console in Google


Trying to follow this blog post Create a Smart Voicemail with Twilio, JavaScript and Google Calendar

When I run the code in Google Developer API Test Console, it works. However, the same parameters called within Twilio Function which runs NodeJS returns an error "ReferenceError: calendar is not defined"

I've made the Google Calendar events public and I've tried viewing it using the public URL and it works too. For someone reason calling it withing Twilio Functions is resulting in an error.

const moment = require('moment');
const {  google } = require('googleapis');

exports.handler = function(context, event, callback) {

  // Initialize Google Calendar API
  const cal = google.calendar({
    version: 'v3',
    auth: context.GOOGLE_API_KEY
  });

  //Read Appointment Date
  let apptDate = event.ValidateFieldAnswer;

  var status = false;

  const res = {
    timeMin: moment().toISOString(),
    timeMax: moment().add(10, 'minutes').toISOString(),
    items: [{
      id: context.GOOGLE_CALENDAR_ID
    }]
  };
  console.log(res);

  cal.freebusy.query({
    resource: res
  }).then((result) => {
    const busy = result.data.calendars[calendar].busy;
    console.log("Busy: " + busy);
    if (busy.length !== 0) {
      let respObj1 = {
        "valid": false
      };
      console.log("Failed");
      callback(null, respObj1);
    } else {
      let respObj1 = {
        "valid": true
      };
      console.log("Success");
      callback(null, respObj1);
    }
  }).catch(err => {
    console.log('Error: checkBusy ' + err);
    let respObj1 = {
      "valid": false
    };
    callback(null, respObj1);
  });

};

Have you encountered this before or is anyone able to identify the issue here?

Thanks


Solution

  • This line seems to be the issue:

    const busy = result.data.calendars[calendar].busy;

    As far as I can tell, calendar is never defined. This should work instead:

    const busy = result.data.calendars[context.GOOGLE_CALENDAR_ID].busy;

    It looks like this line of the code is different between the "Google Calendar FreeBusy Queries" and "Recording VoiceMails" sections of the tutorial and needs to be updated in the latter code sample.