多个日期条目
Posted
技术标签:
【中文标题】多个日期条目【英文标题】:Multiple date entries 【发布时间】:2019-11-02 17:31:19 【问题描述】:这是一些意图和实体的图像
我正在从用户那里收集日期以创建谷歌日历事件,但是一旦我添加第二个日期的代码,即使它没有被使用,它也无法在两个日期中的任何一个日期工作 它在firebase中给出了这个错误:
TypeError:无法读取未定义的属性“拆分” 在exports.dialogflowFirebaseFulfillment.functions.https.onRequest (/srv/index.js:38:68) 在 cloudFunction (/srv/node_modules/firebase-functions/lib/providers/https.js:37:41) 在 /worker/worker.js:783:7 在 /worker/worker.js:766:11 在 _combinedTickCallback (内部/进程/next_tick.js:132:7) 在 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);
);
);
);
【问题讨论】:
你能提供你正在使用的意图和实体的截图吗? 我可以将您的电子邮件添加到项目中 这段代码是为appointment
意图处理程序还是appointment2
意图处理程序调用的? (就此而言,您如何设置处理程序?)
这是一个通用常量,我想稍后使用它来单独调用每个常量,就像我有 date1 和 date2 一样,所以我做了意向预约 2,如果调用它需要参数 date2 和 date1 并创建 2事件和约会相同,但我会尝试 suugests 并将其放入函数中并查看
【参考方案1】:
我建议在您的履行中提取这样的参数:
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
我认为它崩溃是因为没有意图存在。
【讨论】:
这个建议效果很好,但现在我坚持使用创建事件的功能它似乎没有任何想法? 您应该为这位先生提出一个新问题! ***.com/questions/56702126/… 恐怕我没有使用 Google Calendar API 的经验。对不起以上是关于多个日期条目的主要内容,如果未能解决你的问题,请参考以下文章