{"id":13400851,"url":"https://github.com/popstas/yandex-dialogs-client","last_synced_at":"2025-04-03T22:12:51.267Z","repository":{"id":34298755,"uuid":"137121579","full_name":"popstas/yandex-dialogs-client","owner":"popstas","description":"Тестирование навыков Яндекс.Диалогов Алисы с автотестами","archived":false,"fork":false,"pushed_at":"2023-01-04T05:49:58.000Z","size":9813,"stargazers_count":39,"open_issues_count":18,"forks_count":6,"subscribers_count":6,"default_branch":"master","last_synced_at":"2024-09-17T08:27:02.876Z","etag":null,"topics":["alice","alice-skills","yandex-alice","yandex-dialogs"],"latest_commit_sha":null,"homepage":"https://dialogs.popstas.ru","language":"Vue","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/popstas.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-06-12T20:02:23.000Z","updated_at":"2024-04-28T21:46:52.000Z","dependencies_parsed_at":"2023-01-15T06:15:19.867Z","dependency_job_id":null,"html_url":"https://github.com/popstas/yandex-dialogs-client","commit_stats":null,"previous_names":[],"tags_count":32,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/popstas%2Fyandex-dialogs-client","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/popstas%2Fyandex-dialogs-client/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/popstas%2Fyandex-dialogs-client/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/popstas%2Fyandex-dialogs-client/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/popstas","download_url":"https://codeload.github.com/popstas/yandex-dialogs-client/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247086027,"owners_count":20881160,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["alice","alice-skills","yandex-alice","yandex-dialogs"],"created_at":"2024-07-30T19:00:56.253Z","updated_at":"2025-04-03T22:12:51.226Z","avatar_url":"https://github.com/popstas.png","language":"Vue","funding_links":[],"categories":["Разработка","Vue"],"sub_categories":["Тестирование"],"readme":"# yandex-dialogs-client\n\nКлиент для работы с навыками Яндекс.Диалогов Алисы локально.\n\n![demo](/assets/demo.gif)\n\n[Блогпост](https://blog.popstas.ru/blog/2020/04/14/yandex-dialogs/#yandex-dialogs-client---инструмент-для-тестирования-навыков).\n\nИдея была в том, чтобы написать реализацию, умеющую работать с навыками Яндекс.Диалогов без изменения.\nКлиент использует тот же протокол, что и Яндекс.Диалоги с ограничениями (см. ниже).\n\n## Зачем это может быть нужно:\n- Тестирование навыков\n- Запуск навыков локально\n- Автоматическое тестирование навыков по сценариям\n\n## Возможности\n- Сохранение истории последних сообщений (по умолчанию 20)\n- Выбор из последних отправленных команд стрелками вниз-вверх\n- Возможность переотправить выбранное сообщение\n- Вывод в консоль JSON запросов и ответов в удобном формате\n- Вывод кнопок, отправка запросов с `type = 'ButtonPressed'`\n- Подключение навыка по Webhook URL\n- Выбор из последних URL навыков\n- Прямая ссылка на запуск конкретного навыка и отправку первого сообщения\n- Возможность обращаться к навыку из браузера или через сервер, для обхода [CORS](#CORS)\n- Сценарии тестирования навыков\n- Прогон всех тестовых сценариев одной кнопкой\n- Вывод проваленных тестов с кнопками повтора\n- Горячие кнопки для очистки input и истории сообщений (Ctrl+C, Ctrl+L)\n- Голосовой ввод через браузерный Speech API или через Яндекс SpeechKit\n\n## Ограничения, особенности\n- `session.session_id` сбрасывается при каждом обновлении страницы или при завершении диалога из навыка\n- `session.user_id` хранится в localStorage, то есть каждый браузер считается новым юзером\n- Изображения в ответе навыка не поддерживаются\n- Голоса нет\n\n## Использование\nПроще всего зайти на https://dialogs.popstas.ru (это приложение хостится на github pages, серверной части нет), \nввести `use http://webhook.url` (URL вашего навыка) и пользоваться. URL запоминается в localStorage.\n\nДанные отправляются только в Speech API и на URL, который вы укажете, но приложение может быть сломано в процессе разработки,\nпоэтому надежнее скачать и запустить у себя.\n\n### Прямая ссылка на навык\nВы можете указывать прямые ссылки на навыки через GET параметр `use`, `?use=http://webhook.url.\n\nНапример, это будет работать: https://dialogs.home.popstas.ru/?use=https://dialogflower.com/webhook/d4dbb4f93bed4e5e989107d679e20083\n\nТак удобно давать друзьям потестить свой навык.\n\n### Отправка сообщения боту по F5 или Ctrl+R\nБывает, что удобнее тестить навык по одной фразе. Клиент поддерживает повтор любой фразы и повтор последней фразы по нажатию стрелки вверх, но Alt+Tab, Ctrl+R может быть быстрее, т.к. не надо ставить фокус на input и перемещать руку в правую часть.\n\nМожно указать сообщение в GET параметре msg, например, https://dialogs.home.popstas.ru/?use=https://dialogflower.com/webhook/d4dbb4f93bed4e5e989107d679e20083\u0026msg=привет\n\n### Сценарии тестирования навыков\nВ приложении встроена простая система тестирования: ввод последовательностей фраз и проверка текстов ответов.\n\n#### Как это работает:\n- При подключении навыка приложение пытается получить /scenarios.yml GET запросом\n- Если ему это удается, выводятся кнопки для запуска тестов\n- При нажатии на кнопку отправляются реплики к навыку и проверяются ответы\n\n[Пример scenarios.yml](https://github.com/popstas/yandex-dialogs-whatis/blob/master/static/scenarios.yml).\n\n![scenarios](/assets/scenarios.gif)\n\n### Запуск всех сценариев\nВы можете запустить все имеющиеся тесты одной кнопкой.\n\nТесты выполняются в том порядке, в котором перечислены в yml:\n\n![run_all_tests](/assets/run_all_tests.gif)\n\n\n### Повтор проваленных тестов\nКогда вы пишете новую команду для навыка, вам не нужно прогонять все тесты после каждого изменения кода.\nВывод кнопок тестов на проваленных тестах дает возможность быстро тестировать разрабатываемую фичу:\n\n- Запустить все тесты\n- Увидеть проваленные\n- Запустить только проваленные\n- Запускать их одной кнопкой, пока проваленных не останется\n\n![run_failed_tests](/assets/run_failed_tests.gif)\n\n### CORS\nУ приложения на https://dialogs.popstas.ru есть ограничение: так как у него нет серверной части,\nзапросы к навыку шлются прямо из браузера, из-за этого все общедоступные источники навыков, вроде \n[verter](https://www.verter.online/), \n[tobotornot](http://alisa.tobotornot.com/) и \n[dialogflower](https://dialogflower.com/) \nне будут отвечать вам, т.к. будут действовать правила [CORS](https://developer.mozilla.org/ru/docs/Web/HTTP/CORS).\nВы можете использовать его только с навыком, который отдает разрешающие заголовки.\n\nЭто можно обойти, если использовать версию с серверной частью, она перенаправляет через себя все запросы к навыкам, \nобходя ограничения. Вы можете собрать свою версию сами или зайти на https://dialogs.home.popstas.ru,\nона с серверной частью, но только для внешних запросов к навыкам, все данные по-прежнему хранятся в localStorage.\n\nПри сборке за это отвечает переменная окружения `IS_PROXY`, если она равна единице, `1`, то запросы будут идти через сервер.\nНо если вы делаете `npm run generate`, то переменную надо ставить на сборку.\n\nЕсли приложение изначально запущено с `IS_PROXY`, то в интерфейсе вы можете переключать режим на запросы напрямую.\n\n\n## Установка\n\n#### Запуск через Docker\n\n``` bash\ndocker run --name yandex-dialogs-client -d -p 3000:3000 popstas/yandex-dialogs-client\n```\n\n#### Установка через npm\n\n``` bash\nnpm install -g yandex-dialogs-client\n\n# launch:\nyandex-dialogs-client\n```\n\n#### Запуск через Docker compose\n``` bash\ngit clone https://github.com/popstas/yandex-dialogs-client.git\ncd yandex-dialogs-client\ncp .env.sample .env\n```\n\nНужно скопировать `.env.sample` в `.env` и заполнить. После этого собрать и поднять:\n\n``` bash\ndocker-compose build\ndocker-compose up -d\n```\n\n#### Сборка из исходников\n\n``` bash\ngit clone https://github.com/popstas/yandex-dialogs-client.git\ncd yandex-dialogs-client\nnpm install\nnpm run build\nnpm run start\n```\n\n#### Выбор голосового распознавания от Яндекс\nПо умолчанию работает распознавание через SpeechAPI, встроенный в браузер (Chome).\nОно работает в офлайне, но качество у него хуже, чем у Яндекса.\n\nМожно включить Яндекс через переменные окружения:\n\n- `SPEECH_ENGINE` - выбор движка, `browser` или `yandex`\n- `YANDEX_WEBSPEECH_KEY` - API ключ\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpopstas%2Fyandex-dialogs-client","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpopstas%2Fyandex-dialogs-client","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpopstas%2Fyandex-dialogs-client/lists"}