исходный код алисы яндекс

Яндекс открывает Алису для всех разработчиков. Платформа Яндекс.Диалоги (бета)

Сегодня мы начинаем открытое бета-тестирование платформы Яндекс.Диалоги, с помощью которой любой разработчик сможет обучить Алису новым навыкам и привлечь пользователей к своим сервисам и разработкам. В этом посте мы не будем пересказывать всю документацию, но дадим общее представление о работе платформы на примере самой популярной игры для Алисы.

исходный код алисы яндекс

Голосовой помощник Алиса, о котором мы впервые рассказывали на Хабре осенью прошлого года, уже работает в приложении Яндекс, Яндекс.Браузере, а также в бета-версии для Windows. Каждый день миллионы пользователей этих продуктов решают с помощью голосового помощника определённые задачи – например, узнают прогноз погоды. Мы регулярно добавляем новые возможности, но охватить все интересы пользователей самостоятельно невозможно. Заполнить этот пробел призваны навыки Алисы, об особенностях создания которых мы и расскажем под катом.

Если вы разрабатываете текстовую игру, информационного бота или даже сервис доставки еды на дом, то теперь вы можете добавить их в Алису. На техническом уровне это значит, что вы можете подключить сервис, работающий на вашем сервере, к платформе Алисы. Когда пользователь активирует такой навык, Алиса транслирует реплики пользователя на ваш сервер, и отвечает переданным вами текстом. Распознавание речи в текст и обратно платформа берёт на себя. Для пользователя разговор с использованием навыка выглядит как обычный диалог с голосовым помощником.

исходный код алисы яндекс

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

Алиса, давай сыграем в города

В прошлом году мы начали обучать Алису различным играм. Мы никогда об этом не рассказывали, но почти все они были добавлены с помощью платформы Яндекс.Диалоги, к тестированию которой мы и открываем сегодня доступ. Наиболее популярной среди них является игра в города, которую мы и рассмотрим более детально.

исходный код алисы яндекс

Игра, как и любой другой навык, начинается с распознавания фразы вида «Алиса, включи игру в города». Слово «включи» – это сигнал Алисе о том, что нужно запустить навык, а не искать ответ с помощью поиска. Таких сигнальных слов несколько. А часть «игру в города» в произнесенной фразе – это одно из активационных имён, которые задаются разработчиком при публикации навыка в платформе Диалоги. Голосовой помощник умеет понимать различные морфологические формы одного и того же активационного имени, чтобы срабатывать даже при неточных совпадениях.

Алиса, вызови игра в города
Алиса, сыграем в города
Алиса, запусти игру в города

В обычной ситуации Алиса ищет ответы с использованием сервисов Яндекса, но если речь идёт о навыке, то после распознавания активационного имени она отправляет POST-запрос на сервер, указанный разработчиком. Запрос представляет из себя привычный JSON и содержит текст от пользователя, а также служебную информацию (идентификаторы пользователя и сессии).

Бэкенд навыка может быть написан на любом удобном для разработчиков языке. В нашем случае мы обошлись привычным C++, но для документации подготовили примеры на Node.js и Python. Фактически требование к серверу лишь одно – он должен отвечать на запрос в течение 1,5 секунд.

Ответ также передается в JSON-формате и содержит текст, который будет озвучен Алисой. Давайте взглянем на реальный пример такого ответа из нашей игры:

Обратите внимание, что кроме обычного текста вы можете передавать и текст в формате TTS (text-to-speech). С помощью этой разметки вы можете управлять произношением Алисы. Это полезно, когда нужно расставить акценты в тексте или выдержать паузу.

Кроме того, в приведённом выше JSON-ответе вы можете заметить упоминания кнопок. У пользователей не всегда есть возможность ответить голосом. Заставлять писать ответы с помощью клавиатуры слишком жестоко (хотя такая возможность тоже всегда была в Алисе), поэтому разработчики навыков могут использовать кнопки. Кстати, они удобны ещё и тем, что подсказывают пользователю доступные голосовые команды.

исходный код алисы яндекс

