Получение электронной почты с помощью Google Войти в Google Home - PullRequest
0 голосов
/ 04 июня 2018

, поэтому я стараюсь получить электронную почту, связанную с текущим пользователем, с помощью Google Home.

Документацию довольно сложно найти по этому вопросу, и из того, что я могу собрать, я смог бы найтииспользуйте класс SignIn из Actions-on-Google.Итак, вот мои настройки.

DialogFlow -> Создано два намерения, одно для запуска процесса входа, другое для отслеживания процесса.(Второй имеет событие 'actions_intent_SIGN_IN'.)

Действия в конфигурации Google: привязка аккаунта.

  • Выбрано - Да, разрешить пользователям подписываться на новые аккаунты черезvoice
  • Выбранный тип ссылки: Google Sign

И добавил идентификатор клиента в мой уровень выполнения, добавив clientId в конфигурацию моего диалогового потока.

dialogflow({clientId})

Итак, когда я запускаю это в эмуляторе (я получаю ту же самую вещь на своем домашнем устройстве Google), я получаю сообщение об ошибке, как только мой вход переходит к следующему намерению (actions_intent_SIGN_IN), то есть, что мой signin.statusОшибка.Оттуда я не знаю, что я могу сделать, чтобы получить больше информации о том, что это за ошибка и как ее исправить.

Есть идеи?Спасибо!

PS: Возможно, это даже не то, что можно сделать?Есть ли другой способ получить электронную почту пользователя?Мне удалось получить его имя с помощью Permission, но, насколько я знаю, больше ничего нет, чем войти в систему для электронной почты.

1 Ответ

0 голосов
/ 05 июня 2018

Я могу показать вам, как я получаю свой адрес электронной почты с помощью ссылки на учетную запись Google: вам нужно иметь свой accessToken, чтобы вы могли использовать то, что показано в этом ответе .AccessToken находится в conv.user.access.token, когда вход выполнен.

В узле это выглядит так:

let link = "https://www.googleapis.com/oauth2/v1/userinfo?access_token="+accessToken;
    return new Promise(resolve => {
        request(link,(error, response, body) => {
            if (!error && response.statusCode === 200) {
                let data = JSON.parse(body);
                let name = data.given_name ? data.given_name : '';
                conv.ask(new SimpleResponse({
                    speech: "Hello "+ name + "!",
                    text: "Hello "+ name + "!"
                }));
                resolve();
            } else {
                console.log("Error in request promise: "+error);
                resolve();
            }
        })
    })

Все, что вам нужно, должно быть в объекте данных.

Надеюсь, поможет.Что касается вашей ошибки, я не уверен, но попробуйте сделать все шаги по ссылке выше.Я использую поле Требуется вход в Dialogflow, а не новый Вход, но он должен работать так же.

...