Викиверситет
ruwikiversity
https://ru.wikiversity.org/wiki/%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0
MediaWiki 1.46.0-wmf.24
first-letter
Медиа
Служебная
Обсуждение
Участник
Обсуждение участника
Викиверситет
Обсуждение Викиверситета
Файл
Обсуждение файла
MediaWiki
Обсуждение MediaWiki
Шаблон
Обсуждение шаблона
Справка
Обсуждение справки
Категория
Обсуждение категории
Портал
Обсуждение портала
Факультет
Обсуждения факультета
TimedText
TimedText talk
Модуль
Обсуждение модуля
Event
Event talk
Навыки Алисы
0
29080
166091
166075
2026-04-27T11:58:59Z
SemyonDudenkov
36586
/* Практический модуль: интерактивный квест (Petrozavodsk Quiz) */
166091
wikitext
text/x-wiki
{{Курс
|Факультет = Информационные технологии
|Кафедра = [[Факультет:Компьютерные технологии/Программирование|Программирование]], [[Факультет:Компьютерные технологии/Веб-технологии|Веб-технологии]]
|К курсу =
|После курса =
|Преподаватель = [[Участник:Владимир Плеханов|Плеханов Владимир]] ([[Обсуждение участника:Владимир Плеханов|обсуждение]])
|Скрыть учеников = да
|Ссылка = [https://ru.wikiversity.org/?curid=29080 https://ru.wikiversity.org/?curid=29080]
}}
[[Файл:Alisa Yandex.svg|мини|Иконка Алисы - виртуального голосового помощника, созданного компанией Яндекс.]]
[[Файл:Zinina Anna Robot 2017.jpg|мини|Доклад о роботе, умеющем дополнять речь жестами, указывающими на его эмоциональное
состояние // [[n:Прошла конференция «Корпусная линвистика ‒ 2017» в Санкт-Петербурге|«Корпусная линвистика ‒ 2017»]]]]
'''Навыки Алисы''' — это курс, обучающий созданию навыков для Алисы. Алиса - это виртуальный голосовой помощник, созданный компанией Яндекс. Навык - это ...
Курс предназначен для студентов и преподавателей технических вузов, а также для школьников старших классов, углублённо изучающих информатику. В этом курсе вы познакомитесь с языками ???, ???, с конструктором Aimylogic.
За основу курса взяты уроки, опубликованные в [https://wiki.yaboard.com/w/%D0%A8%D0%BA%D0%BE%D0%BB%D0%B0_%D0%90%D0%BB%D0%B8%D1%81%D1%8B школе Алисы]. Этот материал дополняется ссылками на литературу, документацией и исходным кодом.
== Лекции ==
# [[/Выбор навыка|Выбор навыка]]
# [[/Приветственная фраза|Приветственная фраза]]
# [[/Как задать тон общения в навыке|Как задать тон общения в навыке]]
# [[/Какую информацию добавить в приветственную фразу|Какую информацию добавить в приветственную фразу]]
# [[/Как направлять пользователей в навыке через вопросы|Как направлять пользователей в навыке через вопросы]]
# [[/Как оформить логотип|Как оформить логотип (аватарку для каталога Навыков)]]
# [[/Как выбрать правильный компонент при дизайне навыка|Как выбрать правильный компонент при дизайне навыка]]
# [[/Как развернуть навык в Яндекс.Облаке|Как развернуть навык в Яндекс.Облаке]]
# [[/Как изменить поведение тестовых навыков в Яндекс.Облаке|Как изменить поведение тестовых навыков в Яндекс.Облаке]]
# [[/Как правильно заполнять настройки навыка в интерфейсе Яндекс.Диалогов|Как правильно заполнять настройки навыка в интерфейсе Яндекс.Диалогов]]
# [[/Как пройти модерацию навыка для Алисы|Как пройти модерацию навыка для Алисы]]
# [[/Как создавать голосовой пользовательский интерфейс|Как создавать голосовой пользовательский интерфейс]]
# [[/Как связать сценарий, контент и код для навыка в единое целое|Как связать сценарий, контент и код для навыка в единое целое]]
# [[/Как правильно работать с оценками и отзывами на навык|Как правильно работать с оценками и отзывами на навык]]
# [[/Как создать навык без программирования|Как создать навык без программирования]]
# [[/Как использовать конструктор для создания навыков Алисы Aimylogic|Как использовать конструктор для создания навыков Алисы Aimylogic]]
# [[/Как обрабатывать логи в навыках|Как обрабатывать логи в навыках]]
# [[/Как использовать конструктор Dialogflower для создания навыка|Как использовать конструктор Dialogflower для создания навыка]]
# [[/Как улучшить ранжирование вашего навыка|Как улучшить ранжирование вашего навыка]]
# [[/Как подготовить изображение для навыка|Как подготовить изображение для навыка]]
# [[/Как и где хранить данные, введённые пользователем|Как и где хранить данные, введённые пользователем]]
# [[/Как загрузить картинку в навык с помощью API|Как загрузить картинку в навык с помощью API]]
# [[/Как правильно настроить отображение картинок|Как правильно настроить отображение картинок]]
# [[/Как сделать навык с естественной речью: теория и практика на реальном примере|Как сделать навык с естественной речью: теория и практика на реальном примере]]
# [[/Как работать с аналитикой|Как работать с аналитикой]]
# [[/Как выиграть Премию Алисы|Как выиграть Премию Алисы]]
# [[/Как писать текст для описания навыков|Как писать текст для описания навыков]]
# [[/Как поднять целеориентированного бота для Алисы из библиотеки DeepPavlov|Как поднять целеориентированного бота для Алисы из библиотеки DeepPavlov]]
# [[/Кэширование в навыках|Кэширование в навыках]]
# [[/Как научить Алису петь|Как научить Алису петь]]
# [[/Итоги 2019 года|Итоги 2019 года]]
== Практический модуль: интерактивный квест (Petrozavodsk Quiz) ==
Дополнительный учебный модуль по разработке навыка Алисы на Python: проектирование диалога, webhook-интеграция, тестирование и развёртывание.
* [[Навыки Алисы/Разработка интерактивного квеста|Разработка интерактивного квеста]]
* [[Навыки Алисы/Установка и локальный запуск|Установка и локальный запуск]]
* [[Навыки Алисы/Интеграция с Яндекс Диалогами|Интеграция с Яндекс.Диалогами]]
* [[Навыки Алисы/Развёртывание навыка в Яндекс.Облаке (Cloud Functions)|Развёртывание навыка в Яндекс.Облаке (Cloud Functions)]]
* Репозиторий проекта: [https://github.com/SaKuRa5353/alice-petrozavodsk-game alice-petrozavodsk-game]
* Навык в каталоге Яндекс.Диалогов: [https://dialogs.yandex.ru/store/skills/7edd79b2-petrozavodsk-quiz Petrozavodsk Quiz]
== Литература ==
*
== Ссылки ==
* [https://dialogs.yandex.ru/store Магазин Навыков]
* [https://yandex.ru/alice/support/assistant/skills.html Документация по Навыкам]
* [https://yandex.cloud/ru/docs/functions/tutorials/alice-skill Создание навыка Алисы]
* [https://habr.com/ru/articles/565834/ Лучшие навыки Алисы и советы от их разработчиков] // Habr, 2021
[[Категория:Программирование]]
[[Категория:Веб-технологии]]
qx1qdjdqve8fqnvycov719fnu2ba9ar
Навыки Алисы/Разработка интерактивного квеста
0
30212
166084
166051
2026-04-27T11:14:37Z
SemyonDudenkov
36586
/* Цель навыка */
166084
wikitext
text/x-wiki
Эта подстраница описывает учебный навык «Петрозаводск Quiz»: голосовую викторину о достопримечательностях Петрозаводска.
== Цель навыка ==
Навык «Петрозаводск Quiz» представляет собой голосовую викторину, предназначенную для проверки знаний пользователя о достопримечательностях Петрозаводска. В процессе игры навык последовательно задаёт пользователю пять вопросов, каждый из которых относится к одному из городских памятников или знаковых мест. После получения ответа навык проверяет его правильность. Если пользователь ошибается, система предоставляет подсказки: сначала текстовую, а при повторной ошибке — визуальную (изображение достопримечательности в карточке '''BigImage''' платформы Яндекс.Диалоги). В завершение викторины навык подсчитывает итоговый результат (количество правильных ответов) и предлагает пользователю сыграть снова.
== Пользовательский сценарий ==
# Пользователь запускает навык — он начинает работу без дополнительных команд.
# Навык сразу задаёт первый вопрос из 5 вопросов о достопримечательностях.
# После ошибки пользователя даётся первая подсказка.
# После второй ошибки показывается вторая подсказка (изображение, если доступно).
# После ответа на все 5 вопросов выводится счёт и предложение сыграть снова.
[[File:StartQwiz.png|thumb|Скриншот 1: начало игры с приветствием навыка и первым вопросом о достопримечательности.]]
[[File:Petrozavodsk-Quiz-dialog-hints2.png|thumb|Скриншот 2: текстовая подсказка и визуальная подсказка с изображением достопримечательности.]]
== Компоненты проекта ==
; '''Game Engine (game_engine.py)'''
: Игровая логика, команды, проверка ответов, подсказки, подсчёт результата.
; '''Landmarks Data (landmarks.py)'''
: База данных из достопримечательностей Петрозаводска с подсказками и источниками.
; '''Webhook Handler (alice_handler.py)'''
: Принимает запросы от Яндекс.Алисы и формирует ответ навыка.
; '''Cloud Function Entry Point (cloud_function.py)'''
: Точка входа для развёртывания в Yandex Cloud Functions.
== Зафиксированная проблема отображения изображения ==
В интерфейсе навыка наблюдается дефект отображения визуальной подсказки во второй подсказке (карточка <code>BigImage</code> с изображением памятника Петру I): в карточке отображается только нижняя часть памятника, верхняя часть обрезается.
[[File:Petrozavodsk Quiz BigImage crop bug Peter I hint.png|thumb|Скриншот 3: дефект отображения изображения во второй подсказке (карточка BigImage) — у памятника Петру I видна только нижняя часть изображения, верхняя часть обрезается.]]
'''Предполагаемая причина''': изображение показывается в карточке типа <code>BigImage</code> с фиксированным соотношением сторон и автоматической обрезкой под контейнер клиента Алисы.
'''Возможные решения''':
* подготовить отдельную версию изображения для карточки (кадрировать заранее так, чтобы ключевой объект был в центре);
* использовать альтернативный <code>image_id</code> с более подходящей композицией (без важного объекта у верхней границы);
* в тексте второй подсказки дополнительно дать пользователю ссылку на полное изображение в Викискладе/источнике.
'''Мнение''': наиболее практичный вариант для учебного проекта — заменить изображение подсказки на заранее кадрированную версию под формат карточки, так как это не требует изменения логики игры и даёт предсказуемый результат в интерфейсе.
== Упражнения ==
<quiz display=simple>
{ Для чего навыку нужна передача состояния диалога через <code>session_state</code>?
| type="()" }
- Чтобы хранить только настройки интерфейса пользователя
- Чтобы автоматически публиковать навык в каталоге
+ Чтобы сохранять прогресс игры между запросами пользователя
{ Почему для учебного проекта выбран webhook-подход?
| type="()" }
- Потому что webhook работает только в локальном CLI
- Потому что webhook не требует JSON-формата
+ Потому что платформа Яндекс.Диалоги отправляет запросы на внешний HTTP-адрес навыка
{ Какую практическую пользу дают автотесты при доработке навыка?
| type="()" }
- Нужны только для ускорения загрузки изображений
- Полезны только перед публикацией в каталог
+ Позволяют быстро проверить, что изменения не сломали существующую логику
</quiz>
88gj6i70i1djm7buehx5fte9wg9vwwm
166085
166084
2026-04-27T11:16:55Z
SemyonDudenkov
36586
/* Цель навыка */
166085
wikitext
text/x-wiki
Эта подстраница описывает учебный навык «Петрозаводск Quiz»: голосовую викторину о достопримечательностях Петрозаводска.
== Цель навыка ==
Навык «Петрозаводск Quiz» представляет собой голосовую викторину, предназначенную для проверки знаний пользователя о достопримечательностях Петрозаводска. В процессе игры навык последовательно задаёт пользователю пять вопросов, каждый из которых относится к одному из городских памятников или знаковых мест. После получения ответа навык проверяет его правильность. Если пользователь ошибается, система предоставляет подсказки: сначала текстовую, а при повторной ошибке — визуальную (изображение достопримечательности в карточке <code>BigImage</code> платформы Яндекс.Диалоги). В завершение викторины навык подсчитывает итоговый результат (количество правильных ответов) и предлагает пользователю сыграть снова.
== Пользовательский сценарий ==
# Пользователь запускает навык — он начинает работу без дополнительных команд.
# Навык сразу задаёт первый вопрос из 5 вопросов о достопримечательностях.
# После ошибки пользователя даётся первая подсказка.
# После второй ошибки показывается вторая подсказка (изображение, если доступно).
# После ответа на все 5 вопросов выводится счёт и предложение сыграть снова.
[[File:StartQwiz.png|thumb|Скриншот 1: начало игры с приветствием навыка и первым вопросом о достопримечательности.]]
[[File:Petrozavodsk-Quiz-dialog-hints2.png|thumb|Скриншот 2: текстовая подсказка и визуальная подсказка с изображением достопримечательности.]]
== Компоненты проекта ==
; '''Game Engine (game_engine.py)'''
: Игровая логика, команды, проверка ответов, подсказки, подсчёт результата.
; '''Landmarks Data (landmarks.py)'''
: База данных из достопримечательностей Петрозаводска с подсказками и источниками.
; '''Webhook Handler (alice_handler.py)'''
: Принимает запросы от Яндекс.Алисы и формирует ответ навыка.
; '''Cloud Function Entry Point (cloud_function.py)'''
: Точка входа для развёртывания в Yandex Cloud Functions.
== Зафиксированная проблема отображения изображения ==
В интерфейсе навыка наблюдается дефект отображения визуальной подсказки во второй подсказке (карточка <code>BigImage</code> с изображением памятника Петру I): в карточке отображается только нижняя часть памятника, верхняя часть обрезается.
[[File:Petrozavodsk Quiz BigImage crop bug Peter I hint.png|thumb|Скриншот 3: дефект отображения изображения во второй подсказке (карточка BigImage) — у памятника Петру I видна только нижняя часть изображения, верхняя часть обрезается.]]
'''Предполагаемая причина''': изображение показывается в карточке типа <code>BigImage</code> с фиксированным соотношением сторон и автоматической обрезкой под контейнер клиента Алисы.
'''Возможные решения''':
* подготовить отдельную версию изображения для карточки (кадрировать заранее так, чтобы ключевой объект был в центре);
* использовать альтернативный <code>image_id</code> с более подходящей композицией (без важного объекта у верхней границы);
* в тексте второй подсказки дополнительно дать пользователю ссылку на полное изображение в Викискладе/источнике.
'''Мнение''': наиболее практичный вариант для учебного проекта — заменить изображение подсказки на заранее кадрированную версию под формат карточки, так как это не требует изменения логики игры и даёт предсказуемый результат в интерфейсе.
== Упражнения ==
<quiz display=simple>
{ Для чего навыку нужна передача состояния диалога через <code>session_state</code>?
| type="()" }
- Чтобы хранить только настройки интерфейса пользователя
- Чтобы автоматически публиковать навык в каталоге
+ Чтобы сохранять прогресс игры между запросами пользователя
{ Почему для учебного проекта выбран webhook-подход?
| type="()" }
- Потому что webhook работает только в локальном CLI
- Потому что webhook не требует JSON-формата
+ Потому что платформа Яндекс.Диалоги отправляет запросы на внешний HTTP-адрес навыка
{ Какую практическую пользу дают автотесты при доработке навыка?
| type="()" }
- Нужны только для ускорения загрузки изображений
- Полезны только перед публикацией в каталог
+ Позволяют быстро проверить, что изменения не сломали существующую логику
</quiz>
rv4hghzekjrg8bdxk5y13zujw1rljnh
166086
166085
2026-04-27T11:20:28Z
SemyonDudenkov
36586
/* Пользовательский сценарий */
166086
wikitext
text/x-wiki
Эта подстраница описывает учебный навык «Петрозаводск Quiz»: голосовую викторину о достопримечательностях Петрозаводска.
== Цель навыка ==
Навык «Петрозаводск Quiz» представляет собой голосовую викторину, предназначенную для проверки знаний пользователя о достопримечательностях Петрозаводска. В процессе игры навык последовательно задаёт пользователю пять вопросов, каждый из которых относится к одному из городских памятников или знаковых мест. После получения ответа навык проверяет его правильность. Если пользователь ошибается, система предоставляет подсказки: сначала текстовую, а при повторной ошибке — визуальную (изображение достопримечательности в карточке <code>BigImage</code> платформы Яндекс.Диалоги). В завершение викторины навык подсчитывает итоговый результат (количество правильных ответов) и предлагает пользователю сыграть снова.
== Пользовательский сценарий ==
Пользователь запускает навык — он начинает работу без дополнительных команд. Как видно на '''Скриншоте 1''', навык сразу после активации выводит приветствие и первый вопрос о достопримечательности Петрозаводска, не требуя от пользователя лишних действий.
[[File:StartQwiz.png|thumb|Скриншот 1: начало игры — приветствие навыка и первый вопрос о достопримечательности Петрозаводска.]]
Далее навык задаёт 5 вопросов. Если пользователь ошибается, даётся первая подсказка (текстовая). После второй ошибки на том же вопросе показывается вторая подсказка — визуальная, с изображением достопримечательности. '''Скриншот 2''' демонстрирует этот момент: на экране видно, как после неверного ответа появляется текстовая подсказка (например, «Этот памятник находится в центре города, на Онежской набережной»), а затем — карточка с фотографией объекта. Благодаря этому пользователь может угадать объект визуально.
[[File:Petrozavodsk-Quiz-dialog-hints2.png|thumb|Скриншот 2: текстовая подсказка (после первой ошибки) и визуальная подсказка с изображением (после второй ошибки).]]
После ответа на все 5 вопросов выводится счёт и предложение сыграть снова.
== Компоненты проекта ==
; '''Game Engine (game_engine.py)'''
: Игровая логика, команды, проверка ответов, подсказки, подсчёт результата.
; '''Landmarks Data (landmarks.py)'''
: База данных из достопримечательностей Петрозаводска с подсказками и источниками.
; '''Webhook Handler (alice_handler.py)'''
: Принимает запросы от Яндекс.Алисы и формирует ответ навыка.
; '''Cloud Function Entry Point (cloud_function.py)'''
: Точка входа для развёртывания в Yandex Cloud Functions.
== Зафиксированная проблема отображения изображения ==
В интерфейсе навыка наблюдается дефект отображения визуальной подсказки во второй подсказке (карточка <code>BigImage</code> с изображением памятника Петру I): в карточке отображается только нижняя часть памятника, верхняя часть обрезается.
[[File:Petrozavodsk Quiz BigImage crop bug Peter I hint.png|thumb|Скриншот 3: дефект отображения изображения во второй подсказке (карточка BigImage) — у памятника Петру I видна только нижняя часть изображения, верхняя часть обрезается.]]
'''Предполагаемая причина''': изображение показывается в карточке типа <code>BigImage</code> с фиксированным соотношением сторон и автоматической обрезкой под контейнер клиента Алисы.
'''Возможные решения''':
* подготовить отдельную версию изображения для карточки (кадрировать заранее так, чтобы ключевой объект был в центре);
* использовать альтернативный <code>image_id</code> с более подходящей композицией (без важного объекта у верхней границы);
* в тексте второй подсказки дополнительно дать пользователю ссылку на полное изображение в Викискладе/источнике.
'''Мнение''': наиболее практичный вариант для учебного проекта — заменить изображение подсказки на заранее кадрированную версию под формат карточки, так как это не требует изменения логики игры и даёт предсказуемый результат в интерфейсе.
== Упражнения ==
<quiz display=simple>
{ Для чего навыку нужна передача состояния диалога через <code>session_state</code>?
| type="()" }
- Чтобы хранить только настройки интерфейса пользователя
- Чтобы автоматически публиковать навык в каталоге
+ Чтобы сохранять прогресс игры между запросами пользователя
{ Почему для учебного проекта выбран webhook-подход?
| type="()" }
- Потому что webhook работает только в локальном CLI
- Потому что webhook не требует JSON-формата
+ Потому что платформа Яндекс.Диалоги отправляет запросы на внешний HTTP-адрес навыка
{ Какую практическую пользу дают автотесты при доработке навыка?
| type="()" }
- Нужны только для ускорения загрузки изображений
- Полезны только перед публикацией в каталог
+ Позволяют быстро проверить, что изменения не сломали существующую логику
</quiz>
7xonb3j2bw7on9ibaoxehqtgwfmaeym
166087
166086
2026-04-27T11:25:22Z
SemyonDudenkov
36586
/* Зафиксированная проблема отображения изображения */
166087
wikitext
text/x-wiki
Эта подстраница описывает учебный навык «Петрозаводск Quiz»: голосовую викторину о достопримечательностях Петрозаводска.
== Цель навыка ==
Навык «Петрозаводск Quiz» представляет собой голосовую викторину, предназначенную для проверки знаний пользователя о достопримечательностях Петрозаводска. В процессе игры навык последовательно задаёт пользователю пять вопросов, каждый из которых относится к одному из городских памятников или знаковых мест. После получения ответа навык проверяет его правильность. Если пользователь ошибается, система предоставляет подсказки: сначала текстовую, а при повторной ошибке — визуальную (изображение достопримечательности в карточке <code>BigImage</code> платформы Яндекс.Диалоги). В завершение викторины навык подсчитывает итоговый результат (количество правильных ответов) и предлагает пользователю сыграть снова.
== Пользовательский сценарий ==
Пользователь запускает навык — он начинает работу без дополнительных команд. Как видно на '''Скриншоте 1''', навык сразу после активации выводит приветствие и первый вопрос о достопримечательности Петрозаводска, не требуя от пользователя лишних действий.
[[File:StartQwiz.png|thumb|Скриншот 1: начало игры — приветствие навыка и первый вопрос о достопримечательности Петрозаводска.]]
Далее навык задаёт 5 вопросов. Если пользователь ошибается, даётся первая подсказка (текстовая). После второй ошибки на том же вопросе показывается вторая подсказка — визуальная, с изображением достопримечательности. '''Скриншот 2''' демонстрирует этот момент: на экране видно, как после неверного ответа появляется текстовая подсказка (например, «Этот памятник находится в центре города, на Онежской набережной»), а затем — карточка с фотографией объекта. Благодаря этому пользователь может угадать объект визуально.
[[File:Petrozavodsk-Quiz-dialog-hints2.png|thumb|Скриншот 2: текстовая подсказка (после первой ошибки) и визуальная подсказка с изображением (после второй ошибки).]]
После ответа на все 5 вопросов выводится счёт и предложение сыграть снова.
== Компоненты проекта ==
; '''Game Engine (game_engine.py)'''
: Игровая логика, команды, проверка ответов, подсказки, подсчёт результата.
; '''Landmarks Data (landmarks.py)'''
: База данных из достопримечательностей Петрозаводска с подсказками и источниками.
; '''Webhook Handler (alice_handler.py)'''
: Принимает запросы от Яндекс.Алисы и формирует ответ навыка.
; '''Cloud Function Entry Point (cloud_function.py)'''
: Точка входа для развёртывания в Yandex Cloud Functions.
== Зафиксированная проблема отображения изображения ==
В интерфейсе навыка наблюдается дефект отображения визуальной подсказки во второй подсказке. Для показа изображений в навыках Яндекс.Алисы используется специальный тип карточки — '''BigImage'''. Это формат ответа, который выводит крупное изображение на экране устройства пользователя (подробнее см. [https://yandex.ru/dev/dialogs/alice/doc/response/cards.html документацию Яндекс.Диалогов: карточки с изображением]). Карточка '''BigImage''' имеет фиксированное соотношение сторон, и платформа автоматически обрезает исходное изображение, чтобы оно вписалось в контейнер.
На '''Скриншоте 3''' виден результат такой автоматической обрезки: у изображения памятника Петру I в Петрозаводске отображается только нижняя часть (постамент и ноги), а верхняя часть с лицом императора и якорем полностью отсутствует. Это проблема композиции исходного снимка: важный объект оказался слишком близко к верхнему краю, и при обрезке под формат '''BigImage''' он исчез.
[[File:Petrozavodsk Quiz BigImage crop bug Peter I hint.png|thumb|Скриншот 3: дефект отображения в карточке BigImage — у памятника Петру I видна только нижняя часть, верхняя обрезана платформой Алисы.]]
'''Предполагаемая причина:''' изображение показывается в карточке типа '''BigImage''' с фиксированным соотношением сторон и автоматической обрезкой под контейнер клиента Алисы.
'''Возможные решения:'''
* подготовить отдельную версию изображения для карточки (кадрировать заранее так, чтобы ключевой объект был в центре);
* использовать альтернативный <code>image_id</code> с более подходящей композицией (без важного объекта у верхней границы);
* в тексте второй подсказки дополнительно дать пользователю ссылку на полное изображение в Викискладе/источнике.
'''Мнение:''' наиболее практичный вариант для учебного проекта — заменить изображение подсказки на заранее кадрированную версию под формат карточки, так как это не требует изменения логики игры и даёт предсказуемый результат в интерфейсе.
== Упражнения ==
<quiz display=simple>
{ Для чего навыку нужна передача состояния диалога через <code>session_state</code>?
| type="()" }
- Чтобы хранить только настройки интерфейса пользователя
- Чтобы автоматически публиковать навык в каталоге
+ Чтобы сохранять прогресс игры между запросами пользователя
{ Почему для учебного проекта выбран webhook-подход?
| type="()" }
- Потому что webhook работает только в локальном CLI
- Потому что webhook не требует JSON-формата
+ Потому что платформа Яндекс.Диалоги отправляет запросы на внешний HTTP-адрес навыка
{ Какую практическую пользу дают автотесты при доработке навыка?
| type="()" }
- Нужны только для ускорения загрузки изображений
- Полезны только перед публикацией в каталог
+ Позволяют быстро проверить, что изменения не сломали существующую логику
</quiz>
bmv3chn4ric9f0ueuv5e29ic0k1npvv
166090
166087
2026-04-27T11:57:45Z
SemyonDudenkov
36586
/* Компоненты проекта */
166090
wikitext
text/x-wiki
Эта подстраница описывает учебный навык «Петрозаводск Quiz»: голосовую викторину о достопримечательностях Петрозаводска.
== Цель навыка ==
Навык «Петрозаводск Quiz» представляет собой голосовую викторину, предназначенную для проверки знаний пользователя о достопримечательностях Петрозаводска. В процессе игры навык последовательно задаёт пользователю пять вопросов, каждый из которых относится к одному из городских памятников или знаковых мест. После получения ответа навык проверяет его правильность. Если пользователь ошибается, система предоставляет подсказки: сначала текстовую, а при повторной ошибке — визуальную (изображение достопримечательности в карточке <code>BigImage</code> платформы Яндекс.Диалоги). В завершение викторины навык подсчитывает итоговый результат (количество правильных ответов) и предлагает пользователю сыграть снова.
== Пользовательский сценарий ==
Пользователь запускает навык — он начинает работу без дополнительных команд. Как видно на '''Скриншоте 1''', навык сразу после активации выводит приветствие и первый вопрос о достопримечательности Петрозаводска, не требуя от пользователя лишних действий.
[[File:StartQwiz.png|thumb|Скриншот 1: начало игры — приветствие навыка и первый вопрос о достопримечательности Петрозаводска.]]
Далее навык задаёт 5 вопросов. Если пользователь ошибается, даётся первая подсказка (текстовая). После второй ошибки на том же вопросе показывается вторая подсказка — визуальная, с изображением достопримечательности. '''Скриншот 2''' демонстрирует этот момент: на экране видно, как после неверного ответа появляется текстовая подсказка (например, «Этот памятник находится в центре города, на Онежской набережной»), а затем — карточка с фотографией объекта. Благодаря этому пользователь может угадать объект визуально.
[[File:Petrozavodsk-Quiz-dialog-hints2.png|thumb|Скриншот 2: текстовая подсказка (после первой ошибки) и визуальная подсказка с изображением (после второй ошибки).]]
После ответа на все 5 вопросов выводится счёт и предложение сыграть снова.
== Архитектура проекта и компоненты ==
Архитектура навыка построена на webhook-подходе, который предписан платформой Яндекс.Диалоги: все запросы от Алисы направляются на внешний HTTP-адрес, где работает обработчик. Все модули навыка работают в облачной среде Yandex Cloud Functions. Точкой входа служит <code>cloud_function.py</code>, который принимает HTTP-запрос от Алисы и передаёт управление вебхук-обработчику (<code>alice_handler.py</code>). Вебхук-обработчик анализирует команды пользователя, извлекает состояние диалога (прогресс игры хранится в <code>session_state</code>) и вызывает игровой движок (<code>game_engine.py</code>). Движок, в свою очередь, обращается к базе данных достопримечательностей (<code>landmarks.py</code>), где для каждого объекта сохранены вопросы, текстовые подсказки, <code>image_id</code> для карточек и правильные ответы. На основе полученных данных формируется ответ Алисе — текст, подсказки, а при необходимости — карточка '''BigImage'''. Весь цикл (запрос пользователя → проверка правильности → выдача подсказки → обновление счёта) сохраняется между запросами благодаря <code>session_state</code>.
На [[:File:Petrozavodsk_Quiz_architecture_diagram.png|диаграмме архитектуры]] показано, из каких частей состоит навык и как проходит обработка запроса пользователя. Пользователь отправляет запрос, который поступает во входящий webhook. Внутри Yandex Cloud Functions вызывается обработчик <code>cloud_function.handler</code>. Webhook-обработчик <code>alice_handler.handler</code> взаимодействует с игровым движком <code>game_engine.py</code> для обработки команды пользователя. Игровой движок считывает данные из файла <code>landmarks.py</code> для формирования вопросов и подсказок. Webhook-обработчик обновляет состояние сессии в <code>session_state</code>. Ответ навыка формируется в формате JSON и возвращается пользователю.
[[File:Petrozavodsk_Quiz_architecture_diagram.png|thumb|center|600px|Диаграмма архитектуры учебного навыка Алисы «Petrozavodsk Quiz»: взаимодействие пользователя, Яндекс.Диалогов, webhook-обработчика, игрового движка, данных и session_state.]]
'''Краткое описание компонентов:'''
* '''<code>cloud_function.py</code>''' — точка входа для развёртывания в Yandex Cloud Functions, принимает HTTP-запросы от Алисы.
* '''<code>alice_handler.py</code>''' — webhook-обработчик, анализирует команды пользователя, формирует ответ (текст, карточки, кнопки).
* '''<code>game_engine.py</code>''' — игровая логика, проверка ответов, управление подсказками, подсчёт результата.
* '''<code>landmarks.py</code>''' — база данных достопримечательностей Петрозаводска с вопросами, подсказками и изображениями.
* '''<code>session_state</code>''' — хранилище прогресса игры между запросами пользователя.
== Зафиксированная проблема отображения изображения ==
В интерфейсе навыка наблюдается дефект отображения визуальной подсказки во второй подсказке. Для показа изображений в навыках Яндекс.Алисы используется специальный тип карточки — '''BigImage'''. Это формат ответа, который выводит крупное изображение на экране устройства пользователя (подробнее см. [https://yandex.ru/dev/dialogs/alice/doc/response/cards.html документацию Яндекс.Диалогов: карточки с изображением]). Карточка '''BigImage''' имеет фиксированное соотношение сторон, и платформа автоматически обрезает исходное изображение, чтобы оно вписалось в контейнер.
На '''Скриншоте 3''' виден результат такой автоматической обрезки: у изображения памятника Петру I в Петрозаводске отображается только нижняя часть (постамент и ноги), а верхняя часть с лицом императора и якорем полностью отсутствует. Это проблема композиции исходного снимка: важный объект оказался слишком близко к верхнему краю, и при обрезке под формат '''BigImage''' он исчез.
[[File:Petrozavodsk Quiz BigImage crop bug Peter I hint.png|thumb|Скриншот 3: дефект отображения в карточке BigImage — у памятника Петру I видна только нижняя часть, верхняя обрезана платформой Алисы.]]
'''Предполагаемая причина:''' изображение показывается в карточке типа '''BigImage''' с фиксированным соотношением сторон и автоматической обрезкой под контейнер клиента Алисы.
'''Возможные решения:'''
* подготовить отдельную версию изображения для карточки (кадрировать заранее так, чтобы ключевой объект был в центре);
* использовать альтернативный <code>image_id</code> с более подходящей композицией (без важного объекта у верхней границы);
* в тексте второй подсказки дополнительно дать пользователю ссылку на полное изображение в Викискладе/источнике.
'''Мнение:''' наиболее практичный вариант для учебного проекта — заменить изображение подсказки на заранее кадрированную версию под формат карточки, так как это не требует изменения логики игры и даёт предсказуемый результат в интерфейсе.
== Упражнения ==
<quiz display=simple>
{ Для чего навыку нужна передача состояния диалога через <code>session_state</code>?
| type="()" }
- Чтобы хранить только настройки интерфейса пользователя
- Чтобы автоматически публиковать навык в каталоге
+ Чтобы сохранять прогресс игры между запросами пользователя
{ Почему для учебного проекта выбран webhook-подход?
| type="()" }
- Потому что webhook работает только в локальном CLI
- Потому что webhook не требует JSON-формата
+ Потому что платформа Яндекс.Диалоги отправляет запросы на внешний HTTP-адрес навыка
{ Какую практическую пользу дают автотесты при доработке навыка?
| type="()" }
- Нужны только для ускорения загрузки изображений
- Полезны только перед публикацией в каталог
+ Позволяют быстро проверить, что изменения не сломали существующую логику
</quiz>
a5u1208fwp177una1ffe9zw48wlkmdf
Навыки Алисы/Развёртывание навыка в Яндекс.Облаке (Cloud Functions)
0
30214
166088
166076
2026-04-27T11:31:47Z
SemyonDudenkov
36586
/* Почему Cloud Functions */
166088
wikitext
text/x-wiki
Эта подстраница описывает, как развернуть webhook навыка в Cloud Functions и настроить интеграцию с Яндекс.Диалогами.
'''Cloud Functions в Яндекс.Облаке''' — это платформа для развёртывания бессерверных функций. В контексте этого проекта облачная функция получает webhook-запросы от платформы Яндекс.Диалоги, передаёт их в обработчик навыка и возвращает JSON-ответ.
== Почему Cloud Functions ==
По сравнению с альтернативами (VPS с постоянно работающим приложением, PaaS-хостинг с риском засыпания бесплатных тарифов) Cloud Functions в Яндекс.Облаке для учебного навыка удобен тем, что:
* не требует поддержания постоянно запущенного сервера;
* избавляет от проблем со спящим режимом бесплатного веб-хостинга;
* подходит для нерегулярной учебной нагрузки (функция активируется только при обращении к навыку);
* новую версию можно быстро опубликовать из zip-архива.
== Точка входа ==
Для функции используется:
<syntaxhighlight lang="python">
def handler(event, context):
...
</syntaxhighlight>
Entry point в настройках функции: <code>cloud_function.handler</code>.
== Шаги развёртывания ==
# Откройте консоль Yandex Cloud: [https://console.cloud.yandex.ru/functions/ console.cloud.yandex.ru/functions/].
# Создайте новую функцию в разделе «Cloud Functions».
# Загрузите исходный код навыка архивом <code>alice-ycf-deploy.zip</code> (находится в корне репозитория).
# Укажите точку входа (entry point): <code>cloud_function.handler</code>.
# Создайте HTTP-trigger для функции.
# Скопируйте публичный URL функции и внесите его как webhook-адрес в настройки навыка в Яндекс.Диалогах.
== Проверка ==
После публикации проверьте:
<syntaxhighlight lang="bash">
python verify_webhook.py https://ваш-url
</syntaxhighlight>
== Упражнения ==
<quiz display=simple>
{ Что такое webhook в контексте навыка Алисы?
| type="()" }
- Локальный файл с настройками навыка
- Команда для запуска тестов
+ Публичный HTTP-адрес, который принимает запросы от Яндекс.Диалогов
{ Какой entry point указывается для данного проекта?
| type="()" }
- <code>app.webhook</code>
- <code>alice_handler.main</code>
+ <code>cloud_function.handler</code>
{ Почему serverless-подход удобен для учебного навыка?
| type="()" }
- Потому что требует постоянной ручной поддержки сервера
- Потому что исключает HTTP-trigger
+ Потому что не требует постоянно работающего сервера и удобен для нерегулярной нагрузки
</quiz>
ioocl5gqn8m4075r6ak5zztnwjpoh0k
166089
166088
2026-04-27T11:43:53Z
SemyonDudenkov
36586
166089
wikitext
text/x-wiki
Эта подстраница описывает, как развернуть webhook навыка в Cloud Functions и настроить интеграцию с Яндекс.Диалогами.
'''Cloud Functions в Яндекс.Облаке''' — это платформа для развёртывания бессерверных функций. '''Бессерверные вычисления (serverless)''' — это подход, при котором разработчику не нужно самостоятельно обслуживать серверы, следить за их отказоустойчивостью и безопасностью — все эти задачи берёт на себя облачный провайдер . Функция запускается только при наступлении события (например, при HTTP-запросе), что экономит ресурсы . Подробнее о технологии можно прочитать в [https://cloud.yandex.com/ru/docs/functions/ документации Yandex Cloud Functions].
В контексте этого проекта облачная функция получает webhook-запросы от платформы Яндекс.Диалоги, передаёт их в обработчик навыка и возвращает JSON-ответ.
== Почему Cloud Functions ==
По сравнению с альтернативами (VPS с постоянно работающим приложением, PaaS-хостинг с риском засыпания бесплатных тарифов) Cloud Functions в Яндекс.Облаке для учебного навыка удобен тем, что:
* не требует поддержания постоянно запущенного сервера;
* избавляет от проблем со спящим режимом бесплатного веб-хостинга;
* подходит для нерегулярной учебной нагрузки (функция активируется только при обращении к навыку);
* новую версию можно быстро опубликовать из zip-архива.
== Точка входа ==
Для функции используется:
<syntaxhighlight lang="python">
def handler(event, context):
...
</syntaxhighlight>
Entry point в настройках функции: <code>cloud_function.handler</code>.
== Шаги развёртывания ==
'''Что мы развёртываем:''' webhook-обработчик навыка «Петрозаводск Quiz» — это облачная функция, которая принимает HTTP-запросы от платформы Яндекс.Диалоги, обрабатывает их (проверяет ответы пользователя, выдаёт подсказки, ведёт счёт) и возвращает ответ в формате JSON, который Алиса показывает пользователю.
'''Что такое триггер:''' триггер — это механизм, который запускает выполнение облачной функции при наступлении определённого события . В нашем случае используется HTTP-триггер: он создаёт публичный URL-адрес, по которому платформа Яндекс.Диалоги отправляет запросы к навыку. Когда пользователь обращается к навыку, платформа отправляет HTTP-запрос на этот URL, и триггер автоматически запускает облачную функцию-обработчик . Подробнее о триггерах можно прочитать в [https://cloud.yandex.com/ru/docs/functions/concepts/trigger документации Yandex Cloud Functions].
'''Шаги развёртывания:'''
# Откройте консоль Yandex Cloud: [https://console.cloud.yandex.ru/functions/ console.cloud.yandex.ru/functions/].
# Создайте новую функцию в разделе «Cloud Functions».
# Загрузите исходный код навыка архивом <code>alice-ycf-deploy.zip</code> (находится в корне репозитория).
# Укажите точку входа (entry point): <code>cloud_function.handler</code>.
# Создайте HTTP-триггер для функции.
# Скопируйте публичный URL функции и внесите его как webhook-адрес в настройки навыка в Яндекс.Диалогах.
== Проверка ==
После публикации проверьте:
<syntaxhighlight lang="bash">
python verify_webhook.py https://ваш-url
</syntaxhighlight>
== Упражнения ==
<quiz display=simple>
{ Что такое webhook в контексте навыка Алисы?
| type="()" }
- Локальный файл с настройками навыка
- Команда для запуска тестов
+ Публичный HTTP-адрес, который принимает запросы от Яндекс.Диалогов
{ Какой entry point указывается для данного проекта?
| type="()" }
- <code>app.webhook</code>
- <code>alice_handler.main</code>
+ <code>cloud_function.handler</code>
{ Почему serverless-подход удобен для учебного навыка?
| type="()" }
- Потому что требует постоянной ручной поддержки сервера
- Потому что исключает HTTP-триггер
+ Потому что не требует постоянно работающего сервера и удобен для нерегулярной нагрузки
</quiz>
== Ссылки ==
* [https://cloud.yandex.com/ru/docs/functions/ Документация Yandex Cloud Functions]
* [https://cloud.yandex.com/ru/docs/functions/concepts/trigger Документация: триггеры Cloud Functions]
* [https://yandex.ru/dev/dialogs/alice/doc/ Яндекс.Алиса: документация для разработчиков]
63rdf3tg5e6dyof7rxmetv6y1waqsjd
Навыки Алисы/Архитектура навыка
0
30246
166083
166061
2026-04-27T09:58:30Z
SemyonDudenkov
36586
166083
wikitext
text/x-wiki
[[File:Petrozavodsk_Quiz_architecture_diagram.png|thumb|Диаграмма архитектуры учебного навыка Алисы «Petrozavodsk Quiz»: взаимодействие пользователя, Яндекс.Диалогов, webhook-обработчика, игрового движка, данных и session_state]]
Диаграмма показывает, из каких частей состоит навык и как проходит запрос пользователя. Например:
* Пользователь отправляет запрос, который поступает во входящий webhook.
* Внутри Yandex Cloud Functions вызывается обработчик `cloud_function.handler`.
* Webhook-обработчик `alice_handler.handler` взаимодействует с игровым движком `game_engine.py` для обработки команды пользователя.
* Игровой движок считывает данные из файла `landmarks.py` для формирования вопросов и подсказок.
* Webhook-обработчик обновляет состояние сессии в `session_state`.
* Ответ навыка формируется в формате JSON и возвращается пользователю.
== Упражнения ==
<quiz display=simple>
{ Что означает "покрывающий" блок «Алиса / Яндекс.Диалоги» на диаграмме?
| type="()" }
- Что это только внешний заголовок без связи с компонентами
- Что внутри находятся только данные <code>landmarks.py</code>
+ Что внутри этого контура расположены и взаимодействуют все основные компоненты навыка
{ Какой компонент отвечает за обработку входящих webhook-запросов?
| type="()" }
- <code>landmarks.py</code>
- <code>game_engine.py</code>
+ <code>alice_handler.py</code>
{ Зачем нужен <code>session_state</code> в архитектуре навыка?
| type="()" }
- Чтобы хранить изображения для карточек
- Чтобы определять формат Mermaid-диаграммы
+ Чтобы передавать состояние диалога между последовательными запросами пользователя
</quiz>
ad9wegxfya9dj4pw3tk14z35huy6pne