/cleverbots_test_job

Тестовое задание для Cleverbots

Primary LanguagePythonMIT LicenseMIT

Телеграм-бот с Django Admin

Styles Code style: black license MIT

Тестовое задание для Cleverbots.

Создать бота и панель управления ботом для Телеграм.

Бот должен выводить полный адрес объекта по короткому тексту запроса с использованием API Яндекс Карт. Бот и панель управления подключены к одной базе данных (любая реляционная).

Бот

Элементы управления

Главное меню (вызывается по команде /start)

Пользователю отправляется приветственное сообщение вместе с 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 результата это:

  1. Россия, Москва, Красная площадь
  2. Россия, Орловская область, Колпнянский район, деревня Красная Площадь

Бот в ответ на подобный вопрос ответит полным адресом 2 объекта, если только не добавить в список разрешенных областей "Москва" или "Россия".

Панель управления

Администратор (суперпользователь), может добавлять в панели управления других пользователей с обязательным выбором одной из ролей:

  • Пользователи

Могут только просматривать разрешенные области поиска.

  • Модераторы

Имеют доступ ко всем операциям с разрешенными областями поиска.

Результаты поиска просматривать и удалять могут все, но редактировать\добавлять новые - никто

Созданные пользователи автоматически получают доступ к панели управления в соответствии с выбранной ролью. Полученные права пользователя отображаются на странице редактирования в разделе Права доступа, где при необходимости их можно дополнить/изменить/удалить.

Развертка в docker-compose

  1. Клонируем репозиторий
git clone https://github.com/nightriddler/cleverbots_test_job.git
  1. В папке с проектом создаем файл .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)

Получить токен бота

Получить токен API Геокодера

  1. Запускаем docker-compose
docker-compose up -d
  1. Делаем миграции, собираем статику, создаем супер пользователя
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
  1. Панель управления доступна по адресу
http://127.0.0.1/admin
  1. После миграций, через панель управления необходимо добавить Область поиска после чего телеграм-бот можно будет использовать.

Бот запускается автоматически и доступен в соответсвии с указанным BOT_TOKEN в .env.

Тесты

docker-compose exec django_admin python manage.py test

Тесты запускать после миграций

Для запуска тестов обязательно наличие API_GEO_TOKEN в .env.

Связаться с автором

LinkedIn

Telegram

Портфолио