All Projects → popstas → yandex-dialogs-client

popstas / yandex-dialogs-client

Licence: MIT license
Тестирование навыков Яндекс.Диалогов Алисы с автотестами

Programming Languages

Vue
7211 projects
javascript
184084 projects - #8 most used programming language

Projects that are alternatives of or similar to yandex-dialogs-client

alice
Alice is a Go package providing helpers for developing skills for Alice virtual assistant via Yandex.Dialogs platform.
Stars: ✭ 15 (-59.46%)
Mutual labels:  alice, yandex-dialogs, yandex-alice
yandex-dialogs-php-sdk
PHP-библиотека для облегчения работы с диалогами от Яндекс
Stars: ✭ 23 (-37.84%)
Mutual labels:  alice, yandex-dialogs, alice-skills
alice-tester
Библиотека для автоматического тестирования навыков Алисы на Node.js.
Stars: ✭ 16 (-56.76%)
Mutual labels:  alice, alice-skills
alice-renderer
Node.js библиотека для формирования ответов в навыках Яндекс Алисы.
Stars: ✭ 27 (-27.03%)
Mutual labels:  alice, alice-skills
awesome-alice
Библиотеки и ресурсы для Яндекс.Диалогов
Stars: ✭ 258 (+597.3%)
Mutual labels:  yandex-dialogs, yandex-alice
Alice
Expressive fixtures generator
Stars: ✭ 2,289 (+6086.49%)
Mutual labels:  alice
AliceO2
O2 software project for the ALICE experiment at CERN
Stars: ✭ 67 (+81.08%)
Mutual labels:  alice
alice
Alice Margatroid, a dollmaster that pretends not to be a doll itself.
Stars: ✭ 14 (-62.16%)
Mutual labels:  alice
alice-v2-monorepo
Alice 2.0 protocol - the newest version of Alice that combines impact investments and outcome payments. Built using Impact Delivery Agreement smart contracts and a new token standard ('Fluid balance tokens'). Also comes with a reference dApp. Built on Ethereum.
Stars: ✭ 19 (-48.65%)
Mutual labels:  alice
vertex
Vertex is a generalized, secure, peer-to-peer communications platform; formerly of the divmod.org project (https://code.launchpad.net/divmod.org/)
Stars: ✭ 74 (+100%)
Mutual labels:  alice
alice-dotnet
Пример простого скилла для платформы Яндекс.Диалоги на c#
Stars: ✭ 17 (-54.05%)
Mutual labels:  alice
node-red-contrib-yandex-station-management
Модуль node-red-contrib-yandex-station-management для управления умными колонками от Яндекс
Stars: ✭ 20 (-45.95%)
Mutual labels:  alice
yandex-dialogs-smarthome-mqtt
Умный дом Яндекса для MQTT устройств (Sonoff Tasmota и т.п.)
Stars: ✭ 17 (-54.05%)
Mutual labels:  yandex-dialogs

yandex-dialogs-client

Клиент для работы с навыками Яндекс.Диалогов Алисы локально.

demo

Блогпост.

Идея была в том, чтобы написать реализацию, умеющую работать с навыками Яндекс.Диалогов без изменения. Клиент использует тот же протокол, что и Яндекс.Диалоги с ограничениями (см. ниже).

Зачем это может быть нужно:

  • Тестирование навыков
  • Запуск навыков локально
  • Автоматическое тестирование навыков по сценариям

Возможности

  • Сохранение истории последних сообщений (по умолчанию 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

Так удобно давать друзьям потестить свой навык.

Отправка сообщения боту по F5 или Ctrl+R

Бывает, что удобнее тестить навык по одной фразе. Клиент поддерживает повтор любой фразы и повтор последней фразы по нажатию стрелки вверх, но Alt+Tab, Ctrl+R может быть быстрее, т.к. не надо ставить фокус на input и перемещать руку в правую часть.

Можно указать сообщение в GET параметре msg, например, https://dialogs.home.popstas.ru/?use=https://dialogflower.com/webhook/d4dbb4f93bed4e5e989107d679e20083&msg=привет

Сценарии тестирования навыков

В приложении встроена простая система тестирования: ввод последовательностей фраз и проверка текстов ответов.

Как это работает:

  • При подключении навыка приложение пытается получить /scenarios.yml GET запросом
  • Если ему это удается, выводятся кнопки для запуска тестов
  • При нажатии на кнопку отправляются реплики к навыку и проверяются ответы

Пример scenarios.yml.

scenarios

Запуск всех сценариев

Вы можете запустить все имеющиеся тесты одной кнопкой.

Тесты выполняются в том порядке, в котором перечислены в yml:

run_all_tests

Повтор проваленных тестов

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

  • Запустить все тесты
  • Увидеть проваленные
  • Запустить только проваленные
  • Запускать их одной кнопкой, пока проваленных не останется

run_failed_tests

CORS

У приложения на https://dialogs.popstas.ru есть ограничение: так как у него нет серверной части, запросы к навыку шлются прямо из браузера, из-за этого все общедоступные источники навыков, вроде verter, tobotornot и dialogflower не будут отвечать вам, т.к. будут действовать правила CORS. Вы можете использовать его только с навыком, который отдает разрешающие заголовки.

Это можно обойти, если использовать версию с серверной частью, она перенаправляет через себя все запросы к навыкам, обходя ограничения. Вы можете собрать свою версию сами или зайти на https://dialogs.home.popstas.ru, она с серверной частью, но только для внешних запросов к навыкам, все данные по-прежнему хранятся в localStorage.

При сборке за это отвечает переменная окружения IS_PROXY, если она равна единице, 1, то запросы будут идти через сервер. Но если вы делаете npm run generate, то переменную надо ставить на сборку.

Если приложение изначально запущено с IS_PROXY, то в интерфейсе вы можете переключать режим на запросы напрямую.

Установка

Запуск через Docker

docker run --name yandex-dialogs-client -d -p 3000:3000 popstas/yandex-dialogs-client

Установка через npm

npm install -g yandex-dialogs-client

# launch:
yandex-dialogs-client

Запуск через Docker compose

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 ключ
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].