ДиалогиПерезапуск

С версии 1.5.2 в арсенале скриптов Дуси появилось сразу два новых вида действий — Диалоги и Перезапуск. Они призваны сделать ваши функции по-настоящему интерактивными и интеллектуальными.

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

Немного о скриптах

Как известно, скрипт — это последовательность действий ассистента, которая запускается, когда пользователь произносит фразу, подходящую или под один из шаблонов скрипта, или полностью совпадает с названием скрипта (если нет ни одного шаблона).

Скриптовый «процессор» вытаскивает нужные данные из сказанной фразы (посредством переменных в шаблоне), добавляет в контекст скрипта дополнительные переменные (текущее местоположение, время и другие) и запускает скрипт последовательно. Действие за действием. При этом перед запуском каждого действия вычисляется его условие. И если условие не выполняется, то действие пропускается.

Вроде бы все просто. Но до сегодняшнего дня чего-то не хватало…

А именно не хватало возможности во время скрипта прерваться и запросить у пользователя дополнительные данные. А также иногда хотелось бы организовать что-то типа циклов, перезапуская скрипт в нужный момент с новыми данными.

И вот теперь это стало возможным.

Диалоги

Новое действие «Диалог» позволяет вашему скрипту запросить какие-либо речевые данные от пользователя. То есть задать вопрос и подождать ответа. А затем продолжить выполнять скрипт, имея новые данные;

Фразы

В настройках этого действия есть список фраз, одну из которых ассистент произнесет перед включением микрофона. По аналогии с действием «Сказать» Дуся выберет случайным образом одну из фраз и произнесет ее. После чего автоматически включит микрофон для распознавания команды пользователя.

Шаблоны

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

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

Как видите, все так же, как и с шаблоном самого скрипта. За исключением одного но…

А вдруг ответ не подходит под шаблон?

Да, такое может произойти. Ведь никто не может заставить пользователя сказать именно то, что нужно вашему скрипту!

Что же делать в этом случае? Спокойствие, только спокойствие. Именно для управления такими ситуациями есть «Модальный режим».

Модальный режим

Это всего лишь одна галочка. Модальный режим либо включен, либо выключен. Что же она значит?

Включая Модальный режим вы как бы говорите ассистенту — «Если пользователь скажет что-то, что не подходит ни под один из шаблонов диалога, то продолжай скрипт как ни в чем не бывало!»

То есть ваш диалог будет иметь полный приоритет над всеми остальными командами ассистента. Отсюда и название — модальный. Ваш скрипт все равно продолжит свое выполнение. Даже если пользователь скажет фразу, которая подходит под одну из штатных функций ассистента.

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

Что же тогда значит немодальный режим (когда галочка снята)?

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

Отсюда и название — немодальный диалог. То есть диалог не имеет приоритета над другими командами ассистента.

Это приведет к тому, что скрипт будет остановлен, а ассистент выполнит команду.

Например, если мы хотим, чтобы пользователь мог скомандовать «еще», когда мы рассказали ему очередной анекдот, то нам нужен именно немодальный диалог. Иначе пользователь после каждого анекдота обязан был бы сказать или «еще» или «отмена». Что не очень хорошо.

Переменные диалога

Каждый диалог после получений (или неполучения) команды от пользователя сгенерирует и положит в контекст скрипта новые переменные.

Во-первых, это переменные, полученные из сработавшего шаблона (если такой есть). Как и при срабатывании шаблона скрипта.

Во-вторых, это пара переменных $dialog и $dialog_src. Первая перменная содержит порядковый номер сработавшего шаблона в диалоге. Если такого нет, то значением будет 0. Вторая переменная — это полный текст ответа пользователя. Опять же — если никакой шаблон не сработал, то эта переменная не добавляется в контекст скрипта.

Вот в принципе и все про Диалоги. Несложно, правда? Неправда?.. Тогда стоит попробовать на простом примере.

Простейший пример диалога

Создайте скрипт и назовите его «Диалог». Добавьте к нему действие «Диалог». В настройках действия добавьте одну фразу «Ну скажи что-нибудь». И один шаблон «$Text».

Добавьте еще одно действие «Сказать». В нем создайте единственную фразу «$Text — это уже не модно»;

Пример Screenshot_2015-12-30-00-11-06_framedПример

Теперь командуйте ассистенту «Диалог». Дуся ответит «Ну скажи что-нибудь». Скажите что-нибудь, что не подходит ни под одну из функций и не под один из других скриптов. Вы услышите ответ из вашего скрипта. А теперь попробуйте повторить диалог, только скажите что-то, что подходит под другую функцию. Например «Который час». Дуся ответит как обычно.

Попробуйте установить галочку «Модальный режим» и понаблюдайте, как Дуся начнет отвечать фразой из скрипта на все ваши ответы.

Перезапуск

Ух, много буков, но и скрипты все мощнее. А еще мощнее их сделает еще одно действие — «Перезапуск».

С виду очень простое — всего лишь перезапускает текущий скрипт. Но с помощью него можно организовать и циклы, и нелинейное поведение.

Новые параметры

Действие Перезапуск перезапускает скрипт ровно с теми же параметрами, которые находятся в контексте скрипта на момент перезапуска. Но вдобавок к этому, Перезапуск может положить в контекст и другие параметры. Они задаются в настройках действия.

Таким образом можно и перезаписать уже имеющиеся переменные.

Важно понимать, что перезапуск запустит скрипт с самого начала, а не с какого-то определенного действия!

В качестве заключения

Два новых действия «Диалог» и «Перезапуск» дают мощные инструменты для создания интерактивных голосовых функций. С их помощью можно создавать функции: аналогичные по поведению стандартным функциям ассистента.

Попробуйте разобрать в качестве примера опубликованный в каталоге скрипт «Почта Gmail». Этот скрипт содержит все виды действий, описанные в этой статье.

4 thoughts on “Высший пилотаж: Диалоги и Перезапуск в скриптах

  1. Поправь пожалуйста строчку «Скриптовый «процессор» вытаскивает нуДные данные…»
    Очено крутая прога!!!
    Пусть она развивается и, возможно, в будущем она станет чем-то большим, чем головосой асистент.
    Может стоит запилить аналог на PC? Как думаете?
    Разраб, больших тебе успехов в этом начинании!!!!

    1. Поправил, благодарю.
      Под PC есть свои сложности. Да и возможности не те под PC — в смысле дефрагментации платформ..
      Спасибо за поддержку!

  2. Все очень круто. Особенно ждал такую функцию как модальный режим. Успехов и удачи вам Дима. И ещё. Верните Дусе управление dlna-плейерами. Пожалуйста, пожалуйста…..
    И еще раз УСПЕХОВ!!!

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *