Google Assistant - связь аккаунта с помощью входа в Google - PullRequest
0 голосов
/ 30 августа 2018

У меня есть приложение Express, которое поддерживает аутентификацию и авторизацию Google через паспорт. Я начал интегрировать его с Google Assistant, и дела шли довольно хорошо, но у меня возникли проблемы со связыванием аккаунта, как описано в https://developers.google.com/actions/identity/google-sign-in#start_the_authentication_flow

Используя метод в документах на https://codelabs.developers.google.com/codelabs/actions-2/#4 Я смог получить информацию о пользователе, но при попытке изменить для поддержки

app.intent('Start Signin', conv => {
  conv.ask(new SignIn('To get your account details'))
})

и

app.intent('Get Signin', (conv, params, signin) => { ...}

диалоговый поток всегда возвращается к моему стандартному намерению возврата, и я получаю сообщение об ошибке в консоли Express

Error: Dialogflow IntentHandler not found for intent: Default Fallback Intent

Мое намерение диалогового потока настроено на использование webhook, и другие намерения работают нормально (пока я не добавлю эти намерения входа!)

Чтение этой цепочки Dialogflow IntentHandler не найден для намерения: myIntent (Dialogflow V2) было предложено использовать имя намерения, а не имя действия, поэтому я проверяю свои Действия в симуляторе Google и запрос содержит :

  "inputs": [
    {
      "intent": "actions.intent.SIGN_IN",
      "rawInputs": [
        {
          "inputType": "KEYBOARD"
        }
      ],
      "arguments": [
        {
          "name": "SIGN_IN",
          "extension": {
            "@type": "type.googleapis.com/google.actions.v2.SignInValue",
            "status": "OK"
          }
        }
      ]
    }
  ],

, поэтому я попытался изменить имя намерения Dialogflow на actions.intent.SIGN_IN и соответственно изменить имя намерения в приложении Express, но это не имеет значения.

Ответ симулятора включает в себя:

"responseMetadata": {
    "status": {
      "code": 14,
      "message": "Webhook error (206)"
    },

но я не уверен, что это только потому, что по каким-то причинам имена намерений не совпадают. Любая помощь высоко ценится!

enter image description here

1 Ответ

0 голосов
/ 31 августа 2018

Как вы размышляете в комментариях, проблема в том, что ваше намерение «Получить вход» не зарегистрировано, чтобы получить событие, указывающее, что пользователь вошел в систему (или не смог). Так как нет такой установки Intent, она в конечном итоге вызывает Fallback Intent, у которого, очевидно, нет обработчика Intent, зарегистрированного в вашем webhook.

Чтобы ваше намерение «Получить вход» получило событие входа, установите для поля «Событие» значение actions_intent_SIGN_IN. (Обратите внимание на сходство с именем Intent, которое вы видели в симуляторе, но с использованием подчеркивания вместо точек.)

Кроме того, симулятор показывал вам, как выглядит связь между Assistant и Dialogflow, поэтому может быть несколько запутанным, чтобы понять, что с ним делает Dialogflow. Это не имеет ничего общего с названием вашего намерения или чем-то еще.

Наконец, часто нет необходимости делать эту проверку. Вы узнаете, вошел ли пользователь, потому что либо установлен токен авторизации, либо установлен токен идентификатора (в зависимости от метода привязки аккаунта).

...