Я реализовал уведомления в Google Assistant после https://codelabs.developers.google.com/codelabs/actions-user-engagement/#3, и я получаю уведомление, вызывая фразу «Тестовое уведомление», но я бы хотел, чтобы это уведомление пришло в определенное время и в определенный день. введенный пользователем в разговоре с чат-ботом, что мне делать?
app.intent ('TestNotification' , (conv) => {
//generating user id if not exists
let userId;
if ('userId' in conv.user.storage) {
userId = conv.user.storage.userId;
} else {
userId = uuid();
conv.user.storage.userId = userId;
}
const client = new google.auth.JWT(
serviceAccount.client_email, null, serviceAccount.private_key,
['https://www.googleapis.com/auth/actions.fulfillment.conversation'],
null
);
let notification = {
userNotification: {
title: 'Notifica sulla tua terapia intervallare',
},
target: {},
};
client.authorize((err, tokens) => {
if (err) {
throw new Error(`Auth error: ${err}`);
}
let queryRef = admin.database().ref('pazienti/' + userId + '/terapie/intervallare');
return queryRef.once('value').then((snapshot) => {
let therapies = snapshot.val();
let i;
if (therapies !== null) {
for (i = 0; i < therapies.length; i++) {
console.log('Terapia estratta: ' + '\n' + JSON.stringify(therapies));
//Therapies values
let intent = snapshot.child(i.toString() + '/intent').val();
let giorniFromDb = snapshot.child(i.toString() + '/giorni').val();
let farmacoFromDb = snapshot.child(i.toString() + '/farmaco').val();
let orarioFromDb = snapshot.child(i.toString() + '/orario').val().slice(11, 16);
console.log('Intent: ' + intent);
queryRef.orderByChild('intent').equalTo('ottieniTerapiaIntervallare')
.once('value')
.then((querySnapshot) => {
querySnapshot.forEach((user) => {
notification.target = {
userId: user.child(FirestoreNames.USER_ID).val(),
intent: user.child(FirestoreNames.INTENT).val(),
locale: 'it-IT',
};
request.post('https://actions.googleapis.com/v2/conversations:send', {
'auth': {
'bearer': tokens.access_token,
},
'json': true,
'body': {'customPushMessage': notification, 'isInSandbox': true},
}, (err, httpResponse, body) => {
if (err) {
throw new Error(`API request error: ${err}`);
}
console.log(`${httpResponse.statusCode}: ` +
`${httpResponse.statusMessage}`);
console.log(JSON.stringify(body));
});
});
})
.catch((error) => {
throw new Error(`Firestore query error: ${error}`);
});
}
}
});
});
conv.ask('La notifica è stata inviata a tutti gli utenti sottoscritti.');
});