С технической стороны всё просто. Куда сложнее было продумать механику так, чтобы не отпугивать пользователей сложностью игры. Хотим поделиться с вами несколькими хитростями, на которые мы пошли при разработке игры в города. Они не относятся к работе платформы, поэтому мы спрятали их за спойлер, но, возможно, они помогут и другим разработчикам создать собственные успешные игры.

В мире тысячи городов, о большинстве из которых никто из нас не слышал, но Яндекс их знает. Если бы Алиса использовала в игре свои знания о малоизвестных городах, то это оттолкнуло бы игроков. Игра не должна демонстрировать явное превосходство над игроком. Необходимо поддерживать иллюзию игры с живым и почти равным соперником. Поэтому мы специально сделали так, чтобы в свой ход она называла только самые известные города.

Проиграть в игру очень просто. Особенно, когда против вас играет справочник городов мира 🙂 Но этого нельзя допускать, потому что после поражения к вам могут и не вернуться. Не стремитесь к победе над игроком – процесс важнее результата. Поэтому в нашей игре нельзя проиграть окончательно: Алиса всегда готова поделиться подсказкой.

исходный код алисы яндекс

Игра в города достаточно однообразна. Но если игра не приносит новые знания или впечатления при каждом запуске, то её быстро забросят. В нашем случае Алиса не просто отвечает названием города, но и старается рассказать интересный факт о нём. Пользователи это ценят. Кстати, по этой же причине Алиса принимает в качестве ответа города из художественных произведений (например, Минас Тирит из вселенной Толкина).

исходный код алисы яндекс

Игры с Алисой – не единственные примеры уже существующих навыков. Например, прямо сейчас в нашем каталоге можно найти навык от Flowwow.com, который позволяет заказать и даже сразу оплатить доставку цветов. В ближайшее время мы расскажем и о других разработках от сторонних компаний, например от McDonald’s и «Папа Джонс».

Как создать свой навык?

1. Познакомьтесь с документацией Яндекс.Диалогов, где подробно описаны особенности платформы. Там же мы подготовили для вас описание быстрого старта с использованием бесплатного сервиса Now, который поможет разобраться в основах платформы без использования собственного сервера.

2. Зарегистрируйте созданный навык в Яндекс.Диалогах. Там же можно протестировать навык до его публикации, имитируя запросы от пользователей (скриншот).

3. Опубликуйте навык. Он будет размещён в каталоге Алисы, предварительный доступ к которому уже открыт в бета-версии приложения Яндекс (пункт «Что умеет Алиса» в меню Алисы). В будущем пользователи смогут узнавать о лучших навыках не только из каталога, но с помощью прямых рекомендаций голосового помощника.

Бета-версия платформы Диалоги ещё далека от финальной версии. Сейчас у каждого разработчика есть шанс повлиять на развитие навыков Алисы и поделиться с нами своими идеями и пожеланиями, которые мы постараемся учесть к моменту полноценного запуска. Оставить свой отзыв можно в комментариях, через Обратную связь, а также в нашем чате в Телеграме. Спасибо!

Источник

Node.js

Навык «Попугай» отвечает пользователю его же словами.

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

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

Если вы хотите запустить навык в условиях, приближенных к боевым, используйте функцию Яндекс.Облака, либо следуйте инструкции для Microsoft Azure или Amazon Web Services.

Перед стартом

Установите node.js. Он необходим для установки Vercel.

Подготовьте исходный код и конфигурацию навыка — скачайте или склонируйте код репозитория на GitHub.

Развертывание веб-сервиса

Разверните приложение с помощью сервиса Vercel:

Авторизуйтесь в Vercel. Для этого вам понадобится аккаунт одного из сервисов: Github, Gitlab или Bitbucket.

Тестирование навыка

Протестируйте работу черновика. По умолчанию навык выдает приветственную фразу «Hello!» и повторяет реплики пользователя.

Попробуйте изменить код навыка. Откройте файл index.js в текстовом редакторе и отредактируйте предложенными ниже способами.

