I want to validate parameter entered by user before i continue with booking .
Here is my code :
function makeAppointment (agent) {
// Use the Dialogflow's date and time parameters to create Javascript Date instances, 'dateTimeStart' and 'dateTimeEnd',
// which are used to specify the appointment's time.
const appointmentDuration = 1;// Define the length of the appointment to be one hour.
const dateTimeStart = convertParametersDate(agent.parameters.date, agent.parameters.time,timeZoneOffset);
const dateTimeEnd = addHours(dateTimeStart, appointmentDuration);
const appointmentTimeString = getLocaleTimeString(dateTimeStart);
const appointmentDateString = getLocaleDateString(dateTimeStart);
// Check the availability of the time slot and set up an appointment if the time slot is available on the calendar
return createCalendarEvent(dateTimeStart, dateTimeEnd).then(() => {
agent.add(`Done 😊`);
}).catch(() => {
agent.add(` 😔Sorry check other date`);
});
}
function createCalendarEvent (dateTimeStart, dateTimeEnd) {
return new Promise((resolve, reject) => {
calendar.events.list({ // List all events in the specified time period
auth: serviceAccountAuth,
calendarId: calendarId,
timeMin: dateTimeStart.toISOString(),
timeMax: dateTimeEnd.toISOString()
}, (err, calendarResponse) => {
// Check if there exists any event on the calendar given the specified the time period
if (err || calendarResponse.data.items.length > 0) {
reject(err || new Error('Die angeforderte Zeit kollidiert mit einem anderen Termin'));
} else {
// Create an event for the requested time period
calendar.events.insert({ auth: serviceAccountAuth,
calendarId: calendarId,
resource: {summary: 'Appointment',
start: {dateTime: dateTimeStart},
end: {dateTime: dateTimeEnd}}
}, (err, event) => {
err ? reject(err) : resolve(event);
}
);
}
});
});
}
My validation should be : if dateTimeStart < now then agent will responde you can't book a date passed or is dateTimeStart < openhourtime ( time when service can be provide) and dateTimeEnd > closehourtime
openhourtime = '09:00' closehourtime = '16:00'
Can you help me how to make this inside code?
Assuming you use the Google sample code where the helper function Implement your if statement within the function convertParametersDate
returns you a date object, you can modify your function makeAppointment
as following to implement date validation:
function makeAppointment (agent) {
// Use the Dialogflow's date and time parameters to create Javascript Date instances, 'dateTimeStart' and 'dateTimeEnd',
// which are used to specify the appointment's time.
const appointmentDuration = 1;// Define the length of the appointment to be one hour.
const dateTimeStart = convertParametersDate(agent.parameters.date, agent.parameters.time,timeZoneOffset);
const dateTimeEnd = addHours(dateTimeStart, appointmentDuration);
const appointmentTimeString = getLocaleTimeString(dateTimeStart);
const appointmentDateString = getLocaleDateString(dateTimeStart);
// Check the availability of the time slot and set up an appointment if the time slot is available on the calendar
//here the new part:
var now = new Date();
var openhour = 9;
var closehour = 16;
if (dateTimeStart.getTime() < now.getTime() || dateTimeStart.getHours() < openhour || dateTimeEnd.getHours()> closehour){
agent.add(` 😔Sorry check other date`);
} else {
return createCalendarEvent(dateTimeStart, dateTimeEnd).then(() => {
agent.add(`Done 😊`);
}).catch(() => {
agent.add(` 😔Sorry check other date`);
});
}
}
The methods used for the implementation of the validation are Javascript Date Object methods, specifically getTime(), getHours() and new Date().