Google Actions SDK игнорирует возможные намерения?

У меня есть действие, определенное в моем actions.json:

{
  "description": "foo description",
  "name": "FooAction",
  "fulfillment": {
    "conversationName": "my-app"
  },
  "intent": {
    "name": "FooIntent",
    "trigger": {
      "queryPatterns": [
        "foo",
      ]
    }
  }
}

При запуске adding actions.intent.MAIN ответ моего сервера выглядит так:

{
  "expectUserResponse": true,
  "expectedInputs": [
    {
      "inputPrompt": {
        "richInitialPrompt": {
          "items": [
            {
              "simpleResponse": {
                "textToSpeech": "Welcome to My App! What would you like to do?",
                "displayText": "Welcome to My App! What would you like to do?"
              }
            }
          ],
          "suggestions": []
        }
      },
      "possibleIntents": [
        {
          "intent": "FooIntent"
        }
      ]
    }
  ],
  "conversationToken": "123"
}

Вопрос:

Почему я возвращаю только намерение actions.intent.TEXT, когда пользователь говорит «Поговори с моим приложением», а затем отвечает «foo»?

Однако, когда пользователь говорит «Спросите мое приложение в foo» (без запуска actions.intent.MAIN), я получаю FooIntent.

Что я делаю не так? Спасибо!


person Travis    schedule 18.01.2018    source источник


Ответы (1)


Вы не делаете ничего плохого — именно так все и работает, когда вы используете action.json и Actions SDK. Пользовательские намерения используются только для начального срабатывание и, в меньшей степени, для речи предвзятость.

При использовании как части первоначального запуска вы получите намерение, которое совпало. Но вы получите собственное имя намерения только как часть первоначального намерения.

Для более поздних намерений вы обычно получите намерение actions.intent.TEXT (за исключением случаев, когда вы используете параметр или какой-либо другой внутренний тип ответа). Запрос одного из пользовательских намерений поможет определить, как интерпретатор STT будет обрабатывать речь, но он все равно будет возвращен как actions.intent.TEXT.

Обычно - это желаемое поведение. SDK действий в основном используется, когда у вас уже есть обработчик естественного языка, и вы в основном хотите, чтобы в этот NLP отправлялся только текст. Затем ваше НЛП определит, какое действие предпринять, основываясь на тексте.

Если у вас нет НЛП, я бы посоветовал его использовать. Dialogflow напрямую поддерживается через консоль Actions, но большинство NLP в наши дни описывают, как использовать их с Actions on Google, если вы хотите использовать другой.

person Prisoner    schedule 18.01.2018
comment
Спасибо за ответы! Я также получил электронное письмо из заявки в службу поддержки, которую я подал, в которой говорилось, что эта функция еще недоступна — я надеюсь, что это означает, что она скоро будет! - person Travis; 19.01.2018
comment
Я не могу комментировать действия Google (поскольку не знаю), но это маловероятно. Есть ли причина, по которой вы хотите справиться с этим с помощью action.json, а не с помощью другого инструмента, который лучше подходит для этого? - person Prisoner; 19.01.2018