как я могу отправить уведомление pu sh в помощнике Google во время и день запроса? - PullRequest
0 голосов
/ 09 мая 2020

Я реализовал уведомления в 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.');

});
...