Клиент для работы с навыками Яндекс.Диалогов Алисы локально.
Идея была в том, чтобы написать реализацию, умеющую работать с навыками Яндекс.Диалогов без изменения. Клиент использует тот же протокол, что и Яндекс.Диалоги с ограничениями (см. ниже).
- Тестирование навыков
- Запуск навыков локально
- Автоматическое тестирование навыков по сценариям
- Сохранение истории последних сообщений (по умолчанию 20)
- Выбор из последних отправленных команд стрелками вниз-вверх
- Возможность переотправить выбранное сообщение
- Вывод в консоль JSON запросов и ответов в удобном формате
- Вывод кнопок, отправка запросов с
type = 'ButtonPressed'
- Подключение навыка по Webhook URL
- Выбор из последних URL навыков
- Прямая ссылка на запуск конкретного навыка и отправку первого сообщения
- Возможность обращаться к навыку из браузера или через сервер, для обхода CORS
- Сценарии тестирования навыков
- Прогон всех тестовых сценариев одной кнопкой
- Вывод проваленных тестов с кнопками повтора
- Горячие кнопки для очистки input и истории сообщений (Ctrl+C, Ctrl+L)
- Голосовой ввод через браузерный Speech API или через Яндекс SpeechKit
session.session_id
сбрасывается при каждом обновлении страницы или при завершении диалога из навыкаsession.user_id
хранится в localStorage, то есть каждый браузер считается новым юзером- Изображения в ответе навыка не поддерживаются
- Голоса нет
Проще всего зайти на https://dialogs.popstas.ru (это приложение хостится на github pages, серверной части нет),
ввести use http://webhook.url
(URL вашего навыка) и пользоваться. URL запоминается в localStorage.
Данные отправляются только в Speech API и на URL, который вы укажете, но приложение может быть сломано в процессе разработки, поэтому надежнее скачать и запустить у себя.
Вы можете указывать прямые ссылки на навыки через GET параметр use
, `?use=http://webhook.url.
Например, это будет работать: https://dialogs.home.popstas.ru/?use=https://dialogflower.com/webhook/d4dbb4f93bed4e5e989107d679e20083
Так удобно давать друзьям потестить свой навык.
Бывает, что удобнее тестить навык по одной фразе. Клиент поддерживает повтор любой фразы и повтор последней фразы по нажатию стрелки вверх, но Alt+Tab, Ctrl+R может быть быстрее, т.к. не надо ставить фокус на input и перемещать руку в правую часть.
Можно указать сообщение в GET параметре msg, например, https://dialogs.home.popstas.ru/?use=https://dialogflower.com/webhook/d4dbb4f93bed4e5e989107d679e20083&msg=привет
В приложении встроена простая система тестирования: ввод последовательностей фраз и проверка текстов ответов.
- При подключении навыка приложение пытается получить /scenarios.yml GET запросом
- Если ему это удается, выводятся кнопки для запуска тестов
- При нажатии на кнопку отправляются реплики к навыку и проверяются ответы
Вы можете запустить все имеющиеся тесты одной кнопкой.
Тесты выполняются в том порядке, в котором перечислены в yml:
Когда вы пишете новую команду для навыка, вам не нужно прогонять все тесты после каждого изменения кода. Вывод кнопок тестов на проваленных тестах дает возможность быстро тестировать разрабатываемую фичу:
- Запустить все тесты
- Увидеть проваленные
- Запустить только проваленные
- Запускать их одной кнопкой, пока проваленных не останется
У приложения на https://dialogs.popstas.ru есть ограничение: так как у него нет серверной части, запросы к навыку шлются прямо из браузера, из-за этого все общедоступные источники навыков, вроде verter, tobotornot и dialogflower не будут отвечать вам, т.к. будут действовать правила CORS. Вы можете использовать его только с навыком, который отдает разрешающие заголовки.
Это можно обойти, если использовать версию с серверной частью, она перенаправляет через себя все запросы к навыкам, обходя ограничения. Вы можете собрать свою версию сами или зайти на https://dialogs.home.popstas.ru, она с серверной частью, но только для внешних запросов к навыкам, все данные по-прежнему хранятся в localStorage.
При сборке за это отвечает переменная окружения IS_PROXY
, если она равна единице, 1
, то запросы будут идти через сервер.
Но если вы делаете npm run generate
, то переменную надо ставить на сборку.
Если приложение изначально запущено с IS_PROXY
, то в интерфейсе вы можете переключать режим на запросы напрямую.
docker run --name yandex-dialogs-client -d -p 3000:3000 popstas/yandex-dialogs-client
npm install -g yandex-dialogs-client
# launch:
yandex-dialogs-client
git clone https://github.com/popstas/yandex-dialogs-client.git
cd yandex-dialogs-client
cp .env.sample .env
Нужно скопировать .env.sample
в .env
и заполнить. После этого собрать и поднять:
docker-compose build
docker-compose up -d
git clone https://github.com/popstas/yandex-dialogs-client.git
cd yandex-dialogs-client
npm install
npm run build
npm run start
По умолчанию работает распознавание через SpeechAPI, встроенный в браузер (Chome). Оно работает в офлайне, но качество у него хуже, чем у Яндекса.
Можно включить Яндекс через переменные окружения:
SPEECH_ENGINE
- выбор движка,browser
илиyandex
YANDEX_WEBSPEECH_KEY
- API ключ