Я пытаюсь разработать простой ProofOfConcept для взаимодействия с API Google из Google Home, используя авторизацию пользователя через Dialogflow Fullfilment.
Например, мы хотим иметь возможность создавать / читать / обновлять / удалять контакты пользователей.
Реализовать Google SignIn относительно легко, но я не знаю, как запросить дополнительные области действия
Кроме того, я никогда ранее не реализовывал сервер OAuth, и я до сих пор не уверен, что мне это тоже нужно или я мог бы повторно использовать существующий.
Я просмотрел много постов здесь, поэтому на большинство из них ответил @Prisoner, который также предоставил подробный поток Код авторизации Google Home и аутентификация с помощью аккаунта Google
В своем ответе он упоминает, что мы можем «перенаправить пользователя на страницу входа в сеть», но я до сих пор не понимаю, как это сделать из полной версии
Вот полный код, который я использовал для входа в Google:
//requirements
const { dialogflow, SignIn} = require('actions-on-google');
const functions = require('firebase-functions');
//initialisation
const app = dialogflow(
{
debug: true,
// REPLACE THE PLACEHOLDER WITH THE CLIENT_ID OF YOUR ACTIONS PROJECT
clientId: '1111111111111-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.apps.googleusercontent.com'
});
//Welcome Intent
app.intent('Default Welcome Intent', (conv) => {
conv.ask(`Welcome to the demo agent, say "Connect-me" to proceed`);
});
//Default Intent
app.intent('Default Fallback Intent', (conv) => {
conv.ask(`Sorry, can you repeat please?`);
});
//Intent starting the Google SignIn
// Create an intent with the name "Start Signin"
app.intent('Start Signin', (conv) => {
//SignIn Helper (https://developers.google.com/actions/assistant/helpers#account_sign-in)
conv.ask(new SignIn(`Need to identify you`));
});
//Intent called when the user complete the authentication
// Create an intent with the name "Get Signin" and assign it the event "actions_intent_SIGN_IN"
app.intent('Get Signin', (conv, params, signin) => {
if (signin.status === 'OK') {
const payload = conv.user.profile.payload;
conv.ask(`Hello ${payload.name}. You can now access your contacts informations... but not really `);
} else {
conv.ask(`Sorry but you should authentify yourself `);
}
});
//Example of intent that I would like to make it works
app.intent('How many contacts', (conv) => {
/*
TODO: How to ask for additional scopes ("https://www.google.com/m8/feeds/" : read/write access to Contacts and Contact Groups)
NOTE: Actually, I'm more interrested on how to get the additional scopes.
I could probably do the querying contacts part by myself since it's quite documented (https://developers.google.com/contacts/v3/)
*/
conv.ask(new SignIn(`You have ${nbContacts} contacts defined in your Google Contact`));
});
exports.dialogflowFirebaseFulfillment = functions.https.onRequest(app);