Я использую лямбда-функцию aws для действия умного дома Google. Я использовал шлюз api aws для URL-адреса выполнения, чтобы достичь лямбда. Я могу успешно справиться с намерениями помощника Google с помощью кода ниже: -
const {smarthome} = require('actions-on-google');
const app = smarthome();
app.onExecute((body, headers) => {
return {
requestId: 'ff36...',
payload: {
// ...
},
};
});
app.onQuery((body, headers) => {
return {
requestId: 'ff36...',
payload: {
// ...
},
};
});
app.onSync((body, headers) => {
console.log("body: "+JSON.stringify(body));
console.log("headers: "+JSON.stringify(headers));
return {
requestId: 'ff36...',
payload: {
// ...
},
};
});
exports.handler = app;
Подробности устройства жесткого кодирования в этой функции могут успешно отражаться в домашнем приложении Google. Но чтобы получить фактические устройства пользователя, мне нужно получить токен oauth из намерения SYNC. Но все, что я получил из этого кода, это вывод: -
body: {input: [{intent: action.devices.SYNC}], requestId: 5604033533610827657}
заголовки: {}
В отличие от Директивы обнаружения навыков Alexa, которая содержит токен в request.directive.endpoint.scope.token, намерение Google, похоже, не несет его. Для O Auth я использую AWS Cognito, который отлично работает с привязкой учетной записи Alexa, а также для дома Google он может успешно связать учетную запись и показать устройства, которые я жестко запрограммировал в лямбда-функции.
Согласно этому ответу токен находится в
headers.authorization.substr (7)
Я пробовал это и ничего не получил. Это показывает
Невозможно прочитать свойство "substr" неопределенного значения.