Асинхронная платформа для создания навыков Алисы.
Установите зависимости платформы
pip install -r requirements.txt
Настройте settings.py
файл
- url - Переменная по которой будет доступны post запросы для Алисы
- secret_key - Переменная для проксирования через Ngnix
- host - IP адрес для развертывания сервера Sanic
- port - Port для развертывания сервера Sanic
- debug - Режим разработчика
- app_name - Название приложения для сервера Sanic
После всех настроек следует произвести миграцию моделей
alembic revision --autogenerate -m "migration name"
alembic upgrade head
Для тестирования навыка нам потребуется утилита alice-nearby, в папке bin репозитория утилиты уже есть скомпилированные версии для MacOS и Windows
Запустим платформу командой
python3 main.py
По дефолту навык алисы будет доступен по адресу http://127.0.0.1:8000/alice
, зная все эти данные переходим к alice-nearby и начинаем тестирование навыка
./alice-nearby-macos-amd64 --webhook=http://127.0.0.1:8000/alice --port=3456
Теперь перейдя по http://localhost:3456/
мы можем протестировать наш навык!
Все команды для навыка находятся в папке /bot/commands, в этой папке можно создавать свои py файлы, создадим новый с названием hello.py
и впишем туда следующий код
from bot import handler
@handler.message(names="Hello")
async def _(msg, database):
return msg("World!")
Переменная names
принимает обьект list или str для инициализации команды и последующим поиском этой или нескольких строк в полученным платформой текстом, т.е. если человек скажет алисе - "Oh, Alice! Hello.", платформа получит этот текст и если есть команды с одним из этих слов или похожими словами в точности до (примерно) 80%, триггер команды сработает и скажет человеку "World!"
В файле default.py
есть примеры команд, возьмем эту
@handler.message(names=["Включить", "свет"])
переменная names
принимает list обьект (в простонароде массив), если человек что-то скажет Алисе и в этой команде будут эти два слова (включить/свет)
то Алиса ответит, эти слова по отдельности работать не будут (нужно писать отдельные команды)
return msg("World!")
Зачем нам возвращать обьект Message
если можно вернуть просто текст? Попробуйте! Практика и тесты это хороший способ изучить что-либо!
Но функция msg (обьект Message) лишь обертка над json функцией Sanic, по сути мы возвращаем обычный готовый json, это проще, но никто не запрещает вам использовать функции Sanic!
Переменная database
обьект SQLAlchemy, здесь не будут примеры для работы с данной библиотекой, все подобное вы можете найти в оффициальных доках от этой либы, но все же маленький пример есть в default.py
Все модели создаются в папке /database/models/.
- Развертывание навыка на сервере (требуется SSL)
- Настройка навыка в Яндекс Диалогах
- Поиск похожих слов дает осечку в коротких словах, к примеру команда "пока", сработает если человек скажет "ока"