Как стать автором
Обновить

Комментарии 6

Сегодня только смотрел документацию по Actions для Ассистента, так и не понял, поддерживают ли они следующий кейс:

1. Пользователь говорит: «Окей, Гугл, открой дверь Foobar через AppName».
2. Ассистент распознает фразу, понимает, что нужно использовать AppName, и посылает Android приложению интент либо со всем распознанным запросом, либо ту часть запроса, в которой приложение заинтересовано, то есть Foobar.
3. Приложение подхватывает Foobar, само делает запрос и, возможно, возвращает результат Ассистенту.

Насколько я понимаю, это не поддерживается как минимум в двух пунктах:

1. Ассистент не умеет работать с кастомными интентами, то есть через actions.xml можно определять только те действия, которые разрешает Гугл.
2. Действие должно запускать Activity, нет возможности запустить Service.

Я прав, или я где-то что-то недосмотрел?
Вы про взаимодействие с android приложением через App Actions, верно?

Насколько я понимаю, App Actions не позволяют сделать кастомный intent. Есть набор частых действий/запросов, которые совершают пользователи, и ваше android приложение может быть предложено, например, при выделении текста, если оно может им как-то в этом помочь.
И опять же, насколько я понял, они пока не связаны напрямую с ассистентом и голосовыми командами. Это скорее такие shotcut'ы внутри самого Android.

Если мы говорим про гугл ассистента и приложения для него (Action), то там ситуация похожая — пользователь просит шутку, и если ваш Action поддерживает соответствующий intent (actions.intent.GET_JOKE), то ассистент может предложить именно ваш Action и пользователь может перейти в ваше приложение и общаться с ним.

Так что в целом вы правы.

Но мне кажется, можно построить все это и иным образом.
Вы можете сделать свое приложение для ассистента (Action), общаясь с которым, пользователь будет отдавать команды своим умным дверям. И получится что у вашего сервиса теперь есть 2 точки входа — android приложение и ассистент.
Если же вам нужно перейти в мобильное приложение, то можно внутри ассистента запросить устройство (surface), у которого есть экран — например, android устройство с ассистентом. И уже там отобразить карточку с deeplink'ом в android приложение.
П: Мне понравился ананас.
A: Да, ананасы огонь!
По умолчанию используется reference form — т.е. именно исходная форма, не синонимы. Именно поэтому приложение не говорит «Ананасы огонь!»
?

maxzhurkin, спасибо большое что заметили!
Изначально, я часть примеров сделал на английском, чтобы показать сравнение использования entity на английском и русском. Мне показалось это интересным в процессе перехода написания приложения с английского на русский.
Перед публикацией было решено перевести эту часть и смысл потерялся. Сейчас я переписал примеры на русский и мы обновили статью.


Если интересно, вот изначальный пример про фрукты:


П: "Pineapples are the best"
A: "Yes, pineapples are awesome!"

В этом примере у нас есть entity: "Pineapples"
Но что если пользователь говорит "Pineapple"? Мы можем добавить синоним.


П: "I like pineapple"
A: "Yes, pineapples are awesome!"

По умолчанию используется reference form — т.е. именно исходная форма entity, не синонимы. Именно поэтому приложение не говорит "pineapple are awesome!"


Стоит это также учитывать при написании ответов. Если бы у нас был ответ "Yes, $fruit is the best!", то мы бы получили следующее:


П: "I like pineapple"
A: "Yes, pineapples is the best!"
Стоит это также учитывать при написании ответов. Если бы у нас был ответ «Yes, $fruit is the best!», то мы бы получили следующее:

П: «I like pineapple»
A: «Yes, pineapples is the best!»
«Yes, pineapple is the best!»?
Нет, вы получите именно «Yes, pineapples is the best!».

Смотрите, у нас в dialogflow есть entity $fruit примерно такого вида:
entity — синонимы
«Pineapples» — «pineapple»
«Cherries» — «cherry»
«Coconuts» (Их тоже считают фруктами!) — «coconut», «coco»

Даже если вы скажете «Coco is the best!», то в качестве распозанной entity $fruit вы получите «Coconuts». Это так называемая reference form.

Если вы хотите получить именно ту форму, которую сказал пользователь, то вам нужно использовать $fruit.original. Тогда вы получите именно синоним. В случае с ананасом — «pineapple». Другое дело, что тогда ваш ответ должен быть готов к тому, что это может быть как единственная форма, так и множественная. И ответы «is the best» / «are the best» в таком случае вам не подойдут
Зарегистрируйтесь на Хабре, чтобы оставить комментарий