Как отправить Push-уведомления - Google Assistant

   # index.js

const functions = require('firebase-functions');
const DialogflowApp = require('actions-on-google').DialogflowApp;

exports.handler = functions.https.onRequest((req, res) => {

    const app = new DialogflowApp({ request: req, response: res });
    console.log("Request", req);

    console.log('Request Processing ');
    function responseHandler(app) {
        let intent = app.getIntent();
        console.log("INFO Intent : ", intent);
        switch (intent) {
            case 'input.welcome':
                console.log("INFO : UserId: ", app.getUser().userId);
                app.ask("Welcome  to notify Applcation")
                break;

            case 'finish_permission':
                if (app.isPermissionGranted()) {
                    console.log("INFO : UserId: ", app.getUser().userId);
                    app.ask("Ok, I'll start alerting you");
                } else {
                    app.ask("Ok, I won't alert you");
                }
                break;

            case 'check_overdue_tasks':
                if (app.isPermissionGranted()) {
                    console.log("INFO : UserId: ", app.getUser().userId);
                    app.ask("Ok, I'll start alerting you");
                } else {
                    app.ask("Ok, I won't alert you");
                }
                break;


            case 'setup_update':
                app.askForUpdatePermission('check_overdue_tasks');
                break;
        }
    }
    app.handleRequest(responseHandler);

})


################################################## send ##############################################


var request = require('request')
const google = require('googleapis');
const key = require('../config/Agent33-e4a3b7e88308.json');


let notif = {
    userNotification: {
        title: 'Pay Parking tickets',
    },
    target: {
        userId: 'ABwppHF74yXbA9Z1ptgyOVwwkU8p9meRgs3H51Aw6_AqQZTzUgFzdz1twy6ki1aI-CjziWJPlqSdJUdbzQ',
        intent: 'check_overdue_tasks'
    }
}


let jwtClient = new google.auth.JWT(
    key.client_email, null, key.private_key,
    ['https://www.googleapis.com/auth/actions.fulfillment.conversation'],
    null
);

jwtClient.authorize(function (err, tokens) {
    if (err) {
        console.log("ERROR on jwt CLIENT");
    }
    else {
        console.log("Token : ", JSON.stringify(tokens) + "\n Notification Msg : " + JSON.stringify(notif));

        request.post('https://actions.googleapis.com/v2/conversations:send', {
            'auth': {
                'bearer': tokens.access_token
            },
            'json': true,
            'body': { 'customPushMessage': notif, 'isInSandbox': true }
        }, function (err, httpResponse, body) {
            console.log(httpResponse.statusCode + ': ' + httpResponse.statusMessage)
        });
    }
});


############################################################################################

Я точно выполнил шаги, показанные в документации:

https://developers.google.com/actions/assistant/updates

Возникшие проблемы:

ВЫПУСК 1:

app.askForUpdatePermission (INTENT): не обновляет разрешение на отправку push-уведомления для намерения, но говорит, что разрешение предоставлено. и в случае, если попытался выполнить намерение 'final_permission' снова, скажем, разрешение предоставлено.

Как и когда я пытаюсь выполнить app.isPermissionGranted(), он возвращает false.

ВОПРОС 2: Сервер https://actions.googleapis.com/v2/conversations:send возвратил 500 или 400 ошибок в случайном порядке.

Я использую бесплатный план FireBase (Spark). Это из-за этого?

1 ответ

Убедитесь, что вы установили точное intentname лайк setup_update и текст должен быть точным для Suggestion chips. В противном случае ваш помощник не распознает текст.

Убедитесь, что вы включили webhook для определенных целей, если вы обрабатывали код.

Надеюсь, что вы прочитали и следуйте их действию в документе Google

Проверьте это на реальном устройстве. Вы получите уведомление.

Другие вопросы по тегам