После публикации вам станет доступно тестирование с помощью голоса — убедитесь, что Алиса корректно распознает активационную фразу, и навык правильно реагирует на реплики пользователя. Вы также сможете предоставить доступ к навыку вашим близким.

Что дальше

Попробуйте выполнить другие функции навыков. Они могут возвращать в ответ не только текст, но и изображения, а также проигрывать звуки. Чтобы узнать обо всех дополнительных возможностях, ознакомьтесь с протоколом работы Яндекс.Диалогов.

Источник

Алиса на Kotlin: превращаем код в Яндекс.Станцию

В июне Яндекс устроил онлайн-хакатон среди разработчиков голосовых навыков. Мы в Just AI как раз обновляли наш опенсорсный фреймворк на Kotlin, чтобы поддержать новые прикольные фичи Алисы. И нужно было придумать какой-то простенький пример для README…

О том, как пара сотен строк кода на Kotlin превратилась в Яндекс.Станцию

Алиса + Kotlin = JAICF

У Just AI есть опенсорсный и совершенно бесплатный фреймворк для разработки голосовых приложений и текстовых чатботов — JAICF. Он написан на Kotlin — языке программирования от JetBrains, который хорошо знаком всем андроидщикам и серверятникам, которые пишут кровавый энтерпрайз (ну или переписывают его с Java). Фреймворк нацелен на то, чтобы облегчить создание именно диалоговых приложений для разных голосовых, текстовых и даже телефонных ассистентов.

У Яндекса есть Алиса — голосовой помощник с приятным голосом и открытым API для сторонних разработчиков. То есть любой девелопер может расширить функционал Алисы для миллионов пользователей и за это даже получить от Яндекса деньги.

Мы, конечно же, официально подружили JAICF с Алисой, так что теперь можно писать навыки на Kotlin. И вот как это выглядит.

Сценарий → Вебхук → Диалог

исходный код алисы яндекс
Любой Алисий навык — это голосовой диалог между пользователем и цифровым помощником. Диалог описывается в JAICF в виде сценариев, которые потом запускаются на сервере-вебхуке, который прописывается в Яндекс.Диалогах.

Сценарий

Возьмем навык, который мы придумали для хакатона. Он помогает экономить при покупках в магазинах. Сперва посмотрите, как он работает.

исходный код алисы яндекс
Тут можно увидеть, как пользователь спрашивает у Алисы — “Скажи что выгоднее — столько-то рублей за такое-то количество или столько-то за такое?”

Алиса тут же запускает наш навык (потому что он называется “Что выгоднее”) и передает в него всю необходимую информацию — интент пользователя и данные из его запроса.

Навык, в свою очередь, реагирует на интент, обрабатывает данные и возвращает полезный ответ. Алиса произносит ответ и отключается, потому что навык заканчивает сессию (это у них называется “однопроходный навык”).

Вот такой нехитрый сценарий, который, однако, позволяет быстро посчитать, насколько один товар выгоднее другого. Ну и заодно выиграть говорящую колонку от Яндекса.

Как видите, это обычный объект, который расширяет класс Scenario из библиотеки JAICF. По сути, сценарий — это стейт-машина, где каждый узел — это возможное состояние диалога. Так мы реализуем работу с контекстом, так как контекст диалога — это очень важная составляющая любого голосового приложения.

Скажем, одна и та же фраза может быть интерпретирована по-разному в зависимости от контекста диалога. Кстати, это одна из причин, почему мы выбрали именно Kotlin для нашего фреймворка — он позволяет создавать лаконичный DSL, в котором удобно управлять такими вот вложенными друг в друга контекстами и переходами между ними.

Стейт активируется с помощью активатора (например, интента) и выполняет вложенный в него блок кода — экшн. А внутри экшена можно делать все что угодно, но главное — вернуть пользователю какой-то полезный ответ или что-то доспросить. Это делается с помощью реакций. По ссылкам вы найдете подробнейшее описание каждой этой сущности.

Интенты и слоты

исходный код алисы яндекс

Интент — это языконезависимое представление пользовательского запроса. Собственно, это идентификатор того, что хочет пользователь добиться от вашего диалогового приложения.

