javascript - 多个日期条目

标签 javascript node.js firebase dialogflow-es

这里是一些意图和实体的图像

enter image description here

enter image description here

enter image description here

enter image description here

enter image description here

我正在从用户那里收集日期来创建谷歌日历事件,但是一旦我添加了第二个日期的代码,即使它没有在使用中,它也无法用于两个日期中的任何一个 它在 firebase 中给出了这个错误:

TypeError: Cannot read property 'split' of undefined at exports.dialogflowFirebaseFulfillment.functions.https.onRequest (/srv/index.js:38:68) at cloudFunction (/srv/node_modules/firebase-functions/lib/providers/https.js:37:41) at /worker/worker.js:783:7 at /worker/worker.js:766:11 at _combinedTickCallback (internal/process/next_tick.js:132:7) at process._tickDomainCallback (internal/process/next_tick.js:219:9)

这是我的代码

   function makeAppointment2 (agent) {
   const dateTimeStart = new Date(Date.parse(agent.parameters.date.split('T')[0] + 'T' + agent.parameters.time.split('T')[1].split('+')[0] + timeZoneOffset));
   const dateTimeEnd = new Date(new Date(dateTimeStart).setHours(dateTimeStart.getHours() + 1));
   const dateTimeStart2 = new Date(Date.parse(agent.parameters.date2.split('T')[0] + 'T' + agent.parameters.time2.split('T')[1].split('+')[0] + timeZoneOffset));
   const dateTimeEnd2 = new Date(new Date(dateTimeStart2).setHours(dateTimeStart2.getHours() + 1));
   const appointmentTimeString = dateTimeStart.toLocaleString(
     'en-US',
     { month: 'long', day: 'numeric', hour: 'numeric', timeZone: timeZone }
   );
   const appointmentTimeString2 = dateTimeStart2.toLocaleString(
     'en-US',
     { month: 'long', day: 'numeric', hour: 'numeric', timeZone: timeZone }
   );
   return createCalendarEvent2(dateTimeStart, dateTimeEnd, name, location, dateTimeStart2, dateTimeEnd2).then(() => {
     agent.add(`Great Mr/Mrs ${name}, your appointment has been scheduled on ${appointmentTimeString} & ${appointmentTimeString2}!.`);
     agent.add(`${response2}`);
   }).catch(() => {
     agent.add(`I'm sorry Mr/Mrs ${name}, there are no slots available for ${appointmentTimeString} Please choose another date.`);
   });
 function createCalendarEvent2 (dateTimeStart, dateTimeEnd, appointment_name, location, dateTimeStart2, dateTimeEnd2) {
  return new Promise((resolve, reject) => {
    calendar.events.list({
      auth: serviceAccountAuth,
      calendarId: calendarId,
      timeMin: dateTimeStart.toISOString(),
      timeMax: dateTimeEnd.toISOString()
    }, (err, calendarResponse) => {

      if (err || calendarResponse.data.items.length > 0) {
        reject(err || new Error('Requested time conflicts with another appointment'));
      } else {

        calendar.events.insert({ auth: serviceAccountAuth,
          calendarId: calendarId,
          resource: {
   'summary': appointment_name + "1st" ,
   'description': location,
   'start': {
     'dateTime': dateTimeStart,
   },
   'end': {
     'dateTime': dateTimeEnd,
   },
 } ,
        }, (err, event) => {
          err ? reject(err) : resolve(event);
        }
        );
      }
    });
    calendar.events.list({
      auth: serviceAccountAuth,
      calendarId: calendarId,
      timeMin: dateTimeStart2.toISOString(),
      timeMax: dateTimeEnd2.toISOString()
    }, (err, calendarResponse) => {

      if (err || calendarResponse.data.items.length > 0) {
        reject(err || new Error('Requested time conflicts with another appointment'));
      } else {

        calendar.events.insert({ auth: serviceAccountAuth,
          calendarId: calendarId,
          resource: {
   'summary': appointment_name + "2nd" ,
   'description': location,
   'start': {
     'dateTime': dateTimeStart2,
   },
   'end': {
     'dateTime': dateTimeEnd2,
   },
  } ,
        }, (err, event) => {
          err ? reject(err) : resolve(event);
        }
        );
      }
    });

  });

最佳答案

我建议在您的执行中提取这样的参数:

 function botHandler(agent) {
        let state = agent.parameters["stateName"];
        let uState = state.toUpperCase();
        let answer = "So you live in " + uState + "?";

        agent.add(answer);
    }

您可以通过以下方式检查参数是否存在:

if (agent.parameters["stateName"]) {
    //do stuff here
}

我认为它崩溃是因为没有意图。

关于javascript - 多个日期条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56676759/

相关文章:

swift - Firebase 有时只提供我保存的值的一部分,有时则提供全部内容

firebase - 如何从 firebase auth 获取用户 ID 作为字符串?

javascript - 阶乘...我不知道为什么这段代码有效

javascript - jquery中toArray和makeArray的区别

node.js - 风 sails js : dynamic tableName in model

javascript - 如何返回土耳其格式的日期?

java - 如何从 ListView 中获取选定的值

javascript - 你能/如何使用大于 MAX_TEXTURE_SIZE 的纹理吗?

带有原型(prototype)的 Javascript 继承

node.js - 如何在 Express 中将静态文件提供给不同的路由?