Не удается получить токен oauth из намерения синхронизации действий Google Smart Home в aws lambda

Я использую лямбда-функцию 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" неопределенного значения.


person Rishabh    schedule 23.01.2020    source источник
comment
Не получают ли лямбда-функции заголовки HTTP?   -  person Nick Felker    schedule 24.01.2020


Ответы (1)


обработчик лямбды в клиентской библиотеке Actions on Google предполагает, что заголовки запроса присутствуют в event.headers во входном параметре event интеграции Lambda Proxy. Если у вас есть настраиваемая интеграция Lambda или иным образом изменено сопоставление ввода, вам может потребоваться отредактировать ваш шаблон сопоставления, чтобы заголовки располагались там, где их ожидает клиентская библиотека.

person devunwired    schedule 27.01.2020
comment
Спасибо, когда я проверил журналы cloudwatch на шлюзе AWS api, я узнал, что авторизация не проходила через шлюз, помогла смена шаблона. Теперь он работает. - person Rishabh; 27.01.2020