Алиса недавно научилась автоматически определять интенты для вашего навыка, если вы перед этим опишете специальную грамматику. Более того, она умеет выделять из фразы нужные данные в виде слотов — например, цену и объем товара, как в нашем примере.

Чтобы все это заработало, нужно описать такую грамматику и слоты. Вот такая грамматика получилась в нашем навыке, и вот такие слоты мы в ней используем. Это и позволяет нашему навыку получать на вход не просто строчку пользовательского запроса на русском языке, а уже языконезависимый идентификатор и сконвертированные слоты впридачу (цену каждого товара и его объем).

JAICF, конечно же, поддерживает любой другой движок NLU (например, Caila или Dialogflow), но в нашем примере мы хотели использовать именно эту фичу Алисы, чтобы показать, как она работает.

Вебхук

Ну хорошо, сценарий у нас есть. Как нам проверить, что он работает?

Конечно же, адепты test-driven-development подхода оценят наличие в JAICF встроенного механизма автоматизированного тестирования диалоговых сценариев, которым мы лично пользуемся постоянно, так как делаем большие проекты, а проверять все изменения руками тяжело. Но наш пример совсем небольшой, поэтому мы лучше сразу запустим сервер и попробуем поговорить с Алисой.

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

А вот так просто запускается сервер с вебхуком — нужно только указать, какой канал на каком endpoint’е должен работать. Мы запустили тут сервер Ktor от JetBrains, но в JAICF можно использовать и любые другие.

Тут мы использовали еще одну фичу Алисы — хранение данных пользователя в ее внутренней базе данных (опция useDataStorage). JAICF будет автоматически сохранять и восстанавливать оттуда контекст и все, что туда запишет наш сценарий. Серриализация происходит прозрачно.

Диалог

Наконец-то мы можем все это протестировать! Сервер запускается локально, поэтому нам понадобится временный публичный URL, чтобы запросы из Алисы долетали до нашего вебхука из Интернета. Для этого удобно использовать бесплатный тул ngrok, просто запустив в терминале команду типа ngrok http 8080

исходный код алисы яндекс

Все запросы будут прилетать в режиме реального времени на ваш ПК — так вы можете дебажить и править код.

Теперь можно взять полученный https URL и указать его при создании нового Алисьего диалога на Яндекс. Диалогах. Там же можно протестировать диалог текстом. Но если хочется поговорить с навыком голосом, то теперь Алиса умеет быстро публиковать приватные навыки, которые на время разработки доступны только вам. Так можно, не проходя долгую модерацию от Яндекса, уже начать разговаривать со своим навыком прямо из приложения Алисы или с умной колонки.

исходный код алисы яндекс

Публикация

Мы все протестили и готовы опубликовать навык для всех пользователей Алисы! Чтобы это сделать, наш вебхук должен захоститься где-нибудь на публичном сервере с постоянным URL. В принципе, приложения на JAICF можно запускать где угодно, где поддерживается Java (хоть на Android смартфоне).

Наш пример мы запустили на Heroku. Просто создали новое приложение и прописали в нем адрес нашего Github-репозитория, где хранится код навыка. Heroku сам все собирает и запускает из исходников. Нам остается только прописать получившийся публичный URL в настройках Яндекс. Диалогов и отправить все это на модерацию.

Итого

Этот небольшой туториал получился по следам Яндексового хакатона, где приведенный выше сценарий “Что выгоднее” таки выиграл одну из трех Яндекс.Станций! Тут, кстати, можно посмотреть, как это было.

Фреймворк JAICF на Kotlin помог мне быстро имплементировать и отдебажить диалоговый сценарий, не заморачиваясь на работу с API Алисы, контекстами и базами данных, при этом не ограничивая в возможностях (как это часто бывает с подобными библиотеками).

Полезные ссылки

Полная дока по JAICF лежит здесь.
Инструкция по созданию на нем навыков для Алисы тут.
С исходником самого навыка можно ознакомиться там.

И если вам понравилось

А если появляются вопросы, мы на них тут же отвечаем в нашем уютном Slack.

Источник

