Google Action запрашивает параметры перед привязкой аккаунта - PullRequest
0 голосов
/ 08 июня 2019

Я использую Поток авторизации OAuth для своего действия в Google и по какой-то причине запрашивает параметры, затем инициирует связывание аккаунта, а затем снова запрашивает параметры.

Пример ответа:

image image

Код

app.intent('Create Channel Intent', async (conv, params) => {

  if (!conv.user.access.token) {

    conv.ask(new SignIn());

  } else {

    var locale = conv.user.locale;

    if (locale === 'hi-IN') {

      var accessToken = conv.user.access.token;

      var channelNameRaw = params.channelname;
      var channelNameData = await helperFunctions.hinditranslate(channelNameRaw);
      var channelNameLwr = channelNameData.toLowerCase();
      var channelName = helperFunctions.replaceWhitespacesFunc(channelNameLwr);

      const headers = await helperFunctions.login(accessToken);
      const speechText = await helperFunctions.createChannel(channelName, headers);

      conv.ask(speechText);

    } else {

      var accessToken = conv.user.access.token;

      var channelNameRaw = params.channelname;
      var channelNameData = channelNameRaw.toLowerCase();
      var channelName = helperFunctions.replaceWhitespacesFunc(channelNameData);

      const headers = await helperFunctions.login(accessToken);
      const speechText = await helperFunctions.createChannel(channelName, headers);

      conv.ask(speechText);

    }

  }

});

Диалоговое окно

code code

Ответы [ 2 ]

1 голос
/ 12 июня 2019

Я на 99% уверен, что заполнение лени вашего намерения отключено.

Ваше намерение создать канал имеет имя канала в качестве обязательного параметра.Без заполнения лени, намерения не будут вызывать ваш сервер / код, пока не будут выполнены все обязательные параметры.

Что происходит:

  1. Вы вызываете намерение Создать канал и запрашиваетимя канала в обязательном порядке
  2. Пользователь задает имя канала, намерение вызывает ваш код, поскольку все необходимые параметры выполнены.
  3. Ваш код вызывает намерение входа в систему, поскольку пользователь еще не вошел в систему.
  4. Пользователь дает разрешение, которое вызывает событие actions_intent_SIGN_IN
  5. Вызвано ваше намерение Создать канал, так как оно имеет триггер actions_intent_SIGN_IN, и запрашивает имя канала, поскольку это намерение является новым.

Чтобы исправить, выполните одно из следующих действий:

  • Включите заполнение ленивца в нижней части намерения.
  • Добавьте выходной контекст и добавьте # [CONTEXT-NAME] .channelname как значение по умолчанию для параметра channelname (без браслетов).Вы можете назначить значения по умолчанию, нажав на появившуюся 3 точку, когда указатель мыши находится над параметром.
  • Split Capturing sign_in событие из вашего намерения Создать канал

Надеюсь, это поможет.

1 голос
/ 08 июня 2019

Вы не должны добавлять обучающую фразу в ваше намерение входа в событие. Если у намерения, которое запрашивает разрешение на вход, есть фазы обучения, будет достаточно. Потому что он указывает на событие actions_intent_SIGN_IN и продолжается там, если пользователь еще не вошел в систему. Я предполагаю, что вы сделали эти два действия в одном намерении, так что это сбивает с толку и пытается вызвать то же самое намерение и запрашивает параметры.

Если вам пришлось использовать этот способ, попробуйте использовать контекст, чтобы вы могли передать значения параметра в это намерение при втором вызове.

...