Диалоговое окно входа в полезную нагрузку пользователя - PullRequest
0 голосов
/ 30 октября 2018

Я реализовал привязку аккаунта с помощью входа в Google в диалоговое окно, но не могу получить данные пользователя. В мой webhook "actions_intent_SIGN_IN" conv.user.profile.payload всегда пуст.

Однако вход в систему, похоже, сработал, так как статус SIGN_IN "OK".

Вот документация: https://developers.google.com/actions/identity/google-sign-in

Вот мой веб-крючок:

const functions = require('firebase-functions');
const admin = require('firebase-admin');
const {WebhookClient, Suggestion} = require('dialogflow-fulfillment');
const {dialogflow, Permission, Image, SignIn, BasicCard} = require('actions-on-google');

process.env.DEBUG = 'dialogflow:*'; // enables lib debugging statements
admin.initializeApp(functions.config().firebase);
const db = admin.firestore();
db.settings({timestampsInSnapshots: true});

const {ssml} = require('./util');

exports.dialogflowFirebaseFulfillment = functions.https.onRequest((request, response) => {
    const agent = new WebhookClient({request, response});
    let conv = agent.conv();

    function ask_for_sign_in(agent) {
        let conv = agent.conv();
        conv.ask(new SignIn('Per personalizzare'));
        agent.add(conv);
    }

    function actions_intent_SIGN_IN(agent) {

        let conv = agent.conv();

        const granted = conv.arguments.get('SIGN_IN').status === 'OK';

        console.log('name', conv.user.profile.payload);

        if(granted){
            agent.add('granted');
        }else{
            agent.add('not granted');
        }

        agent.add('test');
    }

    // Map from Dialogflow intent names to functions to be run when the intent is matched
    let intentMap = new Map();

    intentMap.set('ask_for_sign_in', ask_for_sign_in);
    intentMap.set('actions_intent_SIGN_IN', actions_intent_SIGN_IN);

    agent.handleRequest(intentMap);
});

1 Ответ

0 голосов
/ 31 октября 2018

conv.user.profile.payload заполняется только при использовании библиотеки "actions-on-google". так как вы используете "dialogflow-выполнение" в качестве клиента webhook, вы должны выполнить проверку токена самостоятельно. Вы можете получить доступ к токену JWT из conv.request.user.idToken

вот документ, объясняющий, как сделать проверку https://developers.google.com/identity/sign-in/web/backend-auth

...