как дела? Engli sh - мой родной язык, поэтому я сразу извиняюсь.
у меня есть бот в диалоговом потоке, который с некоторыми взаимодействиями помечает события в повестке дня.
пример:
Бот: привет, добро пожаловать в парикмахерскую, вы хотите назначить встречу?
Пользователь: Да
Бот: Как Вас зовут?
Пользователь : Велисон
Бот: Какой день вы хотели бы?
Пользователь: Завтра
Бот: Что время?
Пользователь: 15:00
- Если у вас есть место в календаре Google
Бот: Хорошо, вы были запланированы на 21 февраля в 3 часа дня
- Если у вас нет места в календаре Google
Бот: Упс , похоже, что у нас нет вакансий на этот день или время, введите check , чтобы попробовать другой раз.
Где я получил код в качестве примера
Код ниже делает это:
'use strict';
const functions = require('firebase-functions');
const {google} = require('googleapis');
const {WebhookClient} = require('dialogflow-fulfillment');
// Enter your calendar ID below and service account JSON below
const calendarId = "id google agenda ";
const serviceAccount = {json file}; // Starts with {"type": "service_account",...
// Set up Google Calendar Service account credentials
const serviceAccountAuth = new google.auth.JWT({
email: serviceAccount.client_email,
key: serviceAccount.private_key,
scopes: 'https://www.googleapis.com/auth/calendar'
});
const calendar = google.calendar('v3');
process.env.DEBUG = 'dialogflow:*'; // enables lib debugging statements
const timeZoneOffset = '-03:00';
exports.dialogflowFirebaseFulfillment = functions.https.onRequest((request, response) => {
const agent = new WebhookClient({ request, response });
const appointment_nome = agent.parameters.nome;
function makeAppointment (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 agendamentoString = FormtData(new Date(agent.parameters.date.split('T')[0])) + " às " + agent.parameters.time.split('T')[1].split('-')[0];
// Check the availibility of the time, and make an appointment if there is time on the calendar
return createCalendarEvent(dateTimeStart, dateTimeEnd, appointment_nome).then(() => {
let mensagem = `Okay, you were scheduled for *${agendamentoString}* ✅.`;
response.json({"fulfillmentText": mensagem});
}).catch(() => {
let mensagem = `Oops, it appears that we have no vacancies for that day or time, type **check** to try another time.`;
response.json({"fulfillmentText": mensagem});
});
}
let intentMap = new Map();
//intentMap.set('Schedule Appointment', makeAppointment);
intentMap.set('Default Welcome Intent - yes', makeAppointment);
agent.handleRequest(intentMap);
});
function createCalendarEvent (dateTimeStart, dateTimeEnd, appointment_nome) {
return new Promise((resolve, reject) => {
calendar.events.list({
auth: serviceAccountAuth, // List events for time period
calendarId: calendarId,
timeMin: dateTimeStart.toISOString(),
timeMax: dateTimeEnd.toISOString()
}, (err, calendarResponse) => {
// Check if there is a event already on the Calendar
if (err || calendarResponse.data.items.length > 0) {
reject(err || new Error('Requested time conflicts with another appointment'));
} else {
// Create event for the requested time period
calendar.events.insert({ auth: serviceAccountAuth,
calendarId: calendarId,
resource: {summary:"Cliente: " + appointment_nome, description: "Cliente: " + appointment_nome,
start: {dateTime: dateTimeStart},
end: {dateTime: dateTimeEnd}}
}, (err, event) => {
err ? reject(err) : resolve(event);
}
);
}
});
});
}
function FormtData(date){
var nomesMes = [
"Janeiro", "Fevereiro", "Março",
"Abril", "Maio", "Junho","Julho",
"Agosto", "Setembro", "Outubro",
"Novembro", "Dezembro"
];
var dia = date.getDate();
var mesIndex = date.getMonth();
var ano = date.getFullYear();
return dia + ' ' + nomesMes[mesIndex];
}
Но проблема в том, что если в моем расписании слишком много расписаний, расписание станет утомительным для пользователя!
Я подумал о чем-то, например,
Бот: Хотели бы вы запланировать стрижку?
Пользователь: да
Бот: Как насчет 21 февраля в 13:00?
-Если пользователь согласен время указано в повестке дня:
пользователь: Да
бот: Хорошо, вы были запланированы на 21 февраля в 13:00
- Если пользователь не согласен он переходит к следующему доступному времени:
Пользователь: Нет
Бот: Как насчет 21 февраля в 2 часа дня?
Я пытался что-то с CalDAV API прочитать Google Calendar, я не получил никакого прогресса Есть ли у кого-нибудь какие-либо идеи, как я буду делать это? является? Большое спасибо заранее