Мне нужно получить адрес электронной почты из профиля пользователя Google.
Я использую Dialogflow и реализовал процедуру входа в Google , чтобы получить Client ID
(выданныйGoogle для ваших действий), и я также выполняю actions.intent.SIGN_IN
намерение (как объяснено здесь ).Я получаю токен Google ID, который содержит информацию о профиле Google пользователя, проблема заключается в расшифровке токена.
Если бы я использовал Действия в клиентской библиотеке Google для Node.js , яможно просто следовать примеру из потока аутентификации входа в Google :
Если вы используете клиентскую библиотеку Actions on Google для Node.js, она позаботится опроверяет и декодирует токен для вас и дает вам доступ к содержимому профиля , как показано в следующем фрагменте кода:
const { dialogflow } = require('actions-on-google');
const app = dialogflow({
// REPLACE THE PLACEHOLDER WITH THE CLIENT_ID OF YOUR ACTIONS PROJECT
clientId: CLIENT_ID,
})
// Intent that starts the account linking flow.
app.intent('Start Signin', conv => {
conv.ask(new SignIn('To get your account details'))
})
// Create a Dialogflow intent with the `actions_intent_SIGN_IN` event.
app.intent('Get Signin', (conv, params, signin) => {
if (signin.status === 'OK') {
const payload = conv.user.profile.payload
conv.ask(`I got your account details, ${payload.name}. What do you want to do next?`)
} else {
conv.ask(`I won't be able to save your data, but what do you want to do next?`)
}
})
Проблема в том, что я использую Dialogflow Fulfillment Library (потому что я работаю с Google Assistant и и с другими интеграциями).
Из их примера кода я придерживаюсь этого подхода, используя WebhookClient
:
const functions = require('firebase-functions');
const { WebhookClient } = require('dialogflow-fulfillment');
function someIntent(agent) {
if (agent.requestSource === agent.ACTIONS_ON_GOOGLE) {
// let conv = agent.conv( );
// do some google specific stuff... conv.ask( ... );
agent.add('You came from Actions on Google');
} else {
agent.add('You came from any other source...');
}
}
exports.dialogflowFirebaseFulfillment = functions.https.onRequest((request, response) => {
const agent = new WebhookClient({ request, response });
let intentMap = new Map( );
intentMap.set('some-intent', someIntent);
agent.handleRequest(intentMap);
});
Итак, вопрос : можно ли передать мои clientId
(из моего проекта действий) в dialogflow-fulfillment
для декодирования токена (так же, как actions-on-google
делает)?
пс: я знаюТеперь есть библиотеки JWT-декодирования и предложенная процедура , которую я мог бы использовать для проверки и декодирования токена.Но так как dialogflow-fulfillment
я предполагаю, что как-то использует actions-on-google
для внутреннего использования, мне просто интересно, есть ли гораздо более простой способ сделать это.