Все мы не в своем уме. Как сделать новый навык для «Алисы» на Python

исходный код алисы яндекс

Содержание статьи

Как вообще работают навыки? Если говорить простыми словами, то «Алиса» и твой сервер будут обмениваться файлами в формате JSON, где будет содержаться необходимая информация. Причем на сервер придет не просто распознанный текст, но уже подготовленный для обработки запрос. Ты можешь выбрать любой удобный язык программирования — нужна только возможность создавать на нем веб-сервер. Мы выберем Python как один из самых простых и популярных.

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

Первый навык — эхо-бот

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

Для начала основные термины:

Как будет работать наш навык? На наш сервер поступает request, мы будем получать из него содержимое в виде текста, а затем отправлять response, где в качестве содержимого укажем текст запроса. Переходим к коду!

Как-то много кода. Давай разбираться по частям. Во-первых, важно сказать, что наш сервер написан на Flask, и если ты хочешь разобраться в этом фреймворке поглубже, на «Хабрахабре» есть отличный гайд. Здесь же отметим пару основных вещей.

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

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

Вроде бы все? Теперь нужно проверить, работает наш пример или мы где-то ошиблись. Но как протестировать?

Тестирование навыков

Существует несколько способов тестирования навыков. Один из самых простых — с помощью утилиты alice-nearby, которую можно запускать локально на своем компьютере. О том, как ее установить, написано достаточно подробно, так что не буду заострять на этом внимание. Итак, начинаем тестирование.

Запускаем наше приложение.

исходный код алисы яндекс Отображение в IDLE

исходный код алисы яндекс Приложение для тестирования

Поздравляю, твой первый навык работает! Обрати внимание: справа отображаются запрос и ответ в JSON. Но на самом деле авторы этой утилиты не придумывали интерфейс самостоятельно. Они просто сделали локальную версию приложения для тестирования навыков на основе тестового стенда в личном кабинете «Яндекс.Диалоги».

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

Откроется страница с настройками. Их много, сконцентрируемся на основных.

исходный код алисы яндекс Основные настройки

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

исходный код алисы яндекс Тестирование на «Я.Диалогах»

Хотелось бы не только писать, но и проверить, как бы все это звучало, если бы наши ответы зачитывала «Алиса». Это можно будет сделать, если наш навык пройдет модерацию… Он вряд ли ее пройдет, но не надо отчаиваться! Существует целых два решения.

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

Воспользоваться симулятором. В настройках необходимо указать URL — и можно начинать.

исходный код алисы яндекс
исходный код алисы яндекс

Продолжение доступно только участникам

Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

Источник

Текстовый виджет

Дуся — это виртуальный ассистент для вашего Android устройства. Здесь мы рассказываем о самых свежих новостях проекта.

Свежие записи

Ассистент Дуся

Блог голосового ассистента Дуся

Как научить Алису своим функциям

исходный код алисы яндекс

Совсем недавно Яндекс объявил о том, что теперь любой желающий может создать для голосового ассистента Алиса свои собственные функции. Пусть пока это и бета-версия платформы, но попробовать научить Алису чему-то интересному или полезному можно уже сейчас.

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

исходный код алисы яндекс

Как вы наверное помните, мы пару лет назад запустили свою платформу для создания чат-ботов под названием Zenbot. Она позволяет легко создавать своих чат-ботов для любых мессенджеров и каналов типа Telegram, Facebook, или даже создать чат-бота или функцию для Дуси. И при этом вам не понадобится арендовать сервера и искать решения для процессинга естественного языка или диалогового движка. Все это уже есть в Zenbot.

С тех пор прошло довольно много времени. И хотя теперь у нас уже почти готова гораздо более продвинутая платформа с крутым интерфейсом, которую мы представим совсем скоро (в конце мая), но zenbot.org по-прежнему хорошо справляется со своими функциями и его вполне можно использовать уже сегодня для создания функций Алисы.

Яндекс Диалоги (бета)

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

Различие первое — дополнительные навыки Алисы запускаются только специальными командами «включи», «открой» или «запусти». Например если ваш навык называется «Мой новый навык», то пользователь сперва должен сказать Алисе «Запусти мой новый навык». Только после этого Алиса запустит ваш навык и передаст управление ему.

Различие второе — все навыки Алисы работают только на сервере, а не на устройстве. Поэтому не получится выполнить какую-либо операцию прямо на устройстве (например, открыть другое приложение, отправить СМС контакту или совершить звонок). Также навык Алисы не сможет отправить какой-либо запрос на локальный IP адрес в вашем доме или офисе (а это бывает нужно для функций типа умный дом).

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

Кстати каталог пользовательских навыков для Алисы сейчас доступен только в бета-версии приложения Яндекс. Нажимаем меню в правом верхнем углу и далее — Что умеет Алиса.

Как создать навык для Алисы

исходный код алисы яндексСейчас чтобы создать навык для Алисы вам потребуется зарегистрировать навык на https://beta.dialogs.yandex.ru/ и предоставить webhook сервера, где собственно и работает вся логика вашего навыка. То есть Яндекс предлагает нам самим арендовать сервер, написать программу навыка на каком-нибудь языке программирования, которая реализует API Алисы и потом развернуть ее на этом сервере. Вдобавок к этому, нужно еще и научиться обрабатывать речь на естественном языке, ведь пользователи Алисы используют микрофон или клавиатуру, чтобы взаимодействовать с ассистентом…

Короче говоря, нужно проделать немало работы, прежде чем наш навык заработает. А Zenbot как раз освобождает нас от этой рутины, решая все вопросы с серверами, протоколами и естественным языком!

Создаем навык на Zenbot

исходный код алисы яндексИтак, с чего начать создание навыка для Алисы на Zenbot? Конечно же с логина на zenbot.org. Открываем страничку и нажимаем кнопку Sign in with Github.

Вам понадобится создать аккаунт на github.com где заодно и можно хранить исходный код навыка для Алисы

Откроется окно, где можно добавить нового бота (бот — это и есть наша голосовая функция для Алисы). После добавления откроется страница настроек бота. Тут же можно будет бота потестировать.

Если хотите поскорее потестировать зенбот с Алисой, то используйте наш тестовый проект как написано тут https://github.com/uzyovoys/zenbot/tree/master/alice

Код для Zenbot

Бот на Zenbot — это тоже код. Код для Zenbot — это XML и JS файлы, в которых описывается, как развивается диалог с пользователем. Собственно вокруг понятий «диалог», «контекст», «сущности» и крутится вся платформа Zenbot. Подробно об этом можно прочитать в документации к Zenbot. Тут же мы опишем основные моменты и приведем простой пример.

Итак, создадим на своем ПК обычный текстовый файл например skill.xml и напишем там

Все просто. У нас есть главный диалоговый контекст (тэг context), в нем пользователь говорит что-то типа «Ну привет Алиса», а Алиса отвечает «Ну привет». Тэг input описывает, какие фразы ожидаются от пользователя, а output — что нужно ответить, когда пользователь говорит что-то похожее.

Конечно же это простейший пример. Можно обрабатывать гораздо более сложные фразы, Zenbot умеет на лету вытаскивать их фраз данные, преобразовывать в нужный формат. Ответы тоже могут быть сложными (далее посмотрим как это сделать). Можно также переключать пользователя на другой контекст диалога и так далее. Все это описано в документации с примерами.

Как загрузить бота на Zenbot

Файл мы создали (кстати в реально больших проектах можно создать много файлов xml и js). Теперь нам нужно создать Git репозиторий например на github.com и загрузить код туда. Это нужно сделать один раз для проекта, потом можно просто заливать новый код на github и Zenbot будет автоматически или вручную обновлять вашего бота.

После этого зайдем в настройки нашего бота на Zenbot и нажмем Configure Git repository. Заполняем поля для нашего репозитория. Если вы используете github, то поля имя пользователя и пароль можно не указывать. Еще в каждом репозитории можно держать код для нескольких ботов. Поэтому в настройках есть поле Directory. Тут можно указать папку в ваших исходниках, где лежат XML и JS файлы для именно этого бота.

Нажимаем Save settings. После этого Zenbot попытается собрать вашего бота и расскажет о своем успехе или провале на странице Build reports. Кстати тут же можно нажать кнопку Rebuild now чтобы поскорее пересобрать бота, когда вы изменили его код в репозитории.

Если все прошло хорошо и ваш бот написан правильно, то увидим вот такое сообщение

исходный код алисы яндекс

Тестируем бота в Zenbot

Нажмем на кнопку Test this bot — и откроется страничка для тестов. ТУт можно написать «приветы» и увидеть ответ от сервера Zenbot. Это простой вывод в формате JSON, в котором можно увидеть все что получилось в итоге. Нам это понадобится только для отладки. И наконец теперь можно подключить бота к Алисе.

Подключаем бота к Алисе

Зайдите в настройки навыка Алисы в интерфейсе https://beta.dialogs.yandex.ru/developer/ и укажите в качестве Webhook URL адрес вида https://zenbot.org/api/alice/ключ

В качестве ключа впишите идентификатор вашего бота в Zenbot. Его можно увидеть в адресной строке на zenbot.org. Это последовательность латинских букв и цифр в конце адреса.

исходный код алисы яндекс

И теперь можно нажать на вкладку Тестирование в Диалогах для Алисы и попробовать написать «привет». Мы увидим ответы от нашего бота!

Делаем бота умнее

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

Разберем. Тут после того как пользователь скажет «Привет Алиса», бот проверит переменную UserName, и если она пуста (то есть ее нет вовсе), переведет пользователя в другой диалоговый контекст, где попросит назвать свое имя. После того как пользователь ответит, бот сохранит имя в переменную UserName (функция cap просто сделает первую букву имени заглавной) и скажет пользователю «Приятно познакомиться, Вася» (если пользователь назвал себя Вася).

В следующий раз, когда тот же пользователь вновь активирует ваш навык для Алисы и скажет «привет», Алиса уже поздоровается с ним по имени. Потому что Zenbot сохранил его в базе данных. Вам не нужно самостоятельно сохранять/извлекать данные из какой-либо базы данных. Zenbot сделает эту частую операцию для вас.

А что-нибудь поинтереснее есть?

Есть конечно. Специально для нашей статьи мы подготовили более интересный навык для Алисы, который умеет не только знакомиться с пользователем, но и искать информацию в Википедии и отображать кнопки в интерфейсе Алисы. Этого бота можно найти на нашем гитхабе https://github.com/uzyovoys/zenbot/tree/master/alice

Делаем те же шаги. Создаем бота на zenbot.org, в настройках репозитория прописываем URL https://github.com/uzyovoys/zenbot и в поле Directory указываем alice. Потом идем на https://beta.dialogs.yandex.ru/developer/ и создаем новый диалог. Привязываем его к боту на Zenbot через Webhook URL. И тестируем.

Несколько полезностей

Как добавить кнопки?

Используйте тэг sample. Он создает кнопку, при нажатии на которую в бота придет запрос, текст которого указан на кнопке. Подробнее в документации по sample.

Первый запрос

Когда пользователь активирует ваш навык фразой «Запусти такой-то навык», вашему боту придет пустой запрос. На него нужно выдать реакцию (например поздороваться или что-то еще). Для этого обязательно заведите в своем боте input такого вида

Как закончить сессию

Если в вашем навыке в какой-то момент нужно закончить сессию, просто создайте переменную end_session вот так

Как синтезировать речь

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

Как сформировать JSON ответ

Если вы хотите полностью сформировать ответ в JSON формате по протоколу Алисы (например если вам не хватает функционала тэга sample), то вы можете вернуть JSON ответа в output вот так

Куда дальше?

Для Zenbot мы написали подробную документацию с примерами. Еще у нас есть репозиторий с примерами готовых ботов и FAQ который описывает некоторые основные особенности платформы. У вас не займет много времени, чтобы понять, как писать сценарии ботов, которые понимают естественный язык и могут выполнять полезные (и бесполезные) функции.

Источник

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

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