Тестовое задание для Cleverbots.
Создать бота и панель управления ботом для Телеграм.
Бот должен выводить полный адрес объекта по короткому тексту запроса с использованием API Яндекс Карт. Бот и панель управления подключены к одной базе данных (любая реляционная).
Пользователю отправляется приветственное сообщение вместе с QR клавиатурой. Клавиатура состоит из двух кнопок:
- Новый поиск
- История
При нажатии на клавишу Новый поиск
пользователю предлагается ввести запрос. По текстовому запросу получается ответ от API, и пользователю ответным сообщением бота отправляется полный адрес первой найденной точки, соответствующей условию:
- её полный адрес должен включать в себя одну из областей, разрешённых для поиска (эти области добавляются в панели управления).
Если таких объектов не найдено, то возвращается соответствующее сообщение:
В доступных зонах поиска не найден адрес.
При нажатии на кнопку меню История
, пользователь получает сообщение, содержащее количество выполненных им запросов поиска к боту, и список последних 5 из них.
Вы совершили 6 поисковых запросов.
Ленинградский 54 -> Россия, Москва, Ленинградский проспект, 54/1 (14.02.2022)
Шоссе энтузиастов 33 -> Россия, Москва, шоссе Энтузиастов, 33 (14.02.2022)
Сокольническая 10а -> Россия, Москва, улица Сокольническая Слободка, 10 (14.02.2022)
Перовская17 -> Россия, Москва, Перовская улица, 15 (14.02.2022)
Перово -> Россия, Москва, Калининско-Солнцевская линия, метро Перово (14.02.2022)
Вернутся в меню /start
По запросу пользователя бота, в поиске будут выводиться только те адреса, которые содержат в себе название одной из сохраненных областей. К примеру:
Если в базе разрешенных областей поиска содержится только одна запись - с названием "Орловская область", то при поиске будут пропускаться все результаты, в полном адресе которых нет этого объекта.
Так, по запросу "Красная площадь" первые 2 результата это:
- Россия, Москва, Красная площадь
- Россия, Орловская область, Колпнянский район, деревня Красная Площадь
Бот в ответ на подобный вопрос ответит полным адресом 2 объекта, если только не добавить в список разрешенных областей "Москва" или "Россия".
Администратор (суперпользователь), может добавлять в панели управления других пользователей с обязательным выбором одной из ролей:
- Пользователи
Могут только просматривать разрешенные области поиска.
- Модераторы
Имеют доступ ко всем операциям с разрешенными областями поиска.
Результаты поиска просматривать и удалять могут все, но редактировать\добавлять новые - никто
Созданные пользователи автоматически получают доступ к панели управления в соответствии с выбранной ролью. Полученные права пользователя отображаются на странице редактирования в разделе Права доступа
, где при необходимости их можно дополнить/изменить/удалить.
- Клонируем репозиторий
git clone https://github.com/nightriddler/cleverbots_test_job.git
- В папке с проектом создаем файл
.env
с переменными окружения (либо вносим изменения и переименовываем шаблон.env.example
):
SECRET_KEY=secret
BOT_TOKEN=bot_token
API_GEO_TOKEN=api_geo_token
POSTGRES_DB=postgres
POSTGRES_USER=postgres
POSTGRES_PASSWORD=postgres
POSTGRES_HOST=db
POSTGRES_PORT=5432
Cгенерировать SECRET_KEY можно в терминале:
echo $(openssl rand -hex 32)
- Запускаем docker-compose
docker-compose up -d
- Делаем миграции, собираем статику, создаем супер пользователя
docker-compose exec django_admin python manage.py migrate --noinput
docker-compose exec django_admin python manage.py collectstatic --noinput
docker-compose exec django_admin python manage.py createsuperuser
- Панель управления доступна по адресу
http://127.0.0.1/admin
- После миграций, через панель управления необходимо добавить
Область поиска
после чего телеграм-бот можно будет использовать.
Бот запускается автоматически и доступен в соответсвии с указанным
BOT_TOKEN
в.env
.
docker-compose exec django_admin python manage.py test
Тесты запускать после миграций
Для запуска тестов обязательно наличие
API_GEO_TOKEN
в